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 <psychon@znc.in>
This commit is contained in:
parent
0e798d0d76
commit
b938ce00b5
14
client.c
14
client.c
|
@ -409,17 +409,13 @@ client_focus_update(client_t *c)
|
||||||
/* Already focused */
|
/* Already focused */
|
||||||
return;
|
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 = &globalconf.screens.tab[c->phys_screen];
|
||||||
globalconf.screen_focus->prev_client_focus = c;
|
globalconf.screen_focus->prev_client_focus = c;
|
||||||
globalconf.screen_focus->client_focus = c;
|
globalconf.screen_focus->client_focus = c;
|
||||||
|
|
||||||
/* according to EWMH, we have to remove the urgent state from a client */
|
/* 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);
|
client_set_urgent(globalconf.L, -1, false);
|
||||||
|
|
||||||
ewmh_update_net_active_window(c->phys_screen);
|
ewmh_update_net_active_window(c->phys_screen);
|
||||||
|
@ -447,6 +443,9 @@ client_focus(client_t *c)
|
||||||
if(!client_maybevisible(c, c->screen))
|
if(!client_maybevisible(c, c->screen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* X11 doesn't let you focus a window that isn't viewable */
|
||||||
|
client_unban(c);
|
||||||
|
|
||||||
if (!c->nofocus)
|
if (!c->nofocus)
|
||||||
client_focus_update(c);
|
client_focus_update(c);
|
||||||
|
|
||||||
|
@ -1256,6 +1255,11 @@ client_unban(client_t *c)
|
||||||
xcb_map_window(globalconf.connection, c->window);
|
xcb_map_window(globalconf.connection, c->window);
|
||||||
|
|
||||||
c->isbanned = false;
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue