From: Samuel Thibault Date: Fri, 1 Jun 2018 14:43:01 +0000 (+0200) Subject: gdk: activate surface on keyboard grabs X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~162^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=35417a5a74bfebd69b5c069d7a2f517ba571bcf9;p=gtk4.git 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 --- 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;