summaryrefslogtreecommitdiff
path: root/testing/gnome-settings-daemon/systemd-fallback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/gnome-settings-daemon/systemd-fallback.patch')
-rw-r--r--testing/gnome-settings-daemon/systemd-fallback.patch154
1 files changed, 154 insertions, 0 deletions
diff --git a/testing/gnome-settings-daemon/systemd-fallback.patch b/testing/gnome-settings-daemon/systemd-fallback.patch
new file mode 100644
index 000000000..da0496623
--- /dev/null
+++ b/testing/gnome-settings-daemon/systemd-fallback.patch
@@ -0,0 +1,154 @@
+commit b9ded09387f0b99ece97baee18595eb9e86a5b9b
+Author: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+Date: Mon Mar 12 01:52:54 2012 +0100
+
+ Fallback to CK if systemd is not available
+
+ Be nice to distributions where systemd is optional. This will select
+ the code path at runtime depending on whether the system was booted
+ using systemd.
+
+diff --git a/configure.ac b/configure.ac
+index 3b4789f..d522852 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -299,7 +299,7 @@ AC_ARG_ENABLE([systemd],
+ [with_systemd=$enableval],
+ [with_systemd=no])
+ if test "$with_systemd" = "yes" ; then
+- PKG_CHECK_MODULES(SYSTEMD, [libsystemd-login])
++ PKG_CHECK_MODULES(SYSTEMD, [libsystemd-daemon libsystemd-login])
+ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is used for session tracking])
+ SESSION_TRACKING=systemd
+ else
+diff --git a/gnome-settings-daemon/gnome-settings-session.c b/gnome-settings-daemon/gnome-settings-session.c
+index 5786300..83fe21e 100644
+--- a/gnome-settings-daemon/gnome-settings-session.c
++++ b/gnome-settings-daemon/gnome-settings-session.c
+@@ -30,6 +30,7 @@
+ #include "gnome-settings-session.h"
+
+ #ifdef HAVE_SYSTEMD
++#include <systemd/sd-daemon.h>
+ #include <systemd/sd-login.h>
+
+ typedef struct
+@@ -130,10 +131,9 @@ struct GnomeSettingsSessionPrivate
+ {
+ #ifdef HAVE_SYSTEMD
+ GSource *sd_source;
+-#else
++#endif
+ GDBusProxy *proxy_session;
+ GCancellable *cancellable;
+-#endif
+ gchar *session_id;
+ GnomeSettingsSessionState state;
+ };
+@@ -237,7 +237,7 @@ sessions_changed (gpointer user_data)
+ return TRUE;
+ }
+
+-#else /* HAVE_SYSTEMD */
++#endif /* HAVE_SYSTEMD */
+
+ static void
+ gnome_settings_session_proxy_signal_cb (GDBusProxy *proxy,
+@@ -371,22 +371,25 @@ got_manager_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_d
+ g_object_unref (proxy_manager);
+ }
+
+-#endif /* HAVE_SYSTEMD */
+-
+ static void
+ gnome_settings_session_init (GnomeSettingsSession *session)
+ {
+ session->priv = GNOME_SETTINGS_SESSION_GET_PRIVATE (session);
+
+ #ifdef HAVE_SYSTEMD
+- sd_pid_get_session (getpid(), &session->priv->session_id);
++ session->priv->sd_source = NULL;
++
++ if (sd_booted () > 0) {
++ sd_pid_get_session (getpid(), &session->priv->session_id);
+
+- session->priv->sd_source = sd_source_new ();
+- g_source_set_callback (session->priv->sd_source, sessions_changed, session, NULL);
+- g_source_attach (session->priv->sd_source, NULL);
++ session->priv->sd_source = sd_source_new ();
++ g_source_set_callback (session->priv->sd_source, sessions_changed, session, NULL);
++ g_source_attach (session->priv->sd_source, NULL);
+
+- sessions_changed (session);
+-#else
++ sessions_changed (session);
++ return;
++ }
++#endif
+ session->priv->cancellable = g_cancellable_new ();
+
+ /* connect to ConsoleKit */
+@@ -399,7 +402,6 @@ gnome_settings_session_init (GnomeSettingsSession *session)
+ session->priv->cancellable,
+ got_manager_proxy_cb,
+ session);
+-#endif
+ }
+
+ static void
+@@ -415,15 +417,17 @@ gnome_settings_session_finalize (GObject *object)
+ if (session->priv->sd_source != NULL) {
+ g_source_destroy (session->priv->sd_source);
+ g_source_unref (session->priv->sd_source);
++ goto out;
+ }
+-#else
++#endif
++
+ g_cancellable_cancel (session->priv->cancellable);
+
+ if (session->priv->proxy_session != NULL)
+ g_object_unref (session->priv->proxy_session);
+ g_object_unref (session->priv->cancellable);
+-#endif
+
++out:
+ G_OBJECT_CLASS (gnome_settings_session_parent_class)->finalize (object);
+ }
+
+diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
+index 8db04e5..9883d76 100644
+--- a/plugins/power/gsd-power-manager.c
++++ b/plugins/power/gsd-power-manager.c
+@@ -2031,7 +2031,7 @@ systemd_stop (void)
+ g_object_unref (bus);
+ }
+
+-#else
++#endif
+
+ static void
+ consolekit_stop_cb (GObject *source_object,
+@@ -2081,7 +2081,6 @@ consolekit_stop (void)
+ consolekit_stop_cb, NULL);
+ g_object_unref (proxy);
+ }
+-#endif
+
+ static void
+ upower_sleep_cb (GObject *source_object,
+@@ -2135,10 +2134,11 @@ do_power_action_type (GsdPowerManager *manager,
+ * hibernate is not available and is marginally better
+ * than just powering down the computer mid-write */
+ #ifdef HAVE_SYSTEMD
+- systemd_stop ();
+-#else
+- consolekit_stop ();
++ if (sd_booted () > 0)
++ systemd_stop ();
++ else
+ #endif
++ consolekit_stop ();
+ break;
+ case GSD_POWER_ACTION_BLANK:
+ ret = gnome_rr_screen_set_dpms_mode (manager->priv->x11_screen,