diff options
author | Ignacio Casal Quinteiro <qignacio@amazon.com> | 2018-10-07 21:51:35 +0200 |
---|---|---|
committer | Ignacio Casal Quinteiro <qignacio@amazon.com> | 2018-10-17 10:10:44 +0200 |
commit | 1729da8a3e611ce83624663b1cf762080a13eab2 (patch) | |
tree | c8cd3bbe3a2ee9cfa582c1597d27c06ba8685cc1 /gdk/quartz | |
parent | a3ac3b61ef453d246cf666fbb23fa30d2afa90f7 (diff) | |
download | gtk+-1729da8a3e611ce83624663b1cf762080a13eab2.tar.gz |
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
Diffstat (limited to 'gdk/quartz')
-rw-r--r-- | gdk/quartz/gdkmonitor-quartz.c | 17 | ||||
-rw-r--r-- | gdk/quartz/gdkmonitor-quartz.h | 2 | ||||
-rw-r--r-- | 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 8130f2f6cc..b3e11f7d3e 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 f8094354a0..303c603fcc 100644 --- a/gdk/quartz/gdkscreen-quartz.c +++ b/gdk/quartz/gdkscreen-quartz.c @@ -144,7 +144,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]; |