[gtk/wip/chergert/quartz4u] macos: track key window status
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u] macos: track key window status
- Date: Mon, 4 May 2020 22:28:26 +0000 (UTC)
commit a4d6620d327d2787180d93329f4d00660625c7de
Author: Christian Hergert <chergert redhat com>
Date: Mon May 4 15:21:53 2020 -0700
macos: track key window status
gdk/macos/GdkMacosWindow.c | 14 ++------------
gdk/macos/gdkmacossurface.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 12 deletions(-)
---
diff --git a/gdk/macos/GdkMacosWindow.c b/gdk/macos/GdkMacosWindow.c
index 4a95ced812..9f850f2244 100644
--- a/gdk/macos/GdkMacosWindow.c
+++ b/gdk/macos/GdkMacosWindow.c
@@ -102,22 +102,12 @@
-(void)windowDidBecomeKey:(NSNotification *)aNotification
{
-#if 0
- GdkSurface *window = [[self contentView] gdkSurface];
-
- gdk_synthesize_surface_state (window, 0, GDK_SURFACE_STATE_FOCUSED);
- _gdk_quartz_events_update_focus_window (window, TRUE);
-#endif
+ _gdk_macos_surface_set_is_key (gdkSurface, TRUE);
}
-(void)windowDidResignKey:(NSNotification *)aNotification
{
-#if 0
- GdkSurface *window = [[self contentView] gdkSurface];
-
- _gdk_quartz_events_update_focus_window (window, FALSE);
- gdk_synthesize_surface_state (window, GDK_SURFACE_STATE_FOCUSED, 0);
-#endif
+ _gdk_macos_surface_set_is_key (gdkSurface, FALSE);
}
-(void)windowDidBecomeMain:(NSNotification *)aNotification
diff --git a/gdk/macos/gdkmacossurface.c b/gdk/macos/gdkmacossurface.c
index 6d932f673a..d789e55934 100644
--- a/gdk/macos/gdkmacossurface.c
+++ b/gdk/macos/gdkmacossurface.c
@@ -54,6 +54,7 @@ typedef struct
int scale;
guint modal_hint : 1;
+ guint is_key : 1;
} GdkMacosSurfacePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GdkMacosSurface, gdk_macos_surface, GDK_TYPE_SURFACE)
@@ -109,9 +110,13 @@ gdk_macos_surface_hide (GdkSurface *surface)
{
GdkMacosSurface *self = (GdkMacosSurface *)surface;
GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+ GdkSeat *seat;
g_assert (GDK_IS_MACOS_SURFACE (self));
+ seat = gdk_display_get_default_seat (surface->display);
+ gdk_seat_ungrab (seat);
+
[priv->window hide];
}
@@ -695,3 +700,33 @@ _gdk_macos_surface_damage_cairo (GdkMacosSurface *self,
[view setCairoSurfaceWithRegion:surface
cairoRegion:painted];
}
+
+void
+_gdk_macos_surface_set_is_key (GdkMacosSurface *self,
+ gboolean is_key)
+{
+ GdkMacosSurfacePrivate *priv = gdk_macos_surface_get_instance_private (self);
+ GdkMacosDisplay *display;
+
+ g_return_if_fail (GDK_IS_MACOS_SURFACE (self));
+
+ display = GDK_MACOS_DISPLAY (GDK_SURFACE (self)->display);
+ is_key = !!is_key;
+
+ if (is_key != priv->is_key)
+ {
+ GdkSeat *seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
+ GdkDevice *keyboard = gdk_seat_get_keyboard (seat);
+ GdkEvent *event;
+
+ priv->is_key = is_key;
+
+ if (is_key)
+ gdk_synthesize_surface_state (GDK_SURFACE (self), 0, GDK_SURFACE_STATE_FOCUSED);
+ else
+ gdk_synthesize_surface_state (GDK_SURFACE (self), GDK_SURFACE_STATE_FOCUSED, 0);
+
+ event = gdk_focus_event_new (GDK_SURFACE (self), keyboard, NULL, is_key);
+ _gdk_event_queue_append (display, event);
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]