[gtk: 1/2] gdk: do not deactivate surface on keyboard grabs



commit 01455399e83a3dbafb0cdc6e12c7003b2f472a40
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date:   Thu Apr 19 14:10:23 2018 +0200

    gdk: do not deactivate surface on keyboard grabs
    
    When pressing e.g. a window manager shortcut, which acquires keyboard grab,
    Xorg would send FocusOut NotifyGrab then FocusIn NotifyUngrab.  Currently
    gdk would then deactivate the current surface, which makes accessibility
    screen readers think that we have switched to a non-accessible application
    and came back again, and thus reannounce the application frame etc. which we
    don't want when e.g. just raising volume.
    
    And actually, receiving FocusOut NotifyGrab does not mean losing the
    X focus, it only means an application aqcuired a grab, i.e. it is
    temporarily stealing keyboard events. On Wayland, this isn't even
    notified actually.
    
    This commit makes gdk only deactivate surfaces when there was an actual
    focus switch to another window, as determined by has_focus_window (instead
    of just has_focus), which happens either normally through FocusOut with
    NotifyNormal, or during grabs through FocusOut with NotifyWhileGrabbed.
    
    Fixes #85

 gdk/x11/gdkdevicemanager-core-x11.c | 2 +-
 gdk/x11/gdkeventsource.c            | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-core-x11.c b/gdk/x11/gdkdevicemanager-core-x11.c
index 6ae5fc8a8e..f2ae118afb 100644
--- a/gdk/x11/gdkdevicemanager-core-x11.c
+++ b/gdk/x11/gdkdevicemanager-core-x11.c
@@ -32,7 +32,7 @@
 
 
 #define HAS_FOCUS(toplevel)                           \
-  ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
+  ((toplevel)->has_focus_window || (toplevel)->has_pointer_focus)
 
 static void    gdk_x11_device_manager_core_finalize    (GObject *object);
 static void    gdk_x11_device_manager_core_constructed (GObject *object);
diff --git a/gdk/x11/gdkeventsource.c b/gdk/x11/gdkeventsource.c
index a4bbea0079..f5c68a5728 100644
--- a/gdk/x11/gdkeventsource.c
+++ b/gdk/x11/gdkeventsource.c
@@ -37,7 +37,7 @@ static void     gdk_event_source_finalize (GSource     *source);
 static GQuark quark_needs_enter = 0;
 
 #define HAS_FOCUS(toplevel)                           \
-  ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
+  ((toplevel)->has_focus_window || (toplevel)->has_pointer_focus)
 
 struct _GdkEventSource
 {


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