Changeset View
Changeset View
Standalone View
Standalone View
x11/gdm/files/patch-daemon_gdm-local-display-factory.c
$OpenBSD: patch-daemon_gdm-local-display-factory_c,v 1.6 2017/03/03 13:01:26 ajacoutot Exp $ | $OpenBSD: patch-daemon_gdm-local-display-factory_c,v 1.14 2020/07/14 06:32:03 ajacoutot Exp $ | ||||
REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit) | REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit) | ||||
From 1ac67f522f5690c27023d98096ca817f12f7eb88 Mon Sep 17 00:00:00 2001 | From 1ac67f522f5690c27023d98096ca817f12f7eb88 Mon Sep 17 00:00:00 2001 | ||||
From: Ray Strode <rstrode@redhat.com> | From: Ray Strode <rstrode@redhat.com> | ||||
Date: Fri, 12 Jun 2015 13:28:01 -0400 | Date: Fri, 12 Jun 2015 13:28:01 -0400 | ||||
Subject: drop consolekit support | Subject: drop consolekit support | ||||
REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit) | REVERT - OpenBSD does not have a systemd implementation (we need ConsoleKit) | ||||
From 9be58c9ec9a3a411492a5182ac4b0d51fdc3a323 Mon Sep 17 00:00:00 2001 | From 9be58c9ec9a3a411492a5182ac4b0d51fdc3a323 Mon Sep 17 00:00:00 2001 | ||||
From: Ray Strode <rstrode@redhat.com> | From: Ray Strode <rstrode@redhat.com> | ||||
Date: Fri, 12 Jun 2015 13:48:52 -0400 | Date: Fri, 12 Jun 2015 13:48:52 -0400 | ||||
Subject: require logind support | Subject: require logind support | ||||
--- daemon/gdm-local-display-factory.c.orig Wed Mar 1 16:58:36 2017 | Index: daemon/gdm-local-display-factory.c | ||||
+++ daemon/gdm-local-display-factory.c Fri Mar 3 12:00:56 2017 | --- daemon/gdm-local-display-factory.c.orig 2020-07-13 20:36:07 UTC | ||||
@@ -42,6 +42,8 @@ | +++ daemon/gdm-local-display-factory.c | ||||
@@ -28,7 +28,9 @@ | |||||
#include <glib-object.h> | |||||
#include <gio/gio.h> | |||||
#define GDM_LOCAL_DISPLAY_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LOCAL_DISPLAY_FACTORY, GdmLocalDisplayFactoryPrivate)) | +#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 CK_SEAT1_PATH "/org/freedesktop/ConsoleKit/Seat1" | ||||
+ | + | ||||
#define GDM_DBUS_PATH "/org/gnome/DisplayManager" | #define GDM_DBUS_PATH "/org/gnome/DisplayManager" | ||||
#define GDM_LOCAL_DISPLAY_FACTORY_DBUS_PATH GDM_DBUS_PATH "/LocalDisplayFactory" | #define GDM_LOCAL_DISPLAY_FACTORY_DBUS_PATH GDM_DBUS_PATH "/LocalDisplayFactory" | ||||
#define GDM_MANAGER_DBUS_NAME "org.gnome.DisplayManager.LocalDisplayFactory" | #define GDM_MANAGER_DBUS_NAME "org.gnome.DisplayManager.LocalDisplayFactory" | ||||
@@ -57,8 +59,10 @@ struct GdmLocalDisplayFactoryPrivate | @@ -60,8 +64,10 @@ struct _GdmLocalDisplayFactory | ||||
/* FIXME: this needs to be per seat? */ | /* FIXME: this needs to be per seat? */ | ||||
guint num_failures; | guint num_failures; | ||||
+#ifdef WITH_SYSTEMD | +#ifdef WITH_SYSTEMD | ||||
guint seat_new_id; | guint seat_new_id; | ||||
guint seat_removed_id; | guint seat_removed_id; | ||||
+#endif | +#endif | ||||
}; | |||||
enum { | #if defined(ENABLE_WAYLAND_SUPPORT) && defined(ENABLE_USER_DISPLAY_SERVER) | ||||
@@ -206,8 +210,10 @@ gdm_local_display_factory_create_transient_display (Gd | unsigned int active_vt; | ||||
@@ -87,7 +93,9 @@ static void on_display_status_changed | |||||
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, | |||||
@@ -232,7 +240,7 @@ gdm_local_display_factory_create_transient_display (Gd | |||||
g_debug ("GdmLocalDisplayFactory: Creating transient display"); | g_debug ("GdmLocalDisplayFactory: Creating transient display"); | ||||
-#ifdef ENABLE_USER_DISPLAY_SERVER | -#ifdef ENABLE_USER_DISPLAY_SERVER | ||||
- display = gdm_local_display_new (); | |||||
+#if defined ENABLE_USER_DISPLAY_SERVER && defined WITH_SYSTEMD | +#if defined ENABLE_USER_DISPLAY_SERVER && defined WITH_SYSTEMD | ||||
+ if (LOGIND_RUNNING() > 0) { | display = gdm_local_display_new (); | ||||
+ display = gdm_local_display_new (); | if (gdm_local_display_factory_use_wayland ()) | ||||
+ } | g_object_set (G_OBJECT (display), "session-type", "wayland", NULL); | ||||
#else | @@ -373,7 +381,7 @@ on_display_status_changed (GdmDisplay *dis | ||||
if (display == NULL) { | |||||
guint32 num; | |||||
@@ -289,7 +295,7 @@ on_display_status_changed (GdmDisplay *dis | |||||
/* reset num failures */ | /* reset num failures */ | ||||
factory->priv->num_failures = 0; | factory->num_failures = 0; | ||||
- gdm_local_display_factory_sync_seats (factory); | - gdm_local_display_factory_sync_seats (factory); | ||||
+ create_display (factory, seat_id, session_type, is_initial); | + create_display (factory, seat_id, session_type, is_initial); | ||||
} | } | ||||
break; | break; | ||||
case GDM_DISPLAY_FAILED: | case GDM_DISPLAY_FAILED: | ||||
@@ -368,7 +374,7 @@ create_display (GdmLocalDisplayFactory *factory, | @@ -467,15 +475,19 @@ create_display (GdmLocalDisplayFactory *factory, | ||||
{ | |||||
GdmDisplayStore *store; | |||||
GdmDisplay *display = NULL; | |||||
+#ifdef WITH_SYSTEMD | |||||
g_autofree char *login_session_id = NULL; | |||||
+#endif | |||||
g_debug ("GdmLocalDisplayFactory: %s login display for seat %s requested", | |||||
session_type? : "X11", seat_id); | |||||
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); | |||||
+#ifdef WITH_SYSTEMD | |||||
if (sd_seat_can_multi_session (seat_id)) | |||||
display = gdm_display_store_find (store, lookup_prepared_display_by_seat_id, (gpointer) seat_id); | |||||
else | |||||
+#endif | |||||
display = gdm_display_store_find (store, lookup_by_seat_id, (gpointer) seat_id); | |||||
/* Ensure we don't create the same display more than once */ | |||||
@@ -484,6 +496,7 @@ create_display (GdmLocalDisplayFactory *factory, | |||||
return NULL; | |||||
} | |||||
+#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; | |||||
@@ -497,14 +510,15 @@ create_display (GdmLocalDisplayFactory *factory, | |||||
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_id (factory->connection, seat_id, login_session_id); | |||||
return NULL; | |||||
} | |||||
} | |||||
+#endif | |||||
g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id); | g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id); | ||||
-#ifdef ENABLE_USER_DISPLAY_SERVER | -#ifdef ENABLE_USER_DISPLAY_SERVER | ||||
+#if defined ENABLE_USER_DISPLAY_SERVER && defined WITH_SYSTEMD | +#if defined ENABLE_USER_DISPLAY_SERVER && defined WITH_SYSTEMD | ||||
if (g_strcmp0 (seat_id, "seat0") == 0) { | if (g_strcmp0 (seat_id, "seat0") == 0) { | ||||
display = gdm_local_display_new (); | display = gdm_local_display_new (); | ||||
if (session_type != NULL) { | if (session_type != NULL) { | ||||
@@ -400,6 +406,8 @@ create_display (GdmLocalDisplayFactory *factory, | @@ -536,6 +550,7 @@ create_display (GdmLocalDisplayFactory *factory, | ||||
return display; | return display; | ||||
} | } | ||||
+#ifdef WITH_SYSTEMD | +#ifdef WITH_SYSTEMD | ||||
+ | |||||
static void | static void | ||||
delete_display (GdmLocalDisplayFactory *factory, | delete_display (GdmLocalDisplayFactory *factory, | ||||
const char *seat_id) { | const char *seat_id) { | ||||
@@ -536,6 +544,7 @@ gdm_local_display_factory_stop_monitor (GdmLocalDispla | @@ -914,6 +929,7 @@ gdm_local_display_factory_stop_monitor (GdmLocalDispla | ||||
factory->priv->seat_removed_id = 0; | |||||
} | } | ||||
#endif | |||||
} | } | ||||
+#endif | +#endif | ||||
static void | static void | ||||
on_display_added (GdmDisplayStore *display_store, | on_display_added (GdmDisplayStore *display_store, | ||||
@@ -576,6 +585,7 @@ static gboolean | @@ -947,6 +963,7 @@ static gboolean | ||||
gdm_local_display_factory_start (GdmDisplayFactory *base_factory) | gdm_local_display_factory_start (GdmDisplayFactory *base_factory) | ||||
{ | { | ||||
GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory); | GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory); | ||||
+ GdmDisplay *display; | + GdmDisplay *display; | ||||
GdmDisplayStore *store; | GdmDisplayStore *store; | ||||
g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); | g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); | ||||
@@ -594,8 +604,17 @@ gdm_local_display_factory_start (GdmDisplayFactory *ba | @@ -965,8 +982,17 @@ gdm_local_display_factory_start (GdmDisplayFactory *ba | ||||
factory, | factory, | ||||
0); | 0); | ||||
- gdm_local_display_factory_start_monitor (factory); | - gdm_local_display_factory_start_monitor (factory); | ||||
- return gdm_local_display_factory_sync_seats (factory); | - return gdm_local_display_factory_sync_seats (factory); | ||||
+#ifdef WITH_SYSTEMD | +#ifdef WITH_SYSTEMD | ||||
+ if (LOGIND_RUNNING()) { | + if (LOGIND_RUNNING()) { | ||||
+ gdm_local_display_factory_start_monitor (factory); | + gdm_local_display_factory_start_monitor (factory); | ||||
+ return gdm_local_display_factory_sync_seats (factory); | + return gdm_local_display_factory_sync_seats (factory); | ||||
+ } | + } | ||||
+#endif | +#endif | ||||
+ | + | ||||
+ /* On ConsoleKit just create Seat1, and that's it. */ | + /* On ConsoleKit just create Seat1, and that's it. */ | ||||
+ display = create_display (factory, CK_SEAT1_PATH, NULL, TRUE); | + display = create_display (factory, CK_SEAT1_PATH, NULL, TRUE); | ||||
+ | + | ||||
+ return display != NULL; | + return display != NULL; | ||||
} | } | ||||
static gboolean | static gboolean | ||||
@@ -606,7 +625,9 @@ gdm_local_display_factory_stop (GdmDisplayFactory *bas | @@ -977,7 +1003,9 @@ gdm_local_display_factory_stop (GdmDisplayFactory *bas | ||||
g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); | g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); | ||||
+#ifdef WITH_SYSTEMD | +#ifdef WITH_SYSTEMD | ||||
gdm_local_display_factory_stop_monitor (factory); | gdm_local_display_factory_stop_monitor (factory); | ||||
+#endif | +#endif | ||||
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); | store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); | ||||
@@ -762,7 +783,9 @@ gdm_local_display_factory_finalize (GObject *object) | @@ -1129,7 +1157,9 @@ gdm_local_display_factory_finalize (GObject *object) | ||||
g_hash_table_destroy (factory->priv->used_display_numbers); | g_hash_table_destroy (factory->used_display_numbers); | ||||
+#ifdef WITH_SYSTEMD | +#ifdef WITH_SYSTEMD | ||||
gdm_local_display_factory_stop_monitor (factory); | gdm_local_display_factory_stop_monitor (factory); | ||||
+#endif | +#endif | ||||
G_OBJECT_CLASS (gdm_local_display_factory_parent_class)->finalize (object); | G_OBJECT_CLASS (gdm_local_display_factory_parent_class)->finalize (object); | ||||
} | } |