diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-30 11:46:29 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-30 11:46:29 -0400 |
commit | f197e9f7a39bdf736cda4abf825fbbab8cbe16e0 (patch) | |
tree | 7a01e2b6e4a6e94c149c09ecf1cd1d7a0912cb5e | |
parent | e244cb03f7491b80183e138b41839baa96ca5f56 (diff) |
xwm: Bring back synthetic events and handle synthetic unmap notify as per ICCCM
-rw-r--r-- | src/xwayland/window-manager.c | 10 |
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); |