xwm: Only destroy window frame in unmap_notify if we have one

Based on a patch from Tiago Vignatti <tiago.vignatti@intel.com>.
dev
Kristian Høgsberg 13 years ago
parent 9892a62b45
commit be375b362b
  1. 12
      src/xwayland/window-manager.c

@ -573,14 +573,16 @@ weston_wm_handle_unmap_notify(struct weston_wm *wm, xcb_generic_event_t *event)
if (window->cairo_surface) if (window->cairo_surface)
cairo_surface_destroy(window->cairo_surface); cairo_surface_destroy(window->cairo_surface);
xcb_reparent_window(wm->conn, window->id, wm->wm_window, 0, 0); if (window->frame_id) {
xcb_destroy_window(wm->conn, window->frame_id); xcb_reparent_window(wm->conn, window->id, wm->wm_window, 0, 0);
weston_wm_window_set_state(window, ICCCM_WITHDRAWN_STATE); xcb_destroy_window(wm->conn, window->frame_id);
weston_wm_window_set_state(window, ICCCM_WITHDRAWN_STATE);
hash_table_remove(wm->window_hash, window->frame_id);
window->frame_id = XCB_WINDOW_NONE;
}
window->frame_id = XCB_WINDOW_NONE;
if (wm->focus_window == window) if (wm->focus_window == window)
wm->focus_window = NULL; wm->focus_window = NULL;
hash_table_remove(wm->window_hash, window->frame_id);
if (window->surface) if (window->surface)
wl_list_remove(&window->surface_destroy_listener.link); wl_list_remove(&window->surface_destroy_listener.link);
window->surface = NULL; window->surface = NULL;

Loading…
Cancel
Save