[gtk+] x11: Handle XINotifyPassiveGrab/Ungrab in focus events



commit f6c9a33841ae613ebbbff074e832bcbe15beea9f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Dec 4 12:49:02 2013 +0100

    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

 gdk/x11/gdkdevicemanager-core-x11.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-core-x11.c b/gdk/x11/gdkdevicemanager-core-x11.c
index 9611489..db5543b 100644
--- a/gdk/x11/gdkdevicemanager-core-x11.c
+++ b/gdk/x11/gdkdevicemanager-core-x11.c
@@ -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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]