summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-05-30 11:46:29 -0400
committerKristian Høgsberg <krh@bitplanet.net>2012-05-30 11:46:29 -0400
commitf197e9f7a39bdf736cda4abf825fbbab8cbe16e0 (patch)
tree7a01e2b6e4a6e94c149c09ecf1cd1d7a0912cb5e
parente244cb03f7491b80183e138b41839baa96ca5f56 (diff)
xwm: Bring back synthetic events and handle synthetic unmap notify as per ICCCM
-rw-r--r--src/xwayland/window-manager.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index ddb3019..53b578d 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -540,6 +540,14 @@ weston_wm_handle_unmap_notify(struct weston_wm *wm, xcb_generic_event_t *event)
return;
window = hash_table_lookup(wm->window_hash, unmap_notify->window);
+ if (window->frame_id == XCB_WINDOW_NONE) {
+ /* We already withdrew this window on the real unmap
+ * notify and this is the synthetic unmap notify from
+ * the client, or the other way around (ICCCM 4.1.4).
+ * Either way, we're already done so just return. */
+ return;
+ }
+
if (window->repaint_source)
wl_event_source_remove(window->repaint_source);
if (window->cairo_surface)
@@ -882,7 +890,7 @@ weston_wm_handle_event(int fd, uint32_t mask, void *data)
continue;
}
- switch (event->response_type) {
+ switch (event->response_type & ~0x80) {
case XCB_BUTTON_PRESS:
case XCB_BUTTON_RELEASE:
weston_wm_handle_button(wm, event);