have to fallback in client_unmanage, until we figure out a way to hear those focusin events without conflicting screens
This commit is contained in:
parent
bdf287572c
commit
b673823d0b
1 changed files with 15 additions and 2 deletions
|
@ -493,9 +493,22 @@ void client_unmanage(ObClient *self)
|
||||||
|
|
||||||
/* update the focus lists */
|
/* update the focus lists */
|
||||||
focus_order_remove(self);
|
focus_order_remove(self);
|
||||||
|
if (self == focus_client) {
|
||||||
|
/* we have to fall back here because we might not get a focus out.
|
||||||
|
1. we need to xselectinput off the window before we unmap it because
|
||||||
|
otherwise we end up getting unmapnotifies we don't want and they
|
||||||
|
can mess up mapping it again quickly
|
||||||
|
2. this means that if we unmanage from a synthetic unmapnotify, we
|
||||||
|
are the ones unmapped it, and causing the focusout. so we won't
|
||||||
|
get the focusout event.
|
||||||
|
3. we can't handle focusin events on the root window because they
|
||||||
|
come from all screens, so the focus change gets lost
|
||||||
|
*/
|
||||||
|
focus_fallback(FALSE);
|
||||||
|
|
||||||
/* don't leave an invalid focus_client */
|
/* don't leave an invalid focus_client */
|
||||||
if (self == focus_client)
|
|
||||||
focus_client = NULL;
|
focus_client = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
client_list = g_list_remove(client_list, self);
|
client_list = g_list_remove(client_list, self);
|
||||||
stacking_remove(self);
|
stacking_remove(self);
|
||||||
|
|
Loading…
Reference in a new issue