[gtk/gtk-3-24: 16/20] Complete GdkQuartzDisplay Implementation.



commit e786da9ca9bed9db24177369bf4caf66fd50081c
Author: John Ralls <jralls ceridwen us>
Date:   Sun Nov 25 11:42:34 2018 +0900

    Complete GdkQuartzDisplay Implementation.
    
    Changing FIXME on unneeded functions to X11-only where appropriate.

 gdk/quartz/gdkdisplay-quartz.c | 70 +++++++++++++++++++++++++++++-------------
 gdk/quartz/gdkwindow-quartz.c  | 11 ++-----
 2 files changed, 51 insertions(+), 30 deletions(-)
---
diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c
index abd6a660c8..a342b88ff2 100644
--- a/gdk/quartz/gdkdisplay-quartz.c
+++ b/gdk/quartz/gdkdisplay-quartz.c
@@ -41,10 +41,7 @@ static void display_reconfiguration_callback (CGDirectDisplayID            displ
 static GdkWindow *
 gdk_quartz_display_get_default_group (GdkDisplay *display)
 {
-  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
-
-  /* FIXME: Implement */
-
+/* X11-only. */
   return NULL;
 }
 
@@ -117,51 +114,49 @@ gdk_quartz_display_beep (GdkDisplay *display)
 static void
 gdk_quartz_display_sync (GdkDisplay *display)
 {
-  /* Not supported. */
+  /* Not needed. */
 }
 
 static void
 gdk_quartz_display_flush (GdkDisplay *display)
 {
-  /* Not supported. */
+  /* Not needed. */
 }
 
 static gboolean
 gdk_quartz_display_supports_selection_notification (GdkDisplay *display)
 {
   g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
-
-  /* FIXME: Implement */
+  /* X11-only. */
   return FALSE;
 }
 
 static gboolean
 gdk_quartz_display_request_selection_notification (GdkDisplay *display,
                                                    GdkAtom     selection)
-
 {
-  /* FIXME: Implement */
+  /* X11-only. */
   return FALSE;
 }
 
 static gboolean
 gdk_quartz_display_supports_clipboard_persistence (GdkDisplay *display)
 {
-  /* FIXME: Implement */
+  /* X11-only */
   return FALSE;
 }
 
 static gboolean
 gdk_quartz_display_supports_shapes (GdkDisplay *display)
 {
-  /* FIXME: Implement */
+  /* Not needed, nothing ever calls this.*/
   return FALSE;
 }
 
 static gboolean
 gdk_quartz_display_supports_input_shapes (GdkDisplay *display)
 {
-  /* FIXME: Implement */
+  /* Not needed, nothign ever calls this. */
   return FALSE;
 }
 
@@ -172,20 +167,23 @@ gdk_quartz_display_store_clipboard (GdkDisplay    *display,
                                     const GdkAtom *targets,
                                     gint           n_targets)
 {
-  /* FIXME: Implement */
+  /* MacOS persists pasteboard items automatically, no application
+   * action is required.
+   */
 }
 
 
 static gboolean
 gdk_quartz_display_supports_composite (GdkDisplay *display)
 {
-  /* FIXME: Implement */
+  /* X11-only. */
   return FALSE;
 }
 
 static gulong
 gdk_quartz_display_get_next_serial (GdkDisplay *display)
 {
+  /* X11-only. */
   return 0;
 }
 
@@ -193,7 +191,24 @@ static void
 gdk_quartz_display_notify_startup_complete (GdkDisplay  *display,
                                             const gchar *startup_id)
 {
-  /* FIXME: Implement? */
+  /* This should call finishLaunching, but doing so causes Quartz to throw
+   * "_createMenuRef called with existing principal MenuRef already"
+   * " associated with menu".
+  [NSApp finishLaunching];
+  */
+}
+
+static void
+gdk_quartz_display_push_error_trap (GdkDisplay *display)
+{
+  /* X11-only. */
+}
+
+static gint
+gdk_quartz_display_pop_error_trap (GdkDisplay *display, gboolean ignore)
+{
+  /* X11 only. */
+  return 0;
 }
 
 /* The display monitor list comprises all of the CGDisplays connected
@@ -318,6 +333,19 @@ gdk_quartz_display_get_primary_monitor (GdkDisplay *display)
                               GINT_TO_POINTER (primary_id));
 }
 
+static GdkMonitor *
+gdk_quartz_display_get_monitor_at_window (GdkDisplay *display,
+                                          GdkWindow *window)
+{
+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+  NSWindow *nswindow = impl->toplevel;
+  NSScreen *screen = [nswindow screen];
+  CGDirectDisplayID id = [[[screen deviceDescription]
+                           objectForKey: @"NSScreenNumber"] unsignedIntValue];
+  return g_hash_table_lookup (GDK_QUARTZ_DISPLAY (display)->monitors,
+                              GINT_TO_POINTER (id));
+}
+
 G_DEFINE_TYPE (GdkQuartzDisplay, gdk_quartz_display, GDK_TYPE_DISPLAY)
 
 static void
@@ -400,7 +428,7 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
   display_class->get_cursor_for_name = _gdk_quartz_display_get_cursor_for_name;
   display_class->get_cursor_for_surface = _gdk_quartz_display_get_cursor_for_surface;
 
-  display_class->get_app_launch_context = NULL; /* FIXME */
+  /* display_class->get_app_launch_context = NULL; Has default. */
   display_class->before_process_all_updates = _gdk_quartz_display_before_process_all_updates;
   display_class->after_process_all_updates = _gdk_quartz_display_after_process_all_updates;
   display_class->get_next_serial = gdk_quartz_display_get_next_serial;
@@ -409,12 +437,12 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
   display_class->event_data_free = _gdk_quartz_display_event_data_free;
   display_class->create_window_impl = _gdk_quartz_display_create_window_impl;
   display_class->get_keymap = _gdk_quartz_display_get_keymap;
-  display_class->push_error_trap = NULL; /* FIXME */
-  display_class->pop_error_trap = NULL; /* FIXME */
+  display_class->push_error_trap = gdk_quartz_display_push_error_trap;
+  display_class->pop_error_trap = gdk_quartz_display_pop_error_trap;
 
   display_class->get_selection_owner = _gdk_quartz_display_get_selection_owner;
   display_class->set_selection_owner = _gdk_quartz_display_set_selection_owner;
-  display_class->send_selection_notify = NULL; /* FIXME */
+  display_class->send_selection_notify = NULL; /* Ignore. X11 stuff removed in master.  */
   display_class->get_selection_property = _gdk_quartz_display_get_selection_property;
   display_class->convert_selection = _gdk_quartz_display_convert_selection;
   display_class->text_property_to_utf8_list = _gdk_quartz_display_text_property_to_utf8_list;
@@ -425,7 +453,7 @@ gdk_quartz_display_class_init (GdkQuartzDisplayClass *class)
   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;
-  display_class->get_monitor_at_window = NULL; /* FIXME */
+  display_class->get_monitor_at_window = gdk_quartz_display_get_monitor_at_window;
 
   /**
    * GdkQuartzDisplay::monitors-changed:
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index 33779073cd..9bb10bd20a 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -2838,25 +2838,18 @@ gdk_quartz_window_set_keep_below (GdkWindow *window,
   [impl->toplevel setLevel: level - (setting ? 1 : 0)];
 }
 
+/* X11 "feature" not useful in other backends. */
 static GdkWindow *
 gdk_quartz_window_get_group (GdkWindow *window)
 {
-  g_return_val_if_fail (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD, NULL);
-
-  if (GDK_WINDOW_DESTROYED (window) ||
-      !WINDOW_IS_TOPLEVEL (window))
     return NULL;
-
-  /* FIXME: Implement */
-
-  return NULL;
 }
 
+/* X11 "feature" not useful in other backends. */
 static void
 gdk_quartz_window_set_group (GdkWindow *window,
                              GdkWindow *leader)
 {
-  /* FIXME: Implement */       
 }
 
 static void


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