From 954a5eadf1e3c04f8ca2569b9d7b2afc4c104206 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Tue, 2 Mar 2021 20:51:32 +0000 Subject: [PATCH] xdg-popup: uncontrain popups --- src/xdg-popup.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/xdg-popup.c b/src/xdg-popup.c index f4b9b181..c1a50efd 100644 --- a/src/xdg-popup.c +++ b/src/xdg-popup.c @@ -50,6 +50,28 @@ popup_handle_new_xdg_popup(struct wl_listener *listener, void *data) xdg_popup_create(popup->view_child.parent, wlr_popup); } +static void +popup_unconstrain(struct xdg_popup *popup) +{ + struct view *view = popup->view_child.parent; + struct server *server = view->server; + struct wlr_box *popup_box = &popup->wlr_popup->geometry; + struct wlr_output_layout *output_layout = server->output_layout; + struct wlr_output *wlr_output = wlr_output_layout_output_at( + output_layout, view->x + popup_box->x, view->y + popup_box->y); + struct wlr_box *output_box = wlr_output_layout_get_box( + output_layout, wlr_output); + + struct wlr_box output_toplevel_box = { + .x = output_box->x - view->x, + .y = output_box->y - view->y, + .width = output_box->width, + .height = output_box->height, + }; + wlr_xdg_popup_unconstrain_from_box( + popup->wlr_popup, &output_toplevel_box); +} + void xdg_popup_create(struct view *view, struct wlr_xdg_popup *wlr_popup) { @@ -70,5 +92,5 @@ xdg_popup_create(struct view *view, struct wlr_xdg_popup *wlr_popup) popup->new_popup.notify = popup_handle_new_xdg_popup; wl_signal_add(&wlr_popup->base->events.new_popup, &popup->new_popup); - /* TODO: popup_unconstrain() */ + popup_unconstrain(popup); }