ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #00932
[Merge] lp:~pitti/indicator-session/libupower-glib into lp:indicator-session
Martin Pitt has proposed merging lp:~pitti/indicator-session/libupower-glib into lp:indicator-session.
Requested reviews:
Indicator Applet Developers (indicator-applet-developers)
Related bugs:
#432598 Do not show suspend/hiberate related UI if suspend is disabled in polkit
https://bugs.launchpad.net/bugs/432598
DeviceKit-power, and now upower provide a very convenient client-side library, which also respects per-user PolicyKit privileges (see bug 432598).
This branch provides the port from DeviceKit-power D-Bus to libupower-glib.
I'd like to upload this into lucid really soon, to get it into alpha-3. Can you please merge this and do a new upstream release?
Thanks!
--
https://code.launchpad.net/~pitti/indicator-session/libupower-glib/+merge/19392
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'configure.ac'
--- configure.ac 2010-02-11 16:47:17 +0000
+++ configure.ac 2010-02-16 11:12:17 +0000
@@ -29,6 +29,7 @@
INDICATOR_REQUIRED_VERSION=0.3.0
DBUSMENUGTK_REQUIRED_VERSION=0.2.2
POLKIT_REQUIRED_VERSION=0.92
+UPOWER_REQUIRED_VERSION=0.9
PKG_CHECK_MODULES(APPLET, gtk+-2.0 >= $GTK_REQUIRED_VERSION
indicator >= $INDICATOR_REQUIRED_VERSION
@@ -61,6 +62,10 @@
AC_SUBST(GCONF_CFLAGS)
AC_SUBST(GCONF_LIBS)
+PKG_CHECK_MODULES(UPOWER, upower-glib >= $UPOWER_REQUIRED_VERSION)
+AC_SUBST(UPOWER_CFLAGS)
+AC_SUBST(UPOWER_LIBS)
+
###########################
# Check to see if we're local
###########################
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2010-01-06 05:35:11 +0000
+++ src/Makefile.am 2010-02-16 11:12:17 +0000
@@ -46,8 +46,8 @@
users-service-dbus.h \
users-service-dbus.c \
users-service-marshal.c
-indicator_session_service_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GCONF_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall -Werror
-indicator_session_service_LDADD = $(SESSIONSERVICE_LIBS) $(GCONF_LIBS)
+indicator_session_service_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GCONF_CFLAGS) $(UPOWER_CFLAGS) -DLIBEXECDIR=\"$(libexecdir)\" -Wall -Werror
+indicator_session_service_LDADD = $(SESSIONSERVICE_LIBS) $(GCONF_LIBS) $(UPOWER_LIBS)
###############
# Other Stuff
=== modified file 'src/session-service.c'
--- src/session-service.c 2010-02-08 22:46:35 +0000
+++ src/session-service.c 2010-02-16 11:12:17 +0000
@@ -31,6 +31,8 @@
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
+#include <upower.h>
+
#include <libdbusmenu-glib/server.h>
#include <libdbusmenu-glib/menuitem.h>
#include <libdbusmenu-glib/client.h>
@@ -44,10 +46,6 @@
#include "users-service-dbus.h"
#include "lock-helper.h"
-#define DKP_ADDRESS "org.freedesktop.DeviceKit.Power"
-#define DKP_OBJECT "/org/freedesktop/DeviceKit/Power"
-#define DKP_INTERFACE "org.freedesktop.DeviceKit.Power"
-
#define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch"
#define LOCKDOWN_DIR "/desktop/gnome/lockdown"
@@ -72,11 +70,7 @@
static DbusmenuMenuitem * root_menuitem = NULL;
static GMainLoop * mainloop = NULL;
-static DBusGProxy * dkp_main_proxy = NULL;
-static DBusGProxy * dkp_prop_proxy = NULL;
-
-static DBusGProxyCall * suspend_call = NULL;
-static DBusGProxyCall * hibernate_call = NULL;
+static UpClient * up_client = NULL;
static DbusmenuMenuitem * hibernate_mi = NULL;
static DbusmenuMenuitem * suspend_mi = NULL;
@@ -131,15 +125,6 @@
}
}
-/* A return from the command to sleep the system. Make sure
- that we unthrottle the screensaver. */
-static void
-sleep_response (DBusGProxy * proxy, DBusGProxyCall * call, gpointer data)
-{
- screensaver_unthrottle();
- return;
-}
-
/* Let's put this machine to sleep, with some info on how
it should sleep. */
static void
@@ -147,105 +132,41 @@
{
gchar * type = (gchar *)userdata;
- if (dkp_main_proxy == NULL) {
- g_warning("Can not %s as no DeviceKit Power Proxy", type);
+ if (up_client == NULL) {
+ g_warning("Can not %s as we have no upower client", type);
}
screensaver_throttle(type);
lock_screen(NULL, 0, NULL);
- dbus_g_proxy_begin_call(dkp_main_proxy,
- type,
- sleep_response,
- NULL,
- NULL,
- G_TYPE_INVALID);
-
- return;
-}
-
-/* A response to getting the suspend property */
-static void
-suspend_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata)
-{
- suspend_call = NULL;
-
- GValue candoit = {0};
- GError * error = NULL;
- dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &candoit, G_TYPE_INVALID);
- if (error != NULL) {
- g_warning("Unable to check suspend: %s", error->message);
- g_error_free(error);
- return;
- }
- g_debug("Got Suspend: %s", g_value_get_boolean(&candoit) ? "true" : "false");
-
- if (suspend_mi != NULL) {
- dbusmenu_menuitem_property_set_value(suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, &candoit);
- }
-
- return;
-}
-
-/* Response to getting the hibernate property */
-static void
-hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata)
-{
- hibernate_call = NULL;
-
- GValue candoit = {0};
- GError * error = NULL;
- dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &candoit, G_TYPE_INVALID);
- if (error != NULL) {
- g_warning("Unable to check hibernate: %s", error->message);
- g_error_free(error);
- return;
- }
- g_debug("Got Hibernate: %s", g_value_get_boolean(&candoit) ? "true" : "false");
-
- if (suspend_mi != NULL) {
- dbusmenu_menuitem_property_set_value(hibernate_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, &candoit);
- }
-
- return;
-}
+ if (strcmp(type, "Suspend") == 0) {
+ up_client_suspend_sync(up_client, NULL, NULL);
+ } else {
+ up_client_hibernate_sync(up_client, NULL, NULL);
+ }
+ screensaver_unthrottle();
+
+ return;
+}
+
/* A signal that we need to recheck to ensure we can still
hibernate and/or suspend */
static void
-dpk_changed_cb (DBusGProxy * proxy, gpointer user_data)
+up_changed_cb (UpClient * client, gpointer user_data)
{
- /* Start Async call to see if we can hibernate */
- if (suspend_call == NULL) {
- suspend_call = dbus_g_proxy_begin_call(dkp_prop_proxy,
- "Get",
- suspend_prop_cb,
- NULL,
- NULL,
- G_TYPE_STRING,
- DKP_INTERFACE,
- G_TYPE_STRING,
- "can-suspend",
- G_TYPE_INVALID,
- G_TYPE_VALUE,
- G_TYPE_INVALID);
- }
-
- /* Start Async call to see if we can suspend */
- if (hibernate_call == NULL) {
- hibernate_call = dbus_g_proxy_begin_call(dkp_prop_proxy,
- "Get",
- hibernate_prop_cb,
- NULL,
- NULL,
- G_TYPE_STRING,
- DKP_INTERFACE,
- G_TYPE_STRING,
- "can-hibernate",
- G_TYPE_INVALID,
- G_TYPE_VALUE,
- G_TYPE_INVALID);
- }
+ GValue candoit = {0};
+ g_value_init (&candoit, G_TYPE_BOOLEAN);
+
+ /* can we suspend? */
+ g_value_set_boolean(&candoit, up_client_get_can_suspend(up_client));
+ dbusmenu_menuitem_property_set_value(suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, &candoit);
+ g_debug("upower changed: can suspend: %s", g_value_get_boolean(&candoit) ? "true" : "false");
+
+ /* can we hibernate? */
+ g_value_set_boolean(&candoit, up_client_get_can_hibernate(up_client));
+ dbusmenu_menuitem_property_set_value(hibernate_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, &candoit);
+ g_debug("upower changed: can hibernate: %s", g_value_get_boolean(&candoit) ? "true" : "false");
return;
}
@@ -254,39 +175,17 @@
DKp checking. We're even setting up the calls for the props
we need */
static void
-setup_dkp (void) {
- DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL);
- g_return_if_fail(bus != NULL);
-
- if (dkp_main_proxy == NULL) {
- dkp_main_proxy = dbus_g_proxy_new_for_name(bus,
- DKP_ADDRESS,
- DKP_OBJECT,
- DKP_INTERFACE);
- }
- g_return_if_fail(dkp_main_proxy != NULL);
-
- if (dkp_prop_proxy == NULL) {
- dkp_prop_proxy = dbus_g_proxy_new_for_name(bus,
- DKP_ADDRESS,
- DKP_OBJECT,
- DBUS_INTERFACE_PROPERTIES);
- }
- g_return_if_fail(dkp_prop_proxy != NULL);
+setup_up (void) {
+ up_client = up_client_new();
+ g_return_if_fail(up_client != NULL);
/* Connect to changed signal */
- dbus_g_proxy_add_signal(dkp_main_proxy,
- "Changed",
- G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(dkp_main_proxy,
- "Changed",
- G_CALLBACK(dpk_changed_cb),
- NULL,
- NULL);
+ g_signal_connect (up_client, "changed",
+ G_CALLBACK(up_changed_cb),
+ NULL);
/* Force an original "changed" event */
- dpk_changed_cb(dkp_main_proxy, NULL);
+ up_changed_cb(up_client, NULL);
return;
}
@@ -639,7 +538,7 @@
G_CALLBACK (user_removed),
root_menuitem);
- setup_dkp();
+ setup_up();
DbusmenuServer * server = dbusmenu_server_new(INDICATOR_SESSION_DBUS_OBJECT);
dbusmenu_server_set_root(server, root_menuitem);
Follow ups