rewrite the focus steal prevention code to clean it up hopefully a bit. also don't steal focus from globally active focus model clients
This commit is contained in:
parent
6714a0e2ca
commit
e714fa7351
1 changed files with 26 additions and 6 deletions
|
@ -461,11 +461,34 @@ void client_manage(Window window)
|
||||||
mouse_grab_for_client(self, TRUE);
|
mouse_grab_for_client(self, TRUE);
|
||||||
|
|
||||||
if (activate) {
|
if (activate) {
|
||||||
/* This is focus stealing prevention, if a user_time has been set */
|
/* This is focus stealing prevention */
|
||||||
ob_debug("Want to focus new window 0x%x with time %u (last time %u)\n",
|
ob_debug("Want to focus new window 0x%x with time %u (last time %u)\n",
|
||||||
self->window, self->user_time, client_last_user_time);
|
self->window, self->user_time, client_last_user_time);
|
||||||
if (!self->user_time || self->user_time >= client_last_user_time ||
|
|
||||||
client_search_focus_parent(self) != NULL)
|
/* If a nothing at all, or a parent was focused, then focus this
|
||||||
|
always
|
||||||
|
*/
|
||||||
|
if (client_search_focus_parent(self) != NULL ||
|
||||||
|
!focus_client)
|
||||||
|
{
|
||||||
|
activate = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* If time stamp is old, don't steal focus */
|
||||||
|
if (self->user_time && self->user_time < client_last_user_time)
|
||||||
|
activate = FALSE;
|
||||||
|
/* Don't steal focus from globally active clients.
|
||||||
|
I stole this idea from KWin. It seems nice.
|
||||||
|
*/
|
||||||
|
if (focus_client && focus_client->can_focus != TRUE &&
|
||||||
|
focus_client->focus_notify == TRUE)
|
||||||
|
{
|
||||||
|
activate = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activate)
|
||||||
{
|
{
|
||||||
/* since focus can change the stacking orders, if we focus the
|
/* since focus can change the stacking orders, if we focus the
|
||||||
window then the standard raise it gets is not enough, we need
|
window then the standard raise it gets is not enough, we need
|
||||||
|
@ -478,9 +501,6 @@ void client_manage(Window window)
|
||||||
/* if the client isn't focused, then hilite it so the user
|
/* if the client isn't focused, then hilite it so the user
|
||||||
knows it is there */
|
knows it is there */
|
||||||
client_hilite(self, TRUE);
|
client_hilite(self, TRUE);
|
||||||
|
|
||||||
/* don't focus it ! (focus stealing prevention) */
|
|
||||||
activate = FALSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in a new issue