summaryrefslogtreecommitdiff
path: root/x11/gdm/files/patch-daemon_gdm-local-display-factory.c
diff options
context:
space:
mode:
Diffstat (limited to 'x11/gdm/files/patch-daemon_gdm-local-display-factory.c')
-rw-r--r--x11/gdm/files/patch-daemon_gdm-local-display-factory.c124
1 files changed, 56 insertions, 68 deletions
diff --git a/x11/gdm/files/patch-daemon_gdm-local-display-factory.c b/x11/gdm/files/patch-daemon_gdm-local-display-factory.c
index 5219f30fc618..07f024001656 100644
--- a/x11/gdm/files/patch-daemon_gdm-local-display-factory.c
+++ b/x11/gdm/files/patch-daemon_gdm-local-display-factory.c
@@ -1,20 +1,22 @@
---- daemon/gdm-local-display-factory.c.orig 2022-03-21 18:12:40 UTC
+--- daemon/gdm-local-display-factory.c.orig 2024-09-16 13:28:26 UTC
+++ daemon/gdm-local-display-factory.c
-@@ -29,10 +29,12 @@
+@@ -28,11 +28,15 @@
+ #include <glib-object.h>
#include <gio/gio.h>
++#ifdef WITH_SYSTEMD
#ifdef HAVE_UDEV
--#include <gudev/gudev.h>
-+#undef HAVE_UDEV
+ #include <gudev/gudev.h>
#endif
-+#ifdef WITH_SYSTEMD
#include <systemd/sd-login.h>
++#elif defined(WITH_CONSOLE_KIT)
++#include <ConsoleKit/sd-login.h>
+#endif
#include "gdm-common.h"
#include "gdm-manager.h"
-@@ -68,8 +70,10 @@ struct _GdmLocalDisplayFactory
+@@ -68,8 +72,10 @@ struct _GdmLocalDisplayFactory
/* FIXME: this needs to be per seat? */
guint num_failures;
@@ -23,9 +25,9 @@
guint seat_removed_id;
+#endif
guint seat_properties_changed_id;
+ guint seat_attention_key;
- gboolean seat0_has_platform_graphics;
-@@ -106,9 +110,11 @@ static gpointer local_display_factory_object = NULL;
+@@ -108,9 +114,11 @@ static gpointer local_display_factory_object = NULL;
static gboolean gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory);
static gpointer local_display_factory_object = NULL;
@@ -37,27 +39,7 @@
G_DEFINE_TYPE (GdmLocalDisplayFactory, gdm_local_display_factory, GDM_TYPE_DISPLAY_FACTORY)
-@@ -245,9 +251,9 @@ struct GdmDisplayServerConfiguration {
- const char *session_type;
- } display_server_configuration[] = {
- #ifdef ENABLE_WAYLAND_SUPPORT
-- { "wayland", GDM_KEY_WAYLAND_ENABLE, "/usr/bin/Xwayland", "wayland" },
-+ { "wayland", GDM_KEY_WAYLAND_ENABLE, "/usr/local/bin/Xwayland", "wayland" },
- #endif
-- { "xorg", GDM_KEY_XORG_ENABLE, "/usr/bin/Xorg", "x11" },
-+ { "xorg", GDM_KEY_XORG_ENABLE, X_SERVER, "x11" },
- { NULL, NULL, NULL },
- };
-
-@@ -373,7 +379,6 @@ gdm_local_display_factory_create_transient_display (Gd
- gboolean ret;
- GdmDisplay *display = NULL;
- gboolean is_initial = FALSE;
-- const char *session_type;
- g_autofree gchar *preferred_display_server = NULL;
-
- g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
-@@ -451,6 +456,7 @@ gdm_local_display_factory_create_transient_display (Gd
+@@ -474,6 +482,7 @@ gdm_local_display_factory_create_transient_display (Gd
return ret;
}
@@ -65,7 +47,7 @@
static void
finish_display_on_seat_if_waiting (GdmDisplayStore *display_store,
GdmDisplay *display,
-@@ -505,6 +511,7 @@ on_session_registered_cb (GObject *gobject,
+@@ -528,6 +537,7 @@ on_session_registered_cb (GObject *gobject,
finish_waiting_displays_on_seat (factory, "seat0");
}
@@ -73,51 +55,58 @@
static void
on_display_status_changed (GdmDisplay *display,
-@@ -552,7 +559,7 @@ on_display_status_changed (GdmDisplay *dis
- * if there isn't one.
+@@ -560,7 +570,9 @@ on_display_status_changed (GdmDisplay *dis
+ "session-id", &session_id,
+ NULL);
+
++#ifdef WITH_SYSTEMD
+ sd_seat_get_active (seat_id, &seat_active_session, NULL);
++#endif
+
+ status = gdm_display_get_status (display);
+
+@@ -578,12 +590,16 @@ on_display_status_changed (GdmDisplay *dis
+ * screen when the user logs out.
*/
if (is_local &&
-- (g_strcmp0 (session_class, "greeter") != 0 || factory->active_vt == GDM_INITIAL_VT)) {
++#ifdef WITH_SYSTEMD
+ ((g_strcmp0 (session_class, "greeter") != 0 &&
+ (!seat_active_session || g_strcmp0(session_id, seat_active_session) == 0)) ||
+ #if defined(ENABLE_USER_DISPLAY_SERVER)
+ (g_strcmp0 (seat_id, "seat0") == 0 && factory->active_vt == GDM_INITIAL_VT) ||
+ #endif
+ g_strcmp0 (seat_id, "seat0") != 0)) {
++#else
+ (g_strcmp0 (session_class, "greeter") != 0)) {
++#endif
/* reset num failures */
factory->num_failures = 0;
-@@ -741,7 +748,9 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
+@@ -818,12 +834,15 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
+ g_auto (GStrv) session_types = NULL;
const char *legacy_session_types[] = { "x11", NULL };
- GdmDisplayStore *store;
GdmDisplay *display = NULL;
+#ifdef WITH_SYSTEMD
g_autofree char *login_session_id = NULL;
+#endif
- gboolean wayland_enabled = FALSE, xorg_enabled = FALSE;
g_autofree gchar *preferred_display_server = NULL;
- gboolean falling_back = FALSE;
-@@ -781,7 +790,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
- seat_supports_graphics = FALSE;
- }
+ gboolean waiting_on_udev = FALSE;
-- if (g_strcmp0 (seat_id, "seat0") == 0) {
-+ if (g_strcmp0 (seat_id, SEAT_ID) == 0) {
- is_seat0 = TRUE;
-
- falling_back = factory->num_failures > 0;
-@@ -869,6 +878,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
- return;
- }
+ g_debug ("GdmLocalDisplayFactory: display for seat %s requested", seat_id);
+#ifdef WITH_SYSTEMD
/* If we already have a login window, switch to it */
if (gdm_get_login_window_session_id (seat_id, &login_session_id)) {
GdmDisplay *display;
-@@ -886,6 +896,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
+@@ -843,6 +862,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
return;
}
}
+#endif
- g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id);
+ preferred_display_server = get_preferred_display_server (factory);
-@@ -929,6 +940,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
+@@ -993,6 +1013,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *facto
return;
}
@@ -125,7 +114,7 @@
static void
delete_display (GdmLocalDisplayFactory *factory,
const char *seat_id) {
-@@ -940,6 +952,7 @@ delete_display (GdmLocalDisplayFactory *factory,
+@@ -1004,6 +1025,7 @@ delete_display (GdmLocalDisplayFactory *factory,
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
gdm_display_store_foreach_remove (store, lookup_by_seat_id, (gpointer) seat_id);
}
@@ -133,16 +122,15 @@
static gboolean
gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory)
-@@ -951,6 +964,8 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
+@@ -1015,6 +1037,7 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
const char *seat;
g_debug ("GdmLocalDisplayFactory: enumerating seats from logind");
-+
+#ifdef WITH_SYSTEMD
result = g_dbus_connection_call_sync (factory->connection,
"org.freedesktop.login1",
"/org/freedesktop/login1",
-@@ -961,6 +976,18 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
+@@ -1025,6 +1048,18 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL, &error);
@@ -161,15 +149,15 @@
if (!result) {
g_warning ("GdmLocalDisplayFactory: Failed to issue method call: %s", error->message);
-@@ -980,6 +1007,7 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
+@@ -1044,6 +1079,7 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayF
return TRUE;
}
+#ifdef WITH_SYSTEMD
static void
- on_seat_new (GDBusConnection *connection,
- const gchar *sender_name,
-@@ -1093,6 +1121,7 @@ lookup_by_tty (const char *id,
+ on_seat_activate_greeter (GDBusConnection *connection,
+ const gchar *sender_name,
+@@ -1177,6 +1213,7 @@ lookup_by_tty (const char *id,
return g_strcmp0 (tty_to_check, tty_to_find) == 0;
}
@@ -177,15 +165,15 @@
#if defined(ENABLE_USER_DISPLAY_SERVER)
static void
-@@ -1295,6 +1324,7 @@ on_uevent (GUdevClient *client,
+@@ -1354,6 +1391,7 @@ on_vt_changed (GIOChannel *source,
}
#endif
+#ifdef WITH_SYSTEMD
+ #ifdef HAVE_UDEV
static void
- gdm_local_display_factory_start_monitor (GdmLocalDisplayFactory *factory)
- {
-@@ -1352,10 +1382,12 @@ gdm_local_display_factory_start_monitor (GdmLocalDispl
+ on_uevent (GUdevClient *client,
+@@ -1444,10 +1482,12 @@ gdm_local_display_factory_start_monitor (GdmLocalDispl
}
#endif
}
@@ -194,19 +182,19 @@
static void
gdm_local_display_factory_stop_monitor (GdmLocalDisplayFactory *factory)
{
-+#ifdef HAVE_UDEV
++#ifdef WITH_SYSTEMD
if (factory->uevent_handler_id) {
g_signal_handler_disconnect (factory->gudev_client, factory->uevent_handler_id);
factory->uevent_handler_id = 0;
-@@ -1387,6 +1419,7 @@ gdm_local_display_factory_stop_monitor (GdmLocalDispla
- factory->wait_to_finish_timeout_id = 0;
- }
+@@ -1478,6 +1518,7 @@ gdm_local_display_factory_stop_monitor (GdmLocalDispla
+ g_clear_handle_id (&factory->active_vt_watch_id, g_source_remove);
+ g_clear_handle_id (&factory->wait_to_finish_timeout_id, g_source_remove);
#endif
+#endif
}
static void
-@@ -1441,7 +1474,9 @@ gdm_local_display_factory_start (GdmDisplayFactory *ba
+@@ -1532,7 +1573,9 @@ gdm_local_display_factory_start (GdmDisplayFactory *ba
factory,
0);