From 2e643e7bd0c3c182a62e7112431ea797e18bf6ed Mon Sep 17 00:00:00 2001 From: Iain Lane Date: Fri, 12 Apr 2013 12:12:34 +0100 Subject: Remove upower usage - these interfaces are being deprecated. There doesn't appear to be any signal in logind for the CanSuspend or CanHibernate properties changing throughout the life of a session, so we don't support this. --- src/session-menu-mgr.c | 125 +++++++++++++++++-------------------------------- 1 file changed, 44 insertions(+), 81 deletions(-) (limited to 'src/session-menu-mgr.c') diff --git a/src/session-menu-mgr.c b/src/session-menu-mgr.c index a41208f..1d865fc 100644 --- a/src/session-menu-mgr.c +++ b/src/session-menu-mgr.c @@ -29,7 +29,7 @@ with this program. If not, see . #include #include -#include "dbus-upower.h" +#include "dbus-login1-manager.h" #include "session-menu-mgr.h" #include "shared-names.h" #include "users-service-dbus.h" @@ -37,8 +37,8 @@ with this program. If not, see . #define DEBUG_SHOW_ALL FALSE -#define UPOWER_ADDRESS "org.freedesktop.UPower" -#define UPOWER_PATH "/org/freedesktop/UPower" +#define LOGIN1_MANAGER_ADDRESS "org.freedesktop.login1" +#define LOGIN1_MANAGER_PATH "/org/freedesktop/login1" #define CMD_HELP "yelp" #define CMD_INFO "gnome-control-center info" @@ -77,7 +77,7 @@ SwitcherMode; * This is a pretty straightforward class: it creates the menumodel * and listens for events that can affect the model's properties. * - * Simple event sources, such as GSettings and a UPower DBus proxy, + * Simple event sources, such as GSettings and a logind DBus proxy, * are handled here. More involved event sources are delegated to the * UsersServiceDBus facade class. */ @@ -107,15 +107,13 @@ struct _SessionMenuMgr /* cached settings taken from the upower proxy */ gboolean can_hibernate; gboolean can_suspend; - gboolean allow_hibernate; - gboolean allow_suspend; gboolean shell_mode; gboolean greeter_mode; guint shell_name_watcher; GCancellable * cancellable; - DBusUPower * upower_proxy; + Login1Manager * login1_manager_proxy; SessionDbus * session_dbus; UsersServiceDbus * users_dbus_facade; OnlineAccountsMgr * online_accounts_mgr; @@ -224,7 +222,7 @@ session_menu_mgr_dispose (GObject *object) g_clear_object (&mgr->indicator_settings); g_clear_object (&mgr->lockdown_settings); g_clear_object (&mgr->keybinding_settings); - g_clear_object (&mgr->upower_proxy); + g_clear_object (&mgr->login1_manager_proxy); g_clear_object (&mgr->users_dbus_facade); g_clear_object (&mgr->top_mi); g_clear_object (&mgr->session_dbus); @@ -248,47 +246,11 @@ session_menu_mgr_class_init (SessionMenuMgrClass * klass) object_class->dispose = session_menu_mgr_dispose; } -/*** -**** UPower Proxy: -**** -**** 1. While bootstrapping, we invoke the AllowSuspend and AllowHibernate -**** methods to find out whether or not those features are allowed. -**** 2. While bootstrapping, we get the CanSuspend and CanHibernate properties -**** and also listen for property changes. -**** 3. These four values are used to set suspend and hibernate's visibility. -**** -***/ - -static void -on_upower_properties_changed (SessionMenuMgr * mgr) +static gboolean +can_perform_operation (gchar * permission) { - gboolean need_refresh = FALSE; - - if (mgr->upower_proxy != NULL) - { - gboolean b; - - /* suspend */ - b = dbus_upower_get_can_suspend (mgr->upower_proxy); - if (mgr->can_suspend != b) - { - mgr->can_suspend = b; - need_refresh = TRUE; - } - - /* hibernate */ - b = dbus_upower_get_can_hibernate (mgr->upower_proxy); - if (mgr->can_hibernate != b) - { - mgr->can_hibernate = b; - need_refresh = TRUE; - } - } - - if (need_refresh) - { - update_session_menuitems (mgr); - } + return g_strcmp0 ("yes", permission) == 0 || + g_strcmp0 ("allowed", permission) == 0; } static void @@ -297,48 +259,55 @@ init_upower_proxy (SessionMenuMgr * mgr) /* default values */ mgr->can_suspend = TRUE; mgr->can_hibernate = TRUE; - mgr->allow_suspend = TRUE; - mgr->allow_hibernate = TRUE; + + gchar * can_suspend; + gchar * can_hibernate; mgr->cancellable = g_cancellable_new (); GError * error = NULL; - mgr->upower_proxy = dbus_upower_proxy_new_for_bus_sync ( + mgr->login1_manager_proxy = login1_manager_proxy_new_for_bus_sync ( G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, - UPOWER_ADDRESS, - UPOWER_PATH, + LOGIN1_MANAGER_ADDRESS, + LOGIN1_MANAGER_PATH, NULL, &error); if (error != NULL) { - g_warning ("Error creating upower proxy: %s", error->message); + g_warning ("Error creating logind proxy: %s", error->message); g_clear_error (&error); } else { - dbus_upower_call_suspend_allowed_sync (mgr->upower_proxy, - &mgr->allow_suspend, - NULL, - &error); + login1_manager_call_can_suspend_sync (mgr->login1_manager_proxy, + &can_suspend, + NULL, + &error); if (error != NULL) { g_warning ("%s: %s", G_STRFUNC, error->message); g_clear_error (&error); } - - dbus_upower_call_hibernate_allowed_sync (mgr->upower_proxy, - &mgr->allow_hibernate, - NULL, - &error); + else + { + mgr->can_suspend = can_perform_operation (can_suspend); + } + + login1_manager_call_can_suspend_sync (mgr->login1_manager_proxy, + &can_hibernate, + NULL, + &error); if (error != NULL) { g_warning ("%s: %s", G_STRFUNC, error->message); g_clear_error (&error); } + else + { + mgr->can_hibernate = can_perform_operation (can_hibernate); + } - g_signal_connect_swapped (mgr->upower_proxy, "changed", - G_CALLBACK(on_upower_properties_changed), mgr); } } @@ -505,13 +474,9 @@ update_session_menuitems (SessionMenuMgr * mgr) && !g_settings_get_boolean (s, "suppress-logout-menuitem"); mi_set_visible (mgr->logout_mi, v); - v = mgr->can_suspend - && mgr->allow_suspend; - mi_set_visible (mgr->suspend_mi, v); + mi_set_visible (mgr->suspend_mi, mgr->can_suspend); - v = mgr->can_hibernate - && mgr->allow_hibernate; - mi_set_visible (mgr->hibernate_mi, v); + mi_set_visible (mgr->hibernate_mi, mgr->can_hibernate); v = (!mgr->shell_mode || g_settings_get_boolean (s, "suppress-logout-restart-shutdown")) && (HAVE_RESTART_CMD || mgr->shell_mode) @@ -1143,9 +1108,10 @@ action_func_suspend (SessionMenuMgr * mgr) { GError * error = NULL; - dbus_upower_call_suspend_sync (mgr->upower_proxy, - mgr->cancellable, - &error); + login1_manager_call_suspend_sync (mgr->login1_manager_proxy, + TRUE, + mgr->cancellable, + &error); if (error != NULL) { @@ -1159,9 +1125,10 @@ action_func_hibernate (SessionMenuMgr * mgr) { GError * error = NULL; - dbus_upower_call_hibernate_sync (mgr->upower_proxy, - mgr->cancellable, - &error); + login1_manager_call_hibernate_sync (mgr->login1_manager_proxy, + TRUE, + mgr->cancellable, + &error); if (error != NULL) { @@ -1346,10 +1313,6 @@ session_menu_mgr_new (SessionDbus * session_dbus, update_user_menuitems (mgr); build_session_menuitems (mgr); - /* After we have the session menu items built we can look to - align them with UPower */ - on_upower_properties_changed (mgr); - return mgr; } -- cgit v1.2.3