diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-06-01 16:43:01 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-06-18 10:32:02 +0200 |
commit | f23bfc6b6966b910aa43a441141ec2b9fec14427 (patch) | |
tree | 4ef53d29cbf209cbe27c8a8fbb9c8db62cedd547 | |
parent | 83159ffabf3bd9f1e4fa2522d3735ebc3e1e2124 (diff) | |
download | gtk+-f23bfc6b6966b910aa43a441141ec2b9fec14427.tar.gz |
gdk: activate surface on keyboard grabs
In 01455399e83a ("gdk: do not deactivate surface on keyboard grabs"), we
made gdk avoid deactivating surfaces when another application takes a
keyboard grab, by using has_focus_window instead of has_focus. That however
broke activating surfaces when the gdk application acquired a grab itself,
in which case has_focus_window is false but has_focus is true.
We thus actually need to use both: surfaces should be activated either
because we have normal keyboard focus, or because we grabbed the keyboard.
This also renames HAS_FOCUS to APPEARS_FOCUSED to better reflect its
role.
Fixes #85
(cherry picked from commit 3287ac96e02ff236d74db10164c5b0c1e7b2b0bf)
-rw-r--r-- | gdk/x11/gdkdevicemanager-core-x11.c | 8 | ||||
-rw-r--r-- | gdk/x11/gdkeventsource.c | 8 |
2 files changed, 8 insertions, 8 deletions
diff --git a/gdk/x11/gdkdevicemanager-core-x11.c b/gdk/x11/gdkdevicemanager-core-x11.c index 7f7aa048aa..806225e826 100644 --- a/gdk/x11/gdkdevicemanager-core-x11.c +++ b/gdk/x11/gdkdevicemanager-core-x11.c @@ -29,8 +29,8 @@ #include "gdkkeysyms.h" -#define HAS_FOCUS(toplevel) \ - ((toplevel)->has_focus_window || (toplevel)->has_pointer_focus) +#define APPEARS_FOCUSED(toplevel) \ + ((toplevel)->has_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); @@ -842,7 +842,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window, if (toplevel->focus_window == original) return; - had_focus = HAS_FOCUS (toplevel); + had_focus = APPEARS_FOCUSED (toplevel); x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (window)); switch (detail) @@ -904,7 +904,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window, break; } - if (HAS_FOCUS (toplevel) != had_focus) + if (APPEARS_FOCUSED (toplevel) != had_focus) { GdkEvent *event; diff --git a/gdk/x11/gdkeventsource.c b/gdk/x11/gdkeventsource.c index 590e597c75..e0ce59663c 100644 --- a/gdk/x11/gdkeventsource.c +++ b/gdk/x11/gdkeventsource.c @@ -32,8 +32,8 @@ static gboolean gdk_event_source_dispatch (GSource *source, gpointer user_data); static void gdk_event_source_finalize (GSource *source); -#define HAS_FOCUS(toplevel) \ - ((toplevel)->has_focus_window || (toplevel)->has_pointer_focus) +#define APPEARS_FOCUSED(toplevel) \ + ((toplevel)->has_focus || (toplevel)->has_focus_window || (toplevel)->has_pointer_focus) struct _GdkEventSource { @@ -148,10 +148,10 @@ handle_focus_change (GdkEventCrossing *event) if (!event->focus || toplevel->has_focus_window) return; - had_focus = HAS_FOCUS (toplevel); + had_focus = APPEARS_FOCUSED (toplevel); toplevel->has_pointer_focus = focus_in; - if (HAS_FOCUS (toplevel) != had_focus) + if (APPEARS_FOCUSED (toplevel) != had_focus) { GdkEvent *focus_event; |