From 76d95c312dde61334ee7cf3218a05c3ab485c922 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 3 Sep 2016 18:33:30 +0200 Subject: [PATCH] display: Don't return NULL in get_primary_monitor() Nobody ever does a NULL check there so all that causes is crashes. So we better return a non-primary monitor than NULL. Fixes gdk-wayland always returning NULL. --- gdk/gdkdisplay.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c index ed0e65f956..5d49aad9f1 100644 --- a/gdk/gdkdisplay.c +++ b/gdk/gdkdisplay.c @@ -143,6 +143,12 @@ gdk_display_real_get_default_seat (GdkDisplay *display) return display->seats->data; } +static GdkMonitor * +gdk_display_real_get_primary_monitor (GdkDisplay *display) +{ + return gdk_display_get_monitor (display, 0); +} + static void gdk_display_class_init (GdkDisplayClass *class) { @@ -160,6 +166,8 @@ gdk_display_class_init (GdkDisplayClass *class) class->event_data_free = gdk_display_real_event_data_free; class->get_default_seat = gdk_display_real_get_default_seat; + class->get_primary_monitor = gdk_display_real_get_primary_monitor; + /** * GdkDisplay::opened: * @display: the object on which the signal is emitted @@ -2597,8 +2605,13 @@ gdk_display_get_monitor (GdkDisplay *display, * manager to place the windows, specialized desktop applications * such as panels should place themselves on the primary monitor. * - * Returns: (nullable) (transfer none): the primary monitor, or %NULL if no primary - * monitor is configured by the user + * If no monitor is the designated primary monitor, any monitor + * (usually the first) may be returned. To make sure there is a dedicated + * primary monitor, use gdk_monitor_is_primary() on the returned monitor. + * + * Returns: (transfer none): the primary monitor, or any monitor if no + * primary monitor is configured by the user + * * Since: 3.22 */ GdkMonitor * @@ -2606,10 +2619,7 @@ gdk_display_get_primary_monitor (GdkDisplay *display) { g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL); - if (GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor) - return GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor (display); - - return NULL; + return GDK_DISPLAY_GET_CLASS (display)->get_primary_monitor (display); } /**