From 2a392c220d992ba21b1e250be2497248658cfcdb Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Sun, 7 Oct 2018 21:51:35 +0200 Subject: [PATCH] quartz: do not cache the screen in the gdkmonitor Instead we just cache the monitor number and get out of it the nsscreen when it is needed. This is a requirement since it nsscreen it is not supposed to be cached. Fixes: https://gitlab.gnome.org/GNOME/gtk/issues/1312 --- gdk/quartz/gdkmonitor-quartz.c | 17 ++++++++++++----- gdk/quartz/gdkmonitor-quartz.h | 2 +- gdk/quartz/gdkscreen-quartz.c | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/gdk/quartz/gdkmonitor-quartz.c b/gdk/quartz/gdkmonitor-quartz.c index ec36b23ec2..b3e0343740 100644 --- a/gdk/quartz/gdkmonitor-quartz.c +++ b/gdk/quartz/gdkmonitor-quartz.c @@ -35,12 +35,19 @@ gdk_quartz_monitor_get_workarea (GdkMonitor *monitor, GDK_QUARTZ_ALLOC_POOL; - NSRect rect = [quartz_monitor->nsscreen visibleFrame]; + NSArray *array = [NSScreen screens]; + if (quartz_monitor->monitor_num < [array count]) + { + NSScreen *screen = [array objectAtIndex:quartz_monitor->monitor_num]; + NSRect rect = [screen visibleFrame]; - dest->x = rect.origin.x - quartz_screen->min_x; - dest->y = quartz_screen->height - (rect.origin.y + rect.size.height) + quartz_screen->min_y; - dest->width = rect.size.width; - dest->height = rect.size.height; + dest->x = rect.origin.x - quartz_screen->min_x; + dest->y = quartz_screen->height - (rect.origin.y + rect.size.height) + quartz_screen->min_y; + dest->width = rect.size.width; + dest->height = rect.size.height; + } + else + *dest = monitor->geometry; GDK_QUARTZ_RELEASE_POOL; } diff --git a/gdk/quartz/gdkmonitor-quartz.h b/gdk/quartz/gdkmonitor-quartz.h index 448c483f7a..468a1d8f96 100644 --- a/gdk/quartz/gdkmonitor-quartz.h +++ b/gdk/quartz/gdkmonitor-quartz.h @@ -30,7 +30,7 @@ struct _GdkQuartzMonitor { GdkMonitor parent; - NSScreen *nsscreen; + gint monitor_num; }; struct _GdkQuartzMonitorClass { diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c index 219338832e..f1feaed30e 100644 --- a/gdk/quartz/gdkscreen-quartz.c +++ b/gdk/quartz/gdkscreen-quartz.c @@ -156,7 +156,7 @@ gdk_quartz_screen_calculate_layout (GdkQuartzScreen *screen) "display", display, NULL); g_ptr_array_add (display_quartz->monitors, monitor); - monitor->nsscreen = [array objectAtIndex:i]; + monitor->monitor_num = i; NSRect rect = [[array objectAtIndex:i] frame];