aboutsummaryrefslogtreecommitdiff
path: root/xwayland
diff options
context:
space:
mode:
Diffstat (limited to 'xwayland')
-rw-r--r--xwayland/xwm.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/xwayland/xwm.c b/xwayland/xwm.c
index b3e6c885..b53759da 100644
--- a/xwayland/xwm.c
+++ b/xwayland/xwm.c
@@ -164,6 +164,7 @@ static struct wlr_xwayland_surface *xwayland_surface_create(
wl_signal_init(&surface->events.set_decorations);
wl_signal_init(&surface->events.set_override_redirect);
wl_signal_init(&surface->events.ping_timeout);
+ wl_signal_init(&surface->events.set_geometry);
xcb_get_geometry_reply_t *geometry_reply =
xcb_get_geometry_reply(xwm->xcb_conn, geometry_cookie, NULL);
@@ -935,15 +936,25 @@ static void xwm_handle_configure_notify(struct wlr_xwm *xwm,
return;
}
- xsurface->x = ev->x;
- xsurface->y = ev->y;
- xsurface->width = ev->width;
- xsurface->height = ev->height;
+ bool geometry_changed =
+ (xsurface->x != ev->x || xsurface->y != ev->y ||
+ xsurface->width != ev->width || xsurface->height != ev->height);
+
+ if (geometry_changed) {
+ xsurface->x = ev->x;
+ xsurface->y = ev->y;
+ xsurface->width = ev->width;
+ xsurface->height = ev->height;
+ }
if (xsurface->override_redirect != ev->override_redirect) {
xsurface->override_redirect = ev->override_redirect;
wlr_signal_emit_safe(&xsurface->events.set_override_redirect, xsurface);
}
+
+ if (geometry_changed) {
+ wlr_signal_emit_safe(&xsurface->events.set_geometry, NULL);
+ }
}
#define ICCCM_WITHDRAWN_STATE 0