$NetBSD: patch-daemon_gdm-local-display-factory_c,v 1.1 2021/04/16 13:57:52 cirnatdan Exp $

$OpenBSD: patch-daemon_gdm-local-display-factory_c,v 1.13 2019/11/02 15:34:07 ajacoutot Exp $

REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit)
From 1ac67f522f5690c27023d98096ca817f12f7eb88 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 12 Jun 2015 13:28:01 -0400
Subject: drop consolekit support

REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit)
From 9be58c9ec9a3a411492a5182ac4b0d51fdc3a323 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 12 Jun 2015 13:48:52 -0400
Subject: require logind support

Index: daemon/gdm-local-display-factory.c
--- daemon/gdm-local-display-factory.c.orig	2021-03-16 20:48:04.000000000 +0000
+++ daemon/gdm-local-display-factory.c
@@ -28,7 +28,9 @@
 #include <glib-object.h>
 #include <gio/gio.h>
 
+#ifdef WITH_SYSTEMD
 #include <systemd/sd-login.h>
+#endif
 
 #include "gdm-common.h"
 #include "gdm-manager.h"
@@ -42,6 +44,8 @@
 #include "gdm-local-display.h"
 #include "gdm-legacy-display.h"
 
+#define CK_SEAT1_PATH                       "/org/freedesktop/ConsoleKit/Seat1"
+
 #define GDM_DBUS_PATH                       "/org/gnome/DisplayManager"
 #define GDM_LOCAL_DISPLAY_FACTORY_DBUS_PATH GDM_DBUS_PATH "/LocalDisplayFactory"
 #define GDM_MANAGER_DBUS_NAME               "org.gnome.DisplayManager.LocalDisplayFactory"
@@ -60,9 +64,10 @@ struct _GdmLocalDisplayFactory
 
         /* FIXME: this needs to be per seat? */
         guint            num_failures;
-
+#ifdef WITH_SYSTEMD
         guint            seat_new_id;
         guint            seat_removed_id;
+#endif
         guint            seat_properties_changed_id;
 
         gboolean         seat0_graphics_check_timed_out;
@@ -89,8 +94,9 @@ static void     ensure_display_for_seat 
 static void     on_display_status_changed               (GdmDisplay                  *display,
                                                          GParamSpec                  *arg1,
                                                          GdmLocalDisplayFactory      *factory);
-
+#ifdef WITH_SYSTEMD
 static gboolean gdm_local_display_factory_sync_seats    (GdmLocalDisplayFactory *factory);
+#endif
 static gpointer local_display_factory_object = NULL;
 static gboolean lookup_by_session_id (const char *id,
                                       GdmDisplay *display,
@@ -235,7 +241,7 @@ gdm_local_display_factory_create_transie
 
         g_debug ("GdmLocalDisplayFactory: Creating transient display");
 
-#ifdef ENABLE_USER_DISPLAY_SERVER
+#if defined(ENABLE_USER_DISPLAY_SERVER) && defined(WITH_SYSTEMD)
         display = gdm_local_display_new ();
         if (gdm_local_display_factory_use_wayland ())
                 g_object_set (G_OBJECT (display), "session-type", "wayland", NULL);
@@ -376,7 +382,7 @@ on_display_status_changed (GdmDisplay   
                         /* reset num failures */
                         factory->num_failures = 0;
 
-                        gdm_local_display_factory_sync_seats (factory);
+			ensure_display_for_seat (factory, seat_id);
                 }
                 break;
         case GDM_DISPLAY_FAILED:
@@ -480,9 +486,10 @@ ensure_display_for_seat (GdmLocalDisplay
         const char *session_type = "wayland";
         GdmDisplayStore *store;
         GdmDisplay      *display = NULL;
+#ifdef WITH_SYSTEMD
         g_autofree char *login_session_id = NULL;
 
-        ret = sd_seat_can_graphical (seat_id);
+	ret = sd_seat_can_graphical (seat_id);
 
         if (ret < 0) {
                 g_critical ("Failed to query CanGraphical information for seat %s", seat_id);
@@ -496,7 +503,7 @@ ensure_display_for_seat (GdmLocalDisplay
                 g_debug ("GdmLocalDisplayFactory: System supports graphics");
                 seat_supports_graphics = TRUE;
         }
-
+#endif
         if (g_strcmp0 (seat_id, "seat0") == 0) {
                 is_seat0 = TRUE;
 
@@ -575,7 +582,7 @@ ensure_display_for_seat (GdmLocalDisplay
                 g_debug ("GdmLocalDisplayFactory: display already created");
                 return;
         }
-
+#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;
@@ -589,14 +596,14 @@ ensure_display_for_seat (GdmLocalDisplay
                         g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_MANAGED, NULL);
                         g_debug ("GdmLocalDisplayFactory: session %s found, activating.",
                                  login_session_id);
-                        gdm_activate_session_by_id (factory->connection, seat_id, login_session_id);
+                        activate_session_by_id (factory->connection, seat_id, login_session_id);
                         return;
                 }
         }
-
+#endif
         g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id);
 
-#ifdef ENABLE_USER_DISPLAY_SERVER
+#if defined(ENABLE_USER_DISPLAY_SERVER) && defined(WITH_SYSTEMD)
         if (is_seat0) {
                 display = gdm_local_display_new ();
                 if (session_type != NULL) {
@@ -627,7 +634,7 @@ ensure_display_for_seat (GdmLocalDisplay
 
         return;
 }
-
+#ifdef WITH_SYSTEMD
 static void
 delete_display (GdmLocalDisplayFactory *factory,
                 const char             *seat_id) {
@@ -791,7 +798,7 @@ lookup_by_tty (const char *id,
         return g_strcmp0 (tty_to_check, tty_to_find) == 0;
 }
 
-#if defined(ENABLE_USER_DISPLAY_SERVER)
+#if defined(ENABLE_USER_DISPLAY_SERVER) && defined(WITH_SYSTEMD)
 static void
 maybe_stop_greeter_in_background (GdmLocalDisplayFactory *factory,
                                   GdmDisplay             *display)
@@ -1046,7 +1053,7 @@ gdm_local_display_factory_stop_monitor (
         }
 #endif
 }
-
+#endif
 static void
 on_display_added (GdmDisplayStore        *display_store,
                   const char             *id,
@@ -1079,6 +1086,7 @@ static gboolean
 gdm_local_display_factory_start (GdmDisplayFactory *base_factory)
 {
         GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory);
+	GdmDisplay             *display;
         GdmDisplayStore *store;
 
         g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
@@ -1097,8 +1105,15 @@ gdm_local_display_factory_start (GdmDisp
                                  factory,
                                  0);
 
-        gdm_local_display_factory_start_monitor (factory);
-        return gdm_local_display_factory_sync_seats (factory);
+#ifdef WITH_SYSTEMD
+        if (LOGIND_RUNNING()) {
+                gdm_local_display_factory_start_monitor (factory);
+	        return gdm_local_display_factory_sync_seats (factory);
+        }
+#endif
+	/* On ConsoleKit just create Seat1, and that's it. */
+        ensure_display_for_seat (factory, CK_SEAT1_PATH);
+	return TRUE;
 }
 
 static gboolean
@@ -1108,9 +1123,9 @@ gdm_local_display_factory_stop (GdmDispl
         GdmDisplayStore *store;
 
         g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
-
+#ifdef WITH_SYSTEMD
         gdm_local_display_factory_stop_monitor (factory);
-
+#endif
         store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
 
         g_signal_handlers_disconnect_by_func (G_OBJECT (store),
@@ -1262,9 +1277,9 @@ gdm_local_display_factory_finalize (GObj
         g_clear_object (&factory->skeleton);
 
         g_hash_table_destroy (factory->used_display_numbers);
-
+#ifdef WITH_SYSTEMD
         gdm_local_display_factory_stop_monitor (factory);
-
+#endif
         G_OBJECT_CLASS (gdm_local_display_factory_parent_class)->finalize (object);
 }
 
