From ce4088bbf7ccce428579aa530c000fac36cac9cb Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Mon, 9 Aug 2010 11:27:13 +0200 Subject: [PATCH] client_unmanage: Update WM_STATE later According to ICCCM, if a client wants to reuse one of its windows, it has to wait until the WM updated WM_STATE. This means updating WM_STATE should be the very last thing we do when unmanaging a window. Signed-off-by: Uli Schlachter --- client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client.c b/client.c index 3b103454..299b8e40 100644 --- a/client.c +++ b/client.c @@ -1311,8 +1311,6 @@ client_unmanage(client_t *c) if(strut_has_value(&c->strut)) screen_emit_signal(globalconf.L, c->screen, "property::workarea", 0); - window_state_set(c->window, XCB_WM_STATE_WITHDRAWN); - titlebar_client_detach(c); ewmh_update_net_client_list(c->phys_screen); @@ -1321,6 +1319,10 @@ client_unmanage(client_t *c) * after a restart anymore. */ xcb_change_save_set(globalconf.connection, XCB_SET_MODE_DELETE, c->window); + /* Do this last to avoid races with clients. According to ICCCM, clients + * arent allowed to re-use the window until after this. */ + window_state_set(c->window, XCB_WM_STATE_WITHDRAWN); + /* set client as invalid */ c->invalid = true;