From 417f0aed42959719c40f0f8ec65050dcf2510bd1 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 16 May 2018 14:10:34 +0100 Subject: [PATCH 02/51] local-display-factory: Add gdm_local_display_factory_use_wayland() helper Factor out the code which decides if Xorg or Wayland should be used into a helper function. --- daemon/gdm-local-display-factory.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index 1a9196ee1..b21e3aee0 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -158,60 +158,73 @@ take_next_display_number (GdmLocalDisplayFactory *factory) ret = num + 1; break; } } out: /* now reserve this number */ g_debug ("GdmLocalDisplayFactory: Reserving X display: %u", ret); g_hash_table_insert (factory->priv->used_display_numbers, GUINT_TO_POINTER (ret), NULL); return ret; } static void on_display_disposed (GdmLocalDisplayFactory *factory, GdmDisplay *display) { g_debug ("GdmLocalDisplayFactory: Display %p disposed", display); } static void store_display (GdmLocalDisplayFactory *factory, GdmDisplay *display) { GdmDisplayStore *store; store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); gdm_display_store_add (store, display); } +static gboolean +gdm_local_display_factory_use_wayland (void) +{ +#ifdef ENABLE_WAYLAND_SUPPORT + gboolean wayland_enabled = FALSE; + if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) { + if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) ) + return TRUE; + } +#endif + return FALSE; +} + /* Example: dbus-send --system --dest=org.gnome.DisplayManager \ --type=method_call --print-reply --reply-timeout=2000 \ /org/gnome/DisplayManager/Manager \ org.gnome.DisplayManager.Manager.GetDisplays */ gboolean gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *factory, char **id, GError **error) { gboolean ret; GdmDisplay *display = NULL; g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); ret = FALSE; g_debug ("GdmLocalDisplayFactory: Creating transient display"); #ifdef ENABLE_USER_DISPLAY_SERVER display = gdm_local_display_new (); #else if (display == NULL) { guint32 num; num = take_next_display_number (factory); display = gdm_legacy_display_new (num); @@ -422,68 +435,62 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory) GVariant *array; GVariantIter iter; const char *seat; result = g_dbus_connection_call_sync (factory->priv->connection, "org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", "ListSeats", NULL, G_VARIANT_TYPE ("(a(so))"), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error); if (!result) { g_warning ("GdmLocalDisplayFactory: Failed to issue method call: %s", error->message); g_clear_error (&error); return FALSE; } array = g_variant_get_child_value (result, 0); g_variant_iter_init (&iter, array); while (g_variant_iter_loop (&iter, "(&so)", &seat, NULL)) { gboolean is_initial; const char *session_type = NULL; if (g_strcmp0 (seat, "seat0") == 0) { is_initial = TRUE; -#ifdef ENABLE_WAYLAND_SUPPORT - gboolean wayland_enabled = FALSE; - if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) { - if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) ) { - session_type = "wayland"; - } - } -#endif + if (gdm_local_display_factory_use_wayland ()) + session_type = "wayland"; } else { is_initial = FALSE; } create_display (factory, seat, session_type, is_initial); } g_variant_unref (result); g_variant_unref (array); return TRUE; } static void on_seat_new (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { const char *seat; g_variant_get (parameters, "(&s&o)", &seat, NULL); create_display (GDM_LOCAL_DISPLAY_FACTORY (user_data), seat, NULL, FALSE); } static void on_seat_removed (GDBusConnection *connection, const gchar *sender_name, -- 2.27.0