diff options
-rw-r--r-- | src/Makefile.am | 16 | ||||
-rw-r--r-- | src/session-menu-mgr.c | 125 | ||||
-rw-r--r-- | src/upower.xml | 309 |
3 files changed, 45 insertions, 405 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 976783f..1ab9b9b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -93,17 +93,6 @@ $(dbus_user_sources): org.freedesktop.Accounts.User.xml --generate-c-code dbus-user \ $^ -dbus_upower_sources = \ - dbus-upower.c \ - dbus-upower.h - -$(dbus_upower_sources): upower.xml - $(AM_V_GEN) gdbus-codegen \ - --interface-prefix org.freedesktop \ - --generate-c-code dbus-upower \ - --c-namespace DBus \ - $^ - gen-%.xml.c: %.xml @echo "Building $@ from $<" @echo "const char * _$(subst -,_,$(subst .,_,$(basename $(notdir $<)))) = " > $@ @@ -124,7 +113,6 @@ indicator_session_service_SOURCES = \ $(dbus_login1_user_sources) \ $(dbus_login1_session_sources) \ $(dbus_display_manager_sources) \ - $(dbus_upower_sources) \ $(dbus_user_sources) \ session-service.c \ session-dbus.c \ @@ -189,7 +177,6 @@ BUILT_SOURCES = \ $(dbus_login1_user_sources) \ $(dbus_login1_session_sources) \ $(dbus_display_manager_sources) \ - $(dbus_upower_sources) \ $(dbus_user_sources) \ gen-session-dbus.xml.c \ gen-session-dbus.xml.h @@ -201,7 +188,6 @@ EXTRA_DIST += \ org.freedesktop.login1.Manager.xml \ org.freedesktop.login1.Session.xml \ org.freedesktop.login1.User.xml \ - session-dbus.xml \ - upower.xml + session-dbus.xml CLEANFILES += $(BUILT_SOURCES) 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 <http://www.gnu.org/licenses/>. #include <libdbusmenu-glib/client.h> #include <libdbusmenu-gtk/menuitem.h> -#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 <http://www.gnu.org/licenses/>. #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; } diff --git a/src/upower.xml b/src/upower.xml deleted file mode 100644 index 18d5fbd..0000000 --- a/src/upower.xml +++ /dev/null @@ -1,309 +0,0 @@ -<!DOCTYPE node PUBLIC -"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" -"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> -<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"> - - <interface name="org.freedesktop.UPower"> - <doc:doc> - <doc:description> - <doc:para> - The DeviceKit-power service is available via the system message - bus. To access the service, use - the <doc:tt>org.freedesktop.UPower</doc:tt> interface on - the <doc:tt>/org/freedesktop/UPower</doc:tt> object on - the D-Bus system bus service with the well-known - name <doc:tt>org.freedesktop.UPower</doc:tt>. - </doc:para> - <doc:para> - <doc:example language="shell" title="simple example"> - <doc:code> -$ dbus-send --print-reply \ - --system \ - --dest=org.freedesktop.UPower \ - /org/freedesktop/UPower \ - org.freedesktop.UPower.EnumerateDevices - -method return sender=:1.386 -> dest=:1.451 reply_serial=2 - array [ - object path "/org/freedesktop/UPower/devices/line_power_AC" - object path "/org/freedesktop/UPower/devices/battery_BAT0" - ] - </doc:code> - </doc:example> - </doc:para> - </doc:description> - </doc:doc> - - <!-- ************************************************************ --> - - <method name="EnumerateDevices"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <arg name="devices" direction="out" type="ao"> - <doc:doc><doc:summary>An array of object paths for devices.</doc:summary></doc:doc> - </arg> - - <doc:doc> - <doc:description> - <doc:para> - Enumerate all power objects on the system. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <signal name="DeviceAdded"> - <arg name="device" type="o"> - <doc:doc><doc:summary>Object path of device that was added.</doc:summary></doc:doc> - </arg> - - <doc:doc> - <doc:description> - <doc:para> - Emitted when a device is added. - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <signal name="DeviceRemoved"> - <arg name="device" type="o"> - <doc:doc><doc:summary>Object path of device that was removed.</doc:summary></doc:doc> - </arg> - - <doc:doc> - <doc:description> - <doc:para> - Emitted when a device is removed. - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <signal name="DeviceChanged"> - <arg name="device" type="s"> - <doc:doc><doc:summary>Object path of device that was changed.</doc:summary></doc:doc> - </arg> - - <doc:doc> - <doc:description> - <doc:para> - Emitted when a device changed. - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <signal name="Changed"> - <doc:doc> - <doc:description> - <doc:para> - Emitted when one or more properties on the object changes. - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <signal name="Sleeping"> - <doc:doc> - <doc:description> - <doc:para> - This signal is sent when the session is about to be suspended or - hibernated. - Session and system programs have one second to do anything required - before the sleep action is taken (such as sending out Avahi or - Jabber messages). - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <signal name="Resuming"> - <doc:doc> - <doc:description> - <doc:para> - This signal is sent when the session has just returned from - Suspend() or Hibernate(). - Session and system programs can then do anything required (such as - sending out Avahi or Jabber messages). - </doc:para> - </doc:description> - </doc:doc> - </signal> - - <!-- ************************************************************ --> - - <method name="AboutToSleep"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <doc:doc> - <doc:description> - <doc:para> - This method tells UPower that the Suspend() or Hibernate() method - is about to be called. - This allows UPower to emit the Suspending signal whilst - session activities are happening that have to be done before the - suspend process is started. - </doc:para> - <doc:para> - This method would typically be called by the session power - management daemon, before it locks the screen and waits for the - screen to fade to black. - The session power management component would then call Suspend() or - Hibernate() when these syncronous tasks have completed. - </doc:para> - <doc:para> - If this method is not called than nothing bad will happen and - Suspend() or Hibernate() will block for the required second. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <method name="Suspend"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <doc:doc> - <doc:description> - <doc:para> - Suspends the computer into a low power state. - System state is not preserved if the power is lost. - </doc:para> - <doc:para> - If AboutToRequestSleep() has not been called then UPower will send - the Sleeping() signal and block for one second. - </doc:para> - <doc:para> - If AboutToRequestSleep() has been called less than one second - before this method is called then UPower will block for the - remaining time to complete one second of delay. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <method name="SuspendAllowed"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <arg name="allowed" direction="out" type="b"> - <doc:doc><doc:summary>TRUE if allowed, otherwise FALSE</doc:summary></doc:doc> - </arg> - <doc:doc> - <doc:description> - <doc:para> - Check if the caller has (or can get) the PolicyKit privilege to call - <doc:ref type="method" to="Power.Suspend">Suspend</doc:ref>. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <method name="Hibernate"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <doc:doc> - <doc:description> - <doc:para> - Hibernates the computer into a low power state. - System state is preserved if the power is lost. - </doc:para> - <doc:para> - If AboutToRequestSleep() has not been called then UPower will send - the Sleeping() signal and block for one second. - </doc:para> - <doc:para> - If AboutToRequestSleep() has been called less than one second - before this method is called then UPower will block for the - remaining time to complete one second of delay. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <method name="HibernateAllowed"> - <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> - <arg name="allowed" direction="out" type="b"> - <doc:doc><doc:summary>TRUE if allowed, otherwise FALSE</doc:summary></doc:doc> - </arg> - <doc:doc> - <doc:description> - <doc:para> - Check if the caller has (or can get) the PolicyKit privilege to call - <doc:ref type="method" to="Power.Hibernate">Hibernate</doc:ref>. - </doc:para> - </doc:description> - </doc:doc> - </method> - - <!-- ************************************************************ --> - - <property name="DaemonVersion" type="s" access="read"> - <doc:doc><doc:description><doc:para> - Version of the running daemon, e.g. <doc:tt>002</doc:tt>. - </doc:para></doc:description></doc:doc> - </property> - - <property name="CanSuspend" type="b" access="read"> - <doc:doc><doc:description><doc:para> - Whether the system is able to suspend. - </doc:para></doc:description></doc:doc> - </property> - - <property name="CanHibernate" type="b" access="read"> - <doc:doc><doc:description><doc:para> - Whether the system is able to hibernate. - </doc:para></doc:description></doc:doc> - </property> - - <property name="OnBattery" type="b" access="read"> - <doc:doc><doc:description><doc:para> - Indicates whether the system is running on battery power. - This property is provided for convenience. - </doc:para></doc:description></doc:doc> - </property> - - <property name="OnLowBattery" type="b" access="read"> - <doc:doc><doc:description><doc:para> - Indicates whether the system is running on battery power and if the battery is critically low. - This property is provided for convenience. - </doc:para></doc:description></doc:doc> - </property> - - <property name="LidIsClosed" type="b" access="read"> - <doc:doc> - <doc:description> - <doc:para> - Indicates if the laptop lid is closed where the display cannot be seen. - </doc:para> - </doc:description> - </doc:doc> - </property> - - <property name="LidIsPresent" type="b" access="read"> - <doc:doc> - <doc:description> - <doc:para> - If the system has a lid device. - </doc:para> - </doc:description> - </doc:doc> - </property> - - </interface> - -</node> |