diff options
Diffstat (limited to 'gdk/quartz/gdkdisplay-quartz.c')
-rw-r--r-- | gdk/quartz/gdkdisplay-quartz.c | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c index 2bea5705f9..b309908684 100644 --- a/gdk/quartz/gdkdisplay-quartz.c +++ b/gdk/quartz/gdkdisplay-quartz.c @@ -26,18 +26,11 @@ #include "gdkquartzwindow.h" #include "gdkquartzdisplay.h" #include "gdkquartzdevicemanager-core.h" +#include "gdkscreen.h" +#include "gdkmonitorprivate.h" +#include "gdkdisplay-quartz.h" -struct _GdkQuartzDisplay -{ - GdkDisplay display; -}; - -struct _GdkQuartzDisplayClass -{ - GdkDisplayClass display_class; -}; - static GdkWindow * gdk_quartz_display_get_default_group (GdkDisplay *display) { @@ -196,12 +189,45 @@ gdk_quartz_display_notify_startup_complete (GdkDisplay *display, /* FIXME: Implement? */ } +static int +gdk_quartz_display_get_n_monitors (GdkDisplay *display) +{ + GdkQuartzDisplay *quartz_display = GDK_QUARTZ_DISPLAY (display); + + return quartz_display->monitors->len; +} + + +static GdkMonitor * +gdk_quartz_display_get_monitor (GdkDisplay *display, + int monitor_num) +{ + GdkQuartzDisplay *quartz_display = GDK_QUARTZ_DISPLAY (display); + + if (0 <= monitor_num || monitor_num < quartz_display->monitors->len) + return (GdkMonitor *)quartz_display->monitors->pdata[monitor_num]; + + return NULL; +} + +static GdkMonitor * +gdk_quartz_display_get_primary_monitor (GdkDisplay *display) +{ + GdkQuartzDisplay *quartz_display = GDK_QUARTZ_DISPLAY (display); + + return quartz_display->monitors->pdata[0]; +} G_DEFINE_TYPE (GdkQuartzDisplay, gdk_quartz_display, GDK_TYPE_DISPLAY) static void gdk_quartz_display_init (GdkQuartzDisplay *display) { + GDK_QUARTZ_ALLOC_POOL; + + display->monitors = g_ptr_array_new_with_free_func (g_object_unref); + + GDK_QUARTZ_RELEASE_POOL; } static void @@ -209,6 +235,8 @@ gdk_quartz_display_dispose (GObject *object) { GdkQuartzDisplay *display_quartz = GDK_QUARTZ_DISPLAY (object); + g_ptr_array_free (display_quartz->monitors, TRUE); + G_OBJECT_CLASS (gdk_quartz_display_parent_class)->dispose (object); } @@ -268,6 +296,9 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class) display_class->convert_selection = _gdk_quartz_display_convert_selection; display_class->text_property_to_utf8_list = _gdk_quartz_display_text_property_to_utf8_list; display_class->utf8_to_string_target = _gdk_quartz_display_utf8_to_string_target; + display_class->get_n_monitors = gdk_quartz_display_get_n_monitors; + display_class->get_monitor = gdk_quartz_display_get_monitor; + display_class->get_primary_monitor = gdk_quartz_display_get_primary_monitor; ProcessSerialNumber psn = { 0, kCurrentProcess }; |