[gnome-packagekit] Use DeviceKit-power rather than gnome-power-manager to get the on-battery status, as this interface
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-packagekit] Use DeviceKit-power rather than gnome-power-manager to get the on-battery status, as this interface
- Date: Thu, 7 May 2009 07:44:00 -0400 (EDT)
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]