[gtk/wip/chergert/for-4-6: 54/56] macos: dont steal key window from NSPanel
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/for-4-6: 54/56] macos: dont steal key window from NSPanel
- Date: Wed, 16 Mar 2022 19:25:46 +0000 (UTC)
commit a9c89fa23e883823e7967555ba905a005b5351e8
Author: Christian Hergert <christian hergert me>
Date: Fri Mar 11 18:07:34 2022 -0800
macos: dont steal key window from NSPanel
Or we risk making it really difficult to use native file choosers.
gdk/macos/gdkmacosdisplay-private.h | 5 +++++
gdk/macos/gdkmacosdisplay.c | 9 +++++++++
2 files changed, 14 insertions(+)
---
diff --git a/gdk/macos/gdkmacosdisplay-private.h b/gdk/macos/gdkmacosdisplay-private.h
index 1edff58d04..83ae435e49 100644
--- a/gdk/macos/gdkmacosdisplay-private.h
+++ b/gdk/macos/gdkmacosdisplay-private.h
@@ -87,6 +87,11 @@ struct _GdkMacosDisplay
/* A GSource to select a new main/key window */
guint select_key_in_idle;
+
+ /* Note if we have a key window that is not a GdkMacosWindow
+ * such as a NSPanel used for native dialogs.
+ */
+ guint key_window_is_foregin : 1;
};
struct _GdkMacosDisplayClass
diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c
index 6c51ef901e..d85a744563 100644
--- a/gdk/macos/gdkmacosdisplay.c
+++ b/gdk/macos/gdkmacosdisplay.c
@@ -422,6 +422,10 @@ select_key_in_idle_cb (gpointer data)
self->select_key_in_idle = 0;
+ /* Don't steal focus from NSPanel, etc */
+ if (self->key_window_is_foregin)
+ return G_SOURCE_REMOVE;
+
if (self->keyboard_surface == NULL)
{
const GList *surfaces = _gdk_macos_display_get_surfaces (self);
@@ -960,11 +964,16 @@ _gdk_macos_display_get_surfaces (GdkMacosDisplay *self)
NSArray *array = [NSApp orderedWindows];
GQueue sorted = G_QUEUE_INIT;
+ self->key_window_is_foregin = FALSE;
+
for (id obj in array)
{
NSWindow *nswindow = (NSWindow *)obj;
GdkMacosSurface *surface;
+ if ([nswindow isKeyWindow])
+ self->key_window_is_foregin = !GDK_IS_MACOS_WINDOW (nswindow);
+
if (!GDK_IS_MACOS_WINDOW (nswindow))
continue;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]