[gtk/gtk-3-24: 16/20] Complete GdkQuartzDisplay Implementation.
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/gtk-3-24: 16/20] Complete GdkQuartzDisplay Implementation.
- Date: Sat, 8 Dec 2018 19:43:58 +0000 (UTC)
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]