← Back to team overview

ayatana-commits team mailing list archive

[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