x11: Handle XINotifyPassiveGrab/Ungrab in focus events

The focus handling code is shared between core and XI2 implementations,
so just handle the extra XI2 types for passive grabs. Those must be dealt
with in the same way than active grabs. Focus events with this crossing
mode could happen currently through the XIGrabFocusIn passive grab.

https://bugzilla.gnome.org/show_bug.cgi?id=719762
This commit is contained in:
Carlos Garnacho 2013-12-04 12:49:02 +01:00 committed by Matthias Clasen
parent 3dbabbd2e5
commit f6c9a33841

View File

@ -842,6 +842,10 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
*/
if (toplevel->has_pointer &&
mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
mode != XINotifyPassiveUngrab &&
#endif /* XINPUT_2 */
mode != NotifyUngrab)
toplevel->has_pointer_focus = (focus_in) ? FALSE : TRUE;
@ -849,6 +853,10 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
case NotifyNonlinear:
case NotifyNonlinearVirtual:
if (mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
mode != XINotifyPassiveUngrab &&
#endif /* XINPUT_2 */
mode != NotifyUngrab)
toplevel->has_focus_window = (focus_in) ? TRUE : FALSE;
/* We pretend that the focus moves to the grab
@ -864,6 +872,10 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
* grab is in effect
*/
if (mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
mode != XINotifyPassiveUngrab &&
#endif /* XINPUT_2 */
mode != NotifyUngrab)
toplevel->has_pointer_focus = (focus_in) ? TRUE : FALSE;
break;