aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am16
-rw-r--r--src/session-menu-mgr.c125
-rw-r--r--src/upower.xml309
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>