From b938ce00b51ab583f1ae08dd31b3fa2f873856bc Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Thu, 12 Aug 2010 14:32:27 +0200 Subject: [PATCH] Always unban a client that we are trying to focus Previously, if a client had nofocus == true, it wasn't unminimized if sth tried to focus it. Also, if this client had the WM_TAKE_FOCUS protocol, the focusing would fail since it's an error to set the input focus to an unviewable window. For consistency, this also moves the code that sets a client's minimized property to false into client_unban() since it doesn't make sense to have a minimized client unbanned (i.e. visible). Signed-off-by: Uli Schlachter --- client.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/client.c b/client.c index 8ec58aa2..01eec280 100644 --- a/client.c +++ b/client.c @@ -409,17 +409,13 @@ client_focus_update(client_t *c) /* Already focused */ return; } - luaA_object_push(globalconf.L, c); - client_set_minimized(globalconf.L, -1, false); - - /* unban the client before focusing for consistency */ - client_unban(c); globalconf.screen_focus = &globalconf.screens.tab[c->phys_screen]; globalconf.screen_focus->prev_client_focus = c; globalconf.screen_focus->client_focus = c; /* according to EWMH, we have to remove the urgent state from a client */ + luaA_object_push(globalconf.L, c); client_set_urgent(globalconf.L, -1, false); ewmh_update_net_active_window(c->phys_screen); @@ -447,6 +443,9 @@ client_focus(client_t *c) if(!client_maybevisible(c, c->screen)) return; + /* X11 doesn't let you focus a window that isn't viewable */ + client_unban(c); + if (!c->nofocus) client_focus_update(c); @@ -1256,6 +1255,11 @@ client_unban(client_t *c) xcb_map_window(globalconf.connection, c->window); c->isbanned = false; + + /* An unbanned clients shouldn't be minimized */ + luaA_object_push(globalconf.L, c); + client_set_minimized(globalconf.L, -1, false); + lua_pop(globalconf.L, 1); } }