[PATCH] xwm: Send configure event when moving

Scott Moreau oreaus at gmail.com
Sun Mar 18 18:22:16 UTC 2018


Send a synthetic configure notify event to the reparented window to
update the position in Xwayland. This fixes menu positioning in clients
like VLC after moving the window.
---
 xwayland/window-manager.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c
index c307e19..542e9fb 100644
--- a/xwayland/window-manager.c
+++ b/xwayland/window-manager.c
@@ -659,13 +659,12 @@ weston_wm_window_get_input_rect(struct weston_wm_window *window,
 }
 
 static void
-weston_wm_window_send_configure_notify(struct weston_wm_window *window)
+weston_wm_window_send_configure_notify(struct weston_wm_window *window,
+										int x, int y)
 {
 	xcb_configure_notify_event_t configure_notify;
 	struct weston_wm *wm = window->wm;
-	int x, y;
 
-	weston_wm_window_get_child_position(window, &x, &y);
 	configure_notify.response_type = XCB_CONFIGURE_NOTIFY;
 	configure_notify.pad0 = 0;
 	configure_notify.event = window->id;
@@ -702,7 +701,7 @@ weston_wm_handle_configure_request(struct weston_wm *wm, xcb_generic_event_t *ev
 		return;
 
 	if (window->fullscreen) {
-		weston_wm_window_send_configure_notify(window);
+		weston_wm_window_send_configure_notify(window, 0, 0);
 		return;
 	}
 
@@ -2734,6 +2733,7 @@ send_position(struct weston_surface *surface, int32_t x, int32_t y)
 	struct weston_wm_window *window = get_wm_window(surface);
 	struct weston_wm *wm;
 	uint32_t mask, values[2];
+	int sx, sy;
 
 	if (!window || !window->wm)
 		return;
@@ -2750,6 +2750,10 @@ send_position(struct weston_surface *surface, int32_t x, int32_t y)
 		mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
 
 		xcb_configure_window(wm->conn, window->frame_id, mask, values);
+
+		weston_wm_window_get_child_position(window, &sx, &sy);
+		weston_wm_window_send_configure_notify(window, x + sx, y + sy);
+
 		xcb_flush(wm->conn);
 	}
 }
-- 
2.7.4



More information about the wayland-devel mailing list