[gnome-packagekit] Use DeviceKit-power rather than gnome-power-manager to get the on-battery status, as this interface



commit f59973b210839fc9ecd52dad7e74a82565ecb1c7
Author: Richard Hughes <richard hughsie com>
Date:   Thu May 7 12:42:59 2009 +0100

    Use DeviceKit-power rather than gnome-power-manager to get the on-battery status, as this interface is not present in 2-27
---
 configure.ac                     |    8 +++
 contrib/gnome-packagekit.spec.in |    2 +
 src/Makefile.am                  |    3 +
 src/gpk-auto-refresh.c           |  122 +++++++++++--------------------------
 4 files changed, 49 insertions(+), 86 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4da70ac..b120124 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,6 +88,8 @@ POLKIT_GNOME_REQUIRED=0.8
 UNIQUE_REQUIRED=1.0.0
 GNOME_MENUS_REQUIRED=2.24.1
 GIO_REQUIRED=2.18.0
+DEVKIT_REQUIRED=001
+DEVKIT_POWER_REQUIRED=007
 CANBERRA_REQUIRED=0.10
 
 dnl ---------------------------------------------------------------------------
@@ -155,6 +157,12 @@ PKG_CHECK_MODULES(UNIQUE, \
 AC_SUBST(UNIQUE_CFLAGS)
 AC_SUBST(UNIQUE_LIBS)
 
+PKG_CHECK_MODULES(DEVKIT, [
+ devkit-gobject >= $DEVKIT_REQUIRED
+ devkit-power-gobject >= $DEVKIT_POWER_REQUIRED])
+AC_SUBST(DEVKIT_CFLAGS)
+AC_SUBST(DEVKIT_LIBS)
+
 PKG_CHECK_MODULES(CANBERRA, libcanberra-gtk >= $CANBERRA_REQUIRED)
 AC_SUBST(CANBERRA_CFLAGS)
 AC_SUBST(CANBERRA_LIBS)
diff --git a/contrib/gnome-packagekit.spec.in b/contrib/gnome-packagekit.spec.in
index ffbfd8b..2263341 100644
--- a/contrib/gnome-packagekit.spec.in
+++ b/contrib/gnome-packagekit.spec.in
@@ -26,6 +26,7 @@ Requires:  PackageKit-gtk-module >= %{packagekit_version}
 Requires:  shared-mime-info
 Requires:  iso-codes
 Requires:  libcanberra
+Requires:  DeviceKit-power >= 007
 Requires(post):   scrollkeeper
 Requires(pre):    GConf2
 Requires(post):   GConf2
@@ -56,6 +57,7 @@ BuildRequires: intltool
 BuildRequires: xorg-x11-proto-devel
 BuildRequires: fontconfig-devel
 BuildRequires: libcanberra-devel
+BuildRequires: DeviceKit-power-devel >= 007
 
 %description
 gnome-packagekit provides session applications for the PackageKit API.
diff --git a/src/Makefile.am b/src/Makefile.am
index e3504d0..57302d2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,6 +14,8 @@ INCLUDES =						\
 	$(POLKIT_GNOME_CFLAGS)				\
 	$(GTK_CFLAGS)					\
 	$(GNOME_MENUS_CFLAGS)				\
+	-DI_KNOW_THE_DEVICEKIT_POWER_API_IS_SUBJECT_TO_CHANGE \
+	$(DEVKIT_CFLAGS)				\
 	$(CANBERRA_CFLAGS)				\
 	-DBINDIR=\"$(bindir)\"			 	\
 	-DDATADIR=\"$(datadir)\"			\
@@ -115,6 +117,7 @@ shared_LIBS =						\
 	$(UNIQUE_LIBS)					\
 	$(POLKIT_GNOME_LIBS)				\
 	$(GNOME_MENUS_LIBS)				\
+	$(DEVKIT_LIBS)					\
 	$(CANBERRA_LIBS)				\
 	$(NULL)
 
diff --git a/src/gpk-auto-refresh.c b/src/gpk-auto-refresh.c
index 7f345af..eb4fba8 100644
--- a/src/gpk-auto-refresh.c
+++ b/src/gpk-auto-refresh.c
@@ -36,6 +36,7 @@
 #include <dbus/dbus-glib.h>
 #include <gconf/gconf-client.h>
 #include <packagekit-glib/packagekit.h>
+#include <devkit-power-gobject/devicekit-power.h>
 
 #include "egg-debug.h"
 #include "egg-string.h"
@@ -55,12 +56,6 @@ static void     gpk_auto_refresh_finalize	(GObject            *object);
 #define GS_DBUS_PATH				"/org/gnome/ScreenSaver"
 #define GS_DBUS_INTERFACE			"org.gnome.ScreenSaver"
 
-#define GPM_DBUS_SERVICE			"org.freedesktop.PowerManagement"
-#define GPM_DBUS_PATH				"/org/freedesktop/PowerManagement"
-#define GPM_DBUS_PATH_INHIBIT			"/org/freedesktop/PowerManagement/Inhibit"
-#define GPM_DBUS_INTERFACE			"org.freedesktop.PowerManagement"
-#define GPM_DBUS_INTERFACE_INHIBIT		"org.freedesktop.PowerManagement.Inhibit"
-
 /*
  * at startup, after a small delay, force a GetUpdates call
  * every hour (or any event) check:
@@ -77,10 +72,9 @@ struct GpkAutoRefreshPrivate
 	guint			 force_get_updates_login_timeout_id;
 	guint			 timeout_id;
 	EggDbusMonitor		*monitor_gs;
-	EggDbusMonitor		*monitor_gpm;
+	DkpClient		*client;
 	GConfClient		*gconf_client;
 	DBusGProxy		*proxy_gs;
-	DBusGProxy		*proxy_gpm;
 	DBusGConnection		*connection;
 	PkControl		*control;
 };
@@ -448,20 +442,6 @@ gpk_auto_refresh_idle_cb (DBusGProxy *proxy, gboolean is_idle, GpkAutoRefresh *a
 }
 
 /**
- * gpk_auto_refresh_on_battery_cb:
- **/
-static void
-gpk_auto_refresh_on_battery_cb (DBusGProxy *proxy, gboolean on_battery, GpkAutoRefresh *arefresh)
-{
-	g_return_if_fail (GPK_IS_AUTO_REFRESH (arefresh));
-
-	egg_debug ("setting on_battery %i", on_battery);
-	arefresh->priv->on_battery = on_battery;
-	if (!arefresh->priv->on_battery)
-		gpk_auto_refresh_change_state (arefresh);
-}
-
-/**
  * gpk_auto_refresh_get_on_battery:
  **/
 gboolean
@@ -534,59 +514,6 @@ gpk_auto_refresh_timeout_cb (gpointer user_data)
 }
 
 /**
- * pk_connection_gpm_changed_cb:
- **/
-static void
-pk_connection_gpm_changed_cb (EggDbusMonitor *egg_dbus_monitor, gboolean connected, GpkAutoRefresh *arefresh)
-{
-	GError *error = NULL;
-	gboolean on_battery;
-	gboolean ret;
-
-	g_return_if_fail (GPK_IS_AUTO_REFRESH (arefresh));
-
-	egg_debug ("gnome-power-manager connection-changed: %i", connected);
-
-	/* is this valid? */
-	if (!connected) {
-		if (arefresh->priv->proxy_gpm != NULL) {
-			g_object_unref (arefresh->priv->proxy_gpm);
-			arefresh->priv->proxy_gpm = NULL;
-		}
-		return;
-	}
-
-	/* use gnome-power-manager for the battery detection */
-	arefresh->priv->proxy_gpm = dbus_g_proxy_new_for_name_owner (arefresh->priv->connection,
-					  GPM_DBUS_SERVICE, GPM_DBUS_PATH, GPM_DBUS_INTERFACE, &error);
-	if (error != NULL) {
-		egg_warning ("Cannot connect to gnome-power-manager: %s", error->message);
-		g_error_free (error);
-		return;
-	}
-
-	/* setup callbacks and get GetOnBattery if we could connect to g-p-m */
-	dbus_g_proxy_add_signal (arefresh->priv->proxy_gpm, "OnBatteryChanged",
-				 G_TYPE_BOOLEAN, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (arefresh->priv->proxy_gpm, "OnBatteryChanged",
-				     G_CALLBACK (gpk_auto_refresh_on_battery_cb),
-				     arefresh, NULL);
-	/* coldplug the battery state */
-	ret = dbus_g_proxy_call (arefresh->priv->proxy_gpm, "GetOnBattery", &error,
-				 G_TYPE_INVALID,
-				 G_TYPE_BOOLEAN, &on_battery,
-				 G_TYPE_INVALID);
-	if (error != NULL) {
-		printf ("DEBUG: ERROR: %s\n", error->message);
-		g_error_free (error);
-	}
-	if (ret) {
-		arefresh->priv->on_battery = on_battery;
-		egg_debug ("setting on battery %i", on_battery);
-	}
-}
-
-/**
  * pk_connection_gs_changed_cb:
  **/
 static void
@@ -625,6 +552,30 @@ pk_connection_gs_changed_cb (EggDbusMonitor *egg_dbus_monitor, gboolean connecte
 }
 
 /**
+ * gpk_auto_refresh_client_changed_cb:
+ **/
+static void
+gpk_auto_refresh_client_changed_cb (DkpClient *client, GpkAutoRefresh *arefresh)
+{
+	gboolean on_battery;
+
+	g_return_if_fail (GPK_IS_AUTO_REFRESH (arefresh));
+
+	/* get the on-battery state */
+	on_battery = dkp_client_on_battery (arefresh->priv->client);
+	if (on_battery == arefresh->priv->on_battery) {
+		egg_debug ("same state as before, ignoring");
+		return;
+	}
+
+	/* save in local cache */
+	egg_debug ("setting on_battery %i", on_battery);
+	arefresh->priv->on_battery = on_battery;
+	if (!on_battery)
+		gpk_auto_refresh_change_state (arefresh);
+}
+
+/**
  * gpk_auto_refresh_init:
  * @auto_refresh: This class instance
  **/
@@ -641,9 +592,7 @@ gpk_auto_refresh_init (GpkAutoRefresh *arefresh)
 	arefresh->priv->force_get_updates_login = FALSE;
 	arefresh->priv->timeout_id = 0;
 	arefresh->priv->force_get_updates_login_timeout_id = 0;
-
 	arefresh->priv->proxy_gs = NULL;
-	arefresh->priv->proxy_gpm = NULL;
 
 	/* we need to know the updates frequency */
 	arefresh->priv->gconf_client = gconf_client_get_default ();
@@ -670,18 +619,21 @@ gpk_auto_refresh_init (GpkAutoRefresh *arefresh)
 		return;
 	}
 
+	/* use a DkpClient */
+	arefresh->priv->client = dkp_client_new ();
+	g_signal_connect (arefresh->priv->client, "changed",
+			  G_CALLBACK (gpk_auto_refresh_client_changed_cb), arefresh);
+
+	/* get the battery state */
+	arefresh->priv->on_battery = dkp_client_on_battery (arefresh->priv->client);
+	egg_debug ("setting on battery %i", arefresh->priv->on_battery);
+
 	/* watch gnome-screensaver */
 	arefresh->priv->monitor_gs = egg_dbus_monitor_new ();
 	g_signal_connect (arefresh->priv->monitor_gs, "connection-changed",
 			  G_CALLBACK (pk_connection_gs_changed_cb), arefresh);
 	egg_dbus_monitor_assign (arefresh->priv->monitor_gs, EGG_DBUS_MONITOR_SESSION, GS_DBUS_SERVICE);
 
-	/* watch gnome-power-manager */
-	arefresh->priv->monitor_gpm = egg_dbus_monitor_new ();
-	g_signal_connect (arefresh->priv->monitor_gpm, "connection-changed",
-			  G_CALLBACK (pk_connection_gpm_changed_cb), arefresh);
-	egg_dbus_monitor_assign (arefresh->priv->monitor_gpm, EGG_DBUS_MONITOR_SESSION, GPM_DBUS_SERVICE);
-
 	/* we check this in case we miss one of the async signals */
 	g_timeout_add_seconds (GPK_AUTO_REFRESH_PERIODIC_CHECK, gpk_auto_refresh_timeout_cb, arefresh);
 
@@ -710,14 +662,12 @@ gpk_auto_refresh_finalize (GObject *object)
 
 	g_object_unref (arefresh->priv->control);
 	g_object_unref (arefresh->priv->monitor_gs);
-	g_object_unref (arefresh->priv->monitor_gpm);
 	g_object_unref (arefresh->priv->gconf_client);
+	g_object_unref (arefresh->priv->client);
 
 	/* only unref the proxies if they were ever set */
 	if (arefresh->priv->proxy_gs != NULL)
 		g_object_unref (arefresh->priv->proxy_gs);
-	if (arefresh->priv->proxy_gpm != NULL)
-		g_object_unref (arefresh->priv->proxy_gpm);
 
 	G_OBJECT_CLASS (gpk_auto_refresh_parent_class)->finalize (object);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]