aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authorAleksei Bavshin <alebastr89@gmail.com>2021-12-22 22:25:27 -0800
committerSimon Ser <contact@emersion.fr>2022-01-12 14:55:56 +0100
commitaa443629b58e1d3d10cf64e689b661c076808d66 (patch)
tree990e9d79c969d5bb192f34458e9e8e3c5b87bfd8 /sway
parente1db1f8218998c428e8b087dda6660449ef2891a (diff)
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.
Diffstat (limited to 'sway')
-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) {
// the output box expressed in the coordinate system of the toplevel parent
// of the popup
struct wlr_box output_toplevel_sx_box = {
- .x = output->lx - view->container->pending.content_x,
- .y = output->ly - view->container->pending.content_y,
+ .x = output->lx - view->container->pending.content_x + view->geometry.x,
+ .y = output->ly - view->container->pending.content_y + view->geometry.y,
.width = output->width,
.height = output->height,
};