aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Aleksei Bavshin <alebastr89@gmail.com>2021-12-22 22:25:27 -0800
committerLibravatar Simon Ser <contact@emersion.fr>2022-01-12 14:55:56 +0100
commitaa443629b58e1d3d10cf64e689b661c076808d66 (patch)
tree990e9d79c969d5bb192f34458e9e8e3c5b87bfd8
parentPrint deprecation notice when running SUID (diff)
downloadsway-aa443629b58e1d3d10cf64e689b661c076808d66.tar.gz
sway-aa443629b58e1d3d10cf64e689b661c076808d66.tar.zst
sway-aa443629b58e1d3d10cf64e689b661c076808d66.zip
xdg-shell: use toplevel geometry to adjust the popup box
`popup_unconstrain` uses view coordinates to init the output box for popups. However wlroots expects the box to be set in a toplevel surface coordinate system, which is not always equal to view. The difference between those is a window geometry set via xdg-shell. GTK4 reserves some space for client-side decoration and thus has a window with top left corner not matching to (0, 0) of a surface. The box calculated without taking that into account was slightly shifted compared to the actual output and allowed to position part of the popup off screen.
-rw-r--r--sway/desktop/xdg_shell.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c
index c1e5bc68..5fae8296 100644
--- a/sway/desktop/xdg_shell.c
+++ b/sway/desktop/xdg_shell.c
@@ -72,8 +72,8 @@ static void popup_unconstrain(struct sway_xdg_popup *popup) {
72 // the output box expressed in the coordinate system of the toplevel parent 72 // the output box expressed in the coordinate system of the toplevel parent
73 // of the popup 73 // of the popup
74 struct wlr_box output_toplevel_sx_box = { 74 struct wlr_box output_toplevel_sx_box = {
75 .x = output->lx - view->container->pending.content_x, 75 .x = output->lx - view->container->pending.content_x + view->geometry.x,
76 .y = output->ly - view->container->pending.content_y, 76 .y = output->ly - view->container->pending.content_y + view->geometry.y,
77 .width = output->width, 77 .width = output->width,
78 .height = output->height, 78 .height = output->height,
79 }; 79 };