[gtk/wip/chergert/quartz4u] macos: implement get_workarea for GdkMacosMonitor



commit 3cbe2e1cfab201311c410c417f8c2bfdcf08e881
Author: Christian Hergert <chergert redhat com>
Date:   Tue May 5 11:06:44 2020 -0700

    macos: implement get_workarea for GdkMacosMonitor

 gdk/macos/gdkmacosmonitor.c | 48 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
---
diff --git a/gdk/macos/gdkmacosmonitor.c b/gdk/macos/gdkmacosmonitor.c
index 8362e96913..755f16d831 100644
--- a/gdk/macos/gdkmacosmonitor.c
+++ b/gdk/macos/gdkmacosmonitor.c
@@ -21,7 +21,9 @@
 
 #include <gdk/gdk.h>
 
+#include "gdkmacosdisplay-private.h"
 #include "gdkmacosmonitor-private.h"
+#include "gdkmacosutils-private.h"
 
 struct _GdkMacosMonitor
 {
@@ -36,9 +38,55 @@ struct _GdkMacosMonitorClass
 
 G_DEFINE_TYPE (GdkMacosMonitor, gdk_macos_monitor, GDK_TYPE_MONITOR)
 
+static void
+gdk_macos_monitor_get_workarea (GdkMonitor   *monitor,
+                                GdkRectangle *geometry)
+{
+  GDK_BEGIN_MACOS_ALLOC_POOL;
+
+  GdkMacosMonitor *self = (GdkMacosMonitor *)monitor;
+
+  g_assert (GDK_IS_MACOS_MONITOR (self));
+  g_assert (geometry != NULL);
+
+  *geometry = monitor->geometry;
+
+  for (id obj in [NSScreen screens])
+    {
+      CGDirectDisplayID screen_id;
+
+      screen_id = [[[obj deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue];
+
+      if (screen_id == self->screen_id)
+        {
+          NSScreen *screen = (NSScreen *)obj;
+          NSRect visibleFrame = [screen visibleFrame];
+          int x;
+          int y;
+
+          _gdk_macos_display_from_display_coords (GDK_MACOS_DISPLAY (monitor->display),
+                                                  visibleFrame.origin.x,
+                                                  visibleFrame.origin.y,
+                                                  &x, &y);
+
+          geometry->x = x;
+          geometry->y = y;
+          geometry->width = visibleFrame.size.width;
+          geometry->height = visibleFrame.size.height;
+
+          break;
+        }
+    }
+
+  GDK_END_MACOS_ALLOC_POOL;
+}
+
 static void
 gdk_macos_monitor_class_init (GdkMacosMonitorClass *klass)
 {
+  GdkMonitorClass *monitor_class = GDK_MONITOR_CLASS (klass);
+
+  monitor_class->get_workarea = gdk_macos_monitor_get_workarea;
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]