summaryrefslogtreecommitdiff
path: root/gdk/quartz
diff options
context:
space:
mode:
authorIgnacio Casal Quinteiro <qignacio@amazon.com>2018-10-07 21:51:35 +0200
committerIgnacio Casal Quinteiro <qignacio@amazon.com>2018-10-17 10:10:44 +0200
commit1729da8a3e611ce83624663b1cf762080a13eab2 (patch)
treec8cd3bbe3a2ee9cfa582c1597d27c06ba8685cc1 /gdk/quartz
parenta3ac3b61ef453d246cf666fbb23fa30d2afa90f7 (diff)
downloadgtk+-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.c17
-rw-r--r--gdk/quartz/gdkmonitor-quartz.h2
-rw-r--r--gdk/quartz/gdkscreen-quartz.c2
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];