diff options
author | Fabio Erculiani <[email protected]> | 2013-07-04 23:11:54 +0200 |
---|---|---|
committer | Fabio Erculiani <[email protected]> | 2013-07-05 12:49:56 +0200 |
commit | b36c93575f88bd5a045c36f3d8084608ae20879f (patch) | |
tree | 3165189b3184ab2e0fb12eb033eb2df04b071379 | |
parent | 4d842135ce677957aee8bd5bb47f875b0ece570a (diff) | |
download | mate-power-manager-b36c93575f88bd5a045c36f3d8084608ae20879f.tar.bz2 mate-power-manager-b36c93575f88bd5a045c36f3d8084608ae20879f.tar.xz |
drop --with-systemdsleep and move logind detection to runtime
There is no need to bind the user to either systemd-logind or upower
at build time. People can switch between init systems or run logind
without systemd.
-rw-r--r-- | configure.ac | 21 | ||||
-rw-r--r-- | src/gpm-button.c | 105 | ||||
-rw-r--r-- | src/gpm-button.h | 3 | ||||
-rw-r--r-- | src/gpm-common.h | 4 | ||||
-rw-r--r-- | src/gpm-control.c | 179 | ||||
-rw-r--r-- | src/gpm-prefs-core.c | 197 |
6 files changed, 242 insertions, 267 deletions
diff --git a/configure.ac b/configure.ac index 3f9cb2e..511833d 100644 --- a/configure.ac +++ b/configure.ac @@ -305,27 +305,6 @@ AM_CONDITIONAL(WITH_SYSTEMD_INHIBIT, test x$use_systemdinhibit = xyes) AC_SUBST(WITH_SYSTEMD_INHIBIT) dnl --------------------------------------------------------------------------- -dnl systemd sleep -dnl --------------------------------------------------------------------------- - -AC_ARG_WITH(systemdsleep, - AS_HELP_STRING([--with-systemdsleep], - [Use logind for suspend and hibernate instead of upower]),, - with_systemdsleep=auto) - -use_systemdsleep=no -if test "x$with_systemdsleep" != "xno" ; then - PKG_CHECK_MODULES(SYSTEMD_SLEEP, libsystemd-login >= 195 libsystemd-daemon >= 195 , use_systemdsleep=yes, use_systemdsleep=no) - - if test "x$use_systemdsleep" = "xyes"; then - AC_DEFINE(WITH_SYSTEMD_SLEEP, 1, [systemdsleeo support]) - fi - -fi -AM_CONDITIONAL(WITH_SYSTEMD_SLEEP, test x$use_systemdsleep = xyes) -AC_SUBST(WITH_SYSTEMD_SLEEP) - -dnl --------------------------------------------------------------------------- dnl - DocBook Documentation dnl --------------------------------------------------------------------------- AC_ARG_ENABLE(docbook-docs, diff --git a/src/gpm-button.c b/src/gpm-button.c index 4f9f171..3c70ca1 100644 --- a/src/gpm-button.c +++ b/src/gpm-button.c @@ -249,53 +249,6 @@ gpm_button_class_init (GpmButtonClass *klass) G_TYPE_NONE, 1, G_TYPE_STRING); } -#ifdef WITH_SYSTEMD_SLEEP -gboolean gpm_button_get_lid_closed() -{ - - GDBusProxy *proxy; - GVariant *res, *inner; - gboolean lid; -GError *error = NULL; - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - "org.freedesktop.UPower", - "/org/freedesktop/UPower", - "org.freedesktop.DBus.Properties", - NULL, - &error ); - if (proxy == NULL) { - egg_error("Error connecting to dbus - %s", error->message); - g_error_free (error); - return -1; - } - - res = g_dbus_proxy_call_sync (proxy, "Get", - g_variant_new( "(ss)", - "org.freedesktop.UPower", - "LidIsClosed"), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &error - ); - if (error == NULL && res != NULL) { - g_variant_get(res, "(v)", &inner ); - lid = g_variant_get_boolean(inner); - g_variant_unref (inner); - g_variant_unref (res); - return lid; - } else if (error != NULL ) { - egg_error ("Error in dbus - %s", error->message); - g_error_free (error); - } - g_object_unref(proxy); - - return FALSE; -} -#endif - /** * gpm_button_is_lid_closed: **/ @@ -303,11 +256,53 @@ gboolean gpm_button_is_lid_closed (GpmButton *button) { g_return_val_if_fail (GPM_IS_BUTTON (button), FALSE); -#ifdef WITH_SYSTEMD_SLEEP - return gpm_button_get_lid_closed(); -#else - return up_client_get_lid_is_closed (button->priv->client); -#endif + + GDBusProxy *proxy; + GVariant *res, *inner; + gboolean lid; + GError *error = NULL; + + if (LOGIND_RUNNING()) { + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.DBus.Properties", + NULL, + &error ); + if (proxy == NULL) { + egg_error("Error connecting to dbus - %s", error->message); + g_error_free (error); + return -1; + } + + res = g_dbus_proxy_call_sync (proxy, "Get", + g_variant_new( "(ss)", + "org.freedesktop.UPower", + "LidIsClosed"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error + ); + if (error == NULL && res != NULL) { + g_variant_get(res, "(v)", &inner ); + lid = g_variant_get_boolean(inner); + g_variant_unref (inner); + g_variant_unref (res); + return lid; + } else if (error != NULL ) { + egg_error ("Error in dbus - %s", error->message); + g_error_free (error); + } + g_object_unref(proxy); + + return FALSE; + } + else { + return up_client_get_lid_is_closed (button->priv->client); + } } @@ -334,11 +329,7 @@ gpm_button_client_changed_cb (UpClient *client, GpmButton *button) gboolean lid_is_closed; /* get new state */ -#ifdef WITH_SYSTEMD_SLEEP - lid_is_closed = gpm_button_get_lid_closed(); -#else - lid_is_closed = up_client_get_lid_is_closed (button->priv->client); -#endif + lid_is_closed = gpm_button_is_lid_closed(button); /* same state */ if (button->priv->lid_is_closed == lid_is_closed) diff --git a/src/gpm-button.h b/src/gpm-button.h index 7d60334..8992007 100644 --- a/src/gpm-button.h +++ b/src/gpm-button.h @@ -66,9 +66,6 @@ typedef struct GType gpm_button_get_type (void); GpmButton *gpm_button_new (void); gboolean gpm_button_is_lid_closed (GpmButton *button); -#ifdef WITH_SYSTEMD_SLEEP -gboolean gpm_button_get_lid_closed (); -#endif gboolean gpm_button_reset_time (GpmButton *button); G_END_DECLS diff --git a/src/gpm-common.h b/src/gpm-common.h index ca4762c..6f712cb 100644 --- a/src/gpm-common.h +++ b/src/gpm-common.h @@ -24,8 +24,12 @@ #include <glib.h> +#include <unistd.h> + G_BEGIN_DECLS +#define LOGIND_RUNNING() (access("/run/systemd/seats/", F_OK) >= 0) + #define GPM_DBUS_SERVICE "org.mate.PowerManager" #define GPM_DBUS_INTERFACE "org.mate.PowerManager" #define GPM_DBUS_INTERFACE_BACKLIGHT "org.mate.PowerManager.Backlight" diff --git a/src/gpm-control.c b/src/gpm-control.c index 71f857c..d0db730 100644 --- a/src/gpm-control.c +++ b/src/gpm-control.c @@ -166,23 +166,23 @@ gpm_control_suspend (GpmControl *control, GError **error) gboolean lock_mate_keyring; MateKeyringResult keyres; #endif /* WITH_KEYRING */ -#ifdef WITH_SYSTEMD_SLEEP + GError *dbus_error = NULL; DBusGProxy *proxy; GVariant *res; -#endif screensaver = gpm_screensaver_new (); -#ifndef WITH_SYSTEMD_SLEEP - g_object_get (control->priv->client, - "can-suspend", &allowed, - NULL); - if (!allowed) { - egg_debug ("cannot suspend as not allowed from policy"); - g_set_error_literal (error, GPM_CONTROL_ERROR, GPM_CONTROL_ERROR_GENERAL, "Cannot suspend"); - goto out; + + if (LOGIND_RUNNING()) { + g_object_get (control->priv->client, + "can-suspend", &allowed, + NULL); + if (!allowed) { + egg_debug ("cannot suspend as not allowed from policy"); + g_set_error_literal (error, GPM_CONTROL_ERROR, GPM_CONTROL_ERROR_GENERAL, "Cannot suspend"); + goto out; + } } -#endif #ifdef WITH_KEYRING /* we should perhaps lock keyrings when sleeping #375681 */ @@ -208,40 +208,41 @@ gpm_control_suspend (GpmControl *control, GError **error) egg_debug ("emitting sleep"); g_signal_emit (control, signals [SLEEP], 0, GPM_CONTROL_ACTION_SUSPEND); -#ifdef WITH_SYSTEMD_SLEEP - /* sleep via logind */ - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - "org.freedesktop.login1", - "/org/freedesktop/login1", - "org.freedesktop.login1.Manager", - NULL, - &dbus_error ); - if (proxy == NULL) { - egg_error("Error connecting to dbus - %s", dbus_error->message); - g_error_free (dbus_error); - return -1; - } - g_dbus_proxy_call_sync (proxy, "Suspend", - g_variant_new( "(b)",FALSE), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &dbus_error - ); - if (dbus_error != NULL ) { - egg_debug ("Error in dbus - %s", dbus_error->message); - g_error_free (dbus_error); - ret = TRUE; - } - else { - ret = TRUE; - } - g_object_unref(proxy); -#else - ret = up_client_suspend_sync (control->priv->client, NULL, error); -#endif + if (LOGIND_RUNNING()) { + /* sleep via logind */ + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + "org.freedesktop.login1", + "/org/freedesktop/login1", + "org.freedesktop.login1.Manager", + NULL, + &dbus_error ); + if (proxy == NULL) { + egg_error("Error connecting to dbus - %s", dbus_error->message); + g_error_free (dbus_error); + return -1; + } + g_dbus_proxy_call_sync (proxy, "Suspend", + g_variant_new( "(b)",FALSE), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &dbus_error + ); + if (dbus_error != NULL ) { + egg_debug ("Error in dbus - %s", dbus_error->message); + g_error_free (dbus_error); + ret = TRUE; + } + else { + ret = TRUE; + } + g_object_unref(proxy); + } + else { + ret = up_client_suspend_sync (control->priv->client, NULL, error); + } egg_debug ("emitting resume"); g_signal_emit (control, signals [RESUME], 0, GPM_CONTROL_ACTION_SUSPEND); @@ -278,23 +279,21 @@ gpm_control_hibernate (GpmControl *control, GError **error) MateKeyringResult keyres; #endif /* WITH_KEYRING */ -#ifdef WITH_SYSTEMD_SLEEP GError *dbus_error = NULL; DBusGProxy *proxy; -#endif screensaver = gpm_screensaver_new (); -#ifndef WITH_SYSTEMD_SLEEP - g_object_get (control->priv->client, - "can-hibernate", &allowed, - NULL); - if (!allowed) { - egg_debug ("cannot hibernate as not allowed from policy"); - g_set_error_literal (error, GPM_CONTROL_ERROR, GPM_CONTROL_ERROR_GENERAL, "Cannot hibernate"); - goto out; + if (!LOGIND_RUNNING()) { + g_object_get (control->priv->client, + "can-hibernate", &allowed, + NULL); + if (!allowed) { + egg_debug ("cannot hibernate as not allowed from policy"); + g_set_error_literal (error, GPM_CONTROL_ERROR, GPM_CONTROL_ERROR_GENERAL, "Cannot hibernate"); + goto out; + } } -#endif #ifdef WITH_KEYRING /* we should perhaps lock keyrings when sleeping #375681 */ @@ -320,39 +319,41 @@ gpm_control_hibernate (GpmControl *control, GError **error) egg_debug ("emitting sleep"); g_signal_emit (control, signals [SLEEP], 0, GPM_CONTROL_ACTION_HIBERNATE); -#ifdef WITH_SYSTEMD_SLEEP - /* sleep via logind */ - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - "org.freedesktop.login1", - "/org/freedesktop/login1", - "org.freedesktop.login1.Manager", - NULL, - &dbus_error ); - if (proxy == NULL) { - egg_error("Error connecting to dbus - %s", dbus_error->message); - g_error_free (dbus_error); - return -1; - } - g_dbus_proxy_call_sync (proxy, "Hibernate", - g_variant_new( "(b)",FALSE), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &dbus_error - ); - if (dbus_error != NULL ) { - egg_debug ("Error in dbus - %s", dbus_error->message); - g_error_free (dbus_error); - ret = TRUE; - } - else { - ret = TRUE; - } -#else - ret = up_client_hibernate_sync (control->priv->client, NULL, error); -#endif + if (LOGIND_RUNNING()) { + /* sleep via logind */ + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + "org.freedesktop.login1", + "/org/freedesktop/login1", + "org.freedesktop.login1.Manager", + NULL, + &dbus_error ); + if (proxy == NULL) { + egg_error("Error connecting to dbus - %s", dbus_error->message); + g_error_free (dbus_error); + return -1; + } + g_dbus_proxy_call_sync (proxy, "Hibernate", + g_variant_new( "(b)",FALSE), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &dbus_error + ); + if (dbus_error != NULL ) { + egg_debug ("Error in dbus - %s", dbus_error->message); + g_error_free (dbus_error); + ret = TRUE; + } + else { + ret = TRUE; + } + } + else { + ret = up_client_hibernate_sync (control->priv->client, NULL, error); + } + egg_debug ("emitting resume"); g_signal_emit (control, signals [RESUME], 0, GPM_CONTROL_ACTION_HIBERNATE); diff --git a/src/gpm-prefs-core.c b/src/gpm-prefs-core.c index e84d0b1..600b943 100644 --- a/src/gpm-prefs-core.c +++ b/src/gpm-prefs-core.c @@ -812,11 +812,10 @@ gpm_prefs_init (GpmPrefs *prefs) GpmBrightness *brightness; gboolean ret; guint i; -#ifdef WITH_SYSTEMD_SLEEP + GDBusProxy *proxy; GVariant *res, *inner; gchar * r; -#endif prefs->priv = GPM_PREFS_GET_PRIVATE (prefs); @@ -828,104 +827,108 @@ gpm_prefs_init (GpmPrefs *prefs) prefs->priv->can_shutdown = TRUE; egg_console_kit_can_stop (prefs->priv->console, &prefs->priv->can_shutdown, NULL); -#ifdef WITH_SYSTEMD_SLEEP - /* get values from logind */ - - prefs->priv->can_suspend = FALSE; - prefs->priv->can_hibernate = FALSE; - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - "org.freedesktop.login1", - "/org/freedesktop/login1", - "org.freedesktop.login1.Manager", - NULL, - &error ); - if (proxy == NULL) { - egg_error("Error connecting to dbus - %s", error->message); - g_error_free (error); - return -1; - } - res = g_dbus_proxy_call_sync (proxy, "CanSuspend", - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &error - ); - if (error == NULL && res != NULL) { - g_variant_get(res,"(s)", &r); - prefs->priv->can_suspend = g_strcmp0(r,"yes")==0?TRUE:FALSE; - g_variant_unref (res); - } else if (error != NULL ) { - egg_error ("Error in dbus - %s", error->message); - g_error_free (error); - } - - res = g_dbus_proxy_call_sync (proxy, "CanHibernate", - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &error - ); - if (error == NULL && res != NULL) { - g_variant_get(res,"(s)", &r); - prefs->priv->can_hibernate = g_strcmp0(r,"yes")==0?TRUE:FALSE; - g_variant_unref (res); - } else if (error != NULL ) { - egg_error ("Error in dbus - %s", error->message); - g_error_free (error); - } - g_object_unref(proxy); -#else - /* get values from UpClient */ - prefs->priv->can_suspend = up_client_get_can_suspend (prefs->priv->client); - prefs->priv->can_hibernate = up_client_get_can_hibernate (prefs->priv->client); -#endif -#ifdef WITH_SYSTEMD_SLEEP - proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, - NULL, - "org.freedesktop.UPower", - "/org/freedesktop/UPower", - "org.freedesktop.DBus.Properties", - NULL, - &error ); - if (proxy == NULL) { - egg_error("Error connecting to dbus - %s", error->message); - g_error_free (error); - return -1; - } - - res = g_dbus_proxy_call_sync (proxy, "Get", - g_variant_new( "(ss)", - "org.freedesktop.UPower", - "LidIsPresent"), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - &error - ); - if (error == NULL && res != NULL) { - g_variant_get(res, "(v)", &inner ); - prefs->priv->has_button_lid = g_variant_get_boolean(inner); - g_variant_unref (inner); - g_variant_unref (res); - } else if (error != NULL ) { - egg_error ("Error in dbus - %s", error->message); - g_error_free (error); - } - g_object_unref(proxy); -#else + if (LOGIND_RUNNING()) { + /* get values from logind */ + + prefs->priv->can_suspend = FALSE; + prefs->priv->can_hibernate = FALSE; + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + "org.freedesktop.login1", + "/org/freedesktop/login1", + "org.freedesktop.login1.Manager", + NULL, + &error ); + if (proxy == NULL) { + egg_error("Error connecting to dbus - %s", error->message); + g_error_free (error); + return -1; + } + res = g_dbus_proxy_call_sync (proxy, "CanSuspend", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error + ); + if (error == NULL && res != NULL) { + g_variant_get(res,"(s)", &r); + prefs->priv->can_suspend = g_strcmp0(r,"yes")==0?TRUE:FALSE; + g_variant_unref (res); + } else if (error != NULL ) { + egg_error ("Error in dbus - %s", error->message); + g_error_free (error); + } + + res = g_dbus_proxy_call_sync (proxy, "CanHibernate", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error + ); + if (error == NULL && res != NULL) { + g_variant_get(res,"(s)", &r); + prefs->priv->can_hibernate = g_strcmp0(r,"yes")==0?TRUE:FALSE; + g_variant_unref (res); + } else if (error != NULL ) { + egg_error ("Error in dbus - %s", error->message); + g_error_free (error); + } + g_object_unref(proxy); + } + else { + /* get values from UpClient */ + prefs->priv->can_suspend = up_client_get_can_suspend (prefs->priv->client); + prefs->priv->can_hibernate = up_client_get_can_hibernate (prefs->priv->client); + } + + if (LOGIND_RUNNING()) { + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.DBus.Properties", + NULL, + &error ); + if (proxy == NULL) { + egg_error("Error connecting to dbus - %s", error->message); + g_error_free (error); + return -1; + } + + res = g_dbus_proxy_call_sync (proxy, "Get", + g_variant_new( "(ss)", + "org.freedesktop.UPower", + "LidIsPresent"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error + ); + if (error == NULL && res != NULL) { + g_variant_get(res, "(v)", &inner ); + prefs->priv->has_button_lid = g_variant_get_boolean(inner); + g_variant_unref (inner); + g_variant_unref (res); + } else if (error != NULL ) { + egg_error ("Error in dbus - %s", error->message); + g_error_free (error); + } + g_object_unref(proxy); + } + else { #if UP_CHECK_VERSION(0,9,2) - prefs->priv->has_button_lid = up_client_get_lid_is_present (prefs->priv->client); + prefs->priv->has_button_lid = up_client_get_lid_is_present (prefs->priv->client); #else - g_object_get (prefs->priv->client, - "lid-is-present", &prefs->priv->has_button_lid, - NULL); -#endif + g_object_get (prefs->priv->client, + "lid-is-present", &prefs->priv->has_button_lid, + NULL); #endif + } + prefs->priv->has_button_suspend = TRUE; /* find if we have brightness hardware */ |