[gtk: 1/2] gdk: activate surface on keyboard grabs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 1/2] gdk: activate surface on keyboard grabs
- Date: Mon, 18 Jun 2018 11:38:00 +0000 (UTC)
commit 35417a5a74bfebd69b5c069d7a2f517ba571bcf9
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date: Fri Jun 1 16:43:01 2018 +0200
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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]