commit b9ded09387f0b99ece97baee18595eb9e86a5b9b Author: Jan Alexander Steffens (heftig) 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 #include 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,