From 35417a5a74bfebd69b5c069d7a2f517ba571bcf9 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Fri, 1 Jun 2018 16:43:01 +0200 Subject: [PATCH] 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 --- gdk/x11/gdkdevicemanager-core-x11.c | 8 ++++---- 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 f2ae118afb..f64b5551e5 100644 --- a/gdk/x11/gdkdevicemanager-core-x11.c +++ b/gdk/x11/gdkdevicemanager-core-x11.c @@ -31,8 +31,8 @@ -#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); @@ -822,7 +822,7 @@ _gdk_device_manager_core_handle_focus (GdkSurface *surface, if (toplevel->focus_window == original) return; - had_focus = HAS_FOCUS (toplevel); + had_focus = APPEARS_FOCUSED (toplevel); x11_screen = GDK_X11_SCREEN (GDK_SURFACE_SCREEN (surface)); switch (detail) @@ -884,7 +884,7 @@ _gdk_device_manager_core_handle_focus (GdkSurface *surface, 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 f5c68a5728..88460c8b35 100644 --- a/gdk/x11/gdkeventsource.c +++ b/gdk/x11/gdkeventsource.c @@ -36,8 +36,8 @@ static void gdk_event_source_finalize (GSource *source); static GQuark quark_needs_enter = 0; -#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 { @@ -111,10 +111,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; -- 2.30.2