diff options
author | Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> | 2013-08-05 18:15:00 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2013-08-06 11:49:06 +0200 |
commit | 0c5fd82a6ce25abca9a9d7018889bad8fc1c6057 (patch) | |
tree | b6f4d02c9c0b26f08969f06a18a0d3f8b288b73a | |
parent | e962474781516becb2e28fc8c02be36ef2450140 (diff) | |
download | gnome-settings-daemon-0c5fd82a6ce25abca9a9d7018889bad8fc1c6057.tar.gz |
power: Use logind to discover critical action availability
The upower functionality is deprecated and will return an
error unless upower is built with --enable-deprecated.
Follows a similar patch to gnome-control-center.
https://bugzilla.gnome.org/show_bug.cgi?id=705525
-rw-r--r-- | plugins/power/gsd-power-manager.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c index fde90eff..346bd9fb 100644 --- a/plugins/power/gsd-power-manager.c +++ b/plugins/power/gsd-power-manager.c @@ -27,7 +27,6 @@ #include <string.h> #include <glib/gi18n.h> #include <gtk/gtk.h> -#define UPOWER_ENABLE_DEPRECATED 1 #include <libupower-glib/upower.h> #include <libnotify/notify.h> #include <canberra-gtk.h> @@ -1164,18 +1163,37 @@ static GsdPowerActionType manager_critical_action_get (GsdPowerManager *manager, gboolean is_ups) { - GsdPowerActionType policy; + GsdPowerActionType policy = GSD_POWER_ACTION_SHUTDOWN; + GVariant *result = NULL; policy = g_settings_get_enum (manager->priv->settings, "critical-battery-action"); + if (policy == GSD_POWER_ACTION_SUSPEND) { - if (is_ups == FALSE && - up_client_get_can_suspend (manager->priv->up_client)) - return policy; - return GSD_POWER_ACTION_SHUTDOWN; + if (is_ups == FALSE) { + result = g_dbus_proxy_call_sync (manager->priv->logind_proxy, + "CanSuspend", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, NULL); + } } else if (policy == GSD_POWER_ACTION_HIBERNATE) { - if (up_client_get_can_hibernate (manager->priv->up_client)) - return policy; - return GSD_POWER_ACTION_SHUTDOWN; + result = g_dbus_proxy_call_sync (manager->priv->logind_proxy, + "CanHibernate", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, NULL); + } else { + /* Other actions need no check */ + return policy; + } + + if (result) { + const char *s; + + g_variant_get (result, "(s)", &s); + if (g_strcmp0 (s, "yes") != 0) + policy = GSD_POWER_ACTION_SHUTDOWN; + g_variant_unref (result); } return policy; |