[Xfce4-commits] <xfce4-power-manager:master> Added runtime check for upower and devkit power, as well as devkit-disks and udisks, as xfpm uses the disk service to spin down hard disks.

Ali Abdallah noreply at xfce.org
Tue Feb 2 11:04:01 CET 2010


Updating branch refs/heads/master
         to d20a7732f68506e539b6f4e5d27270e082f4fb8c (commit)
       from f1c3970a6ff1250c88c3db45d14ae02f5da14edc (commit)

commit d20a7732f68506e539b6f4e5d27270e082f4fb8c
Author: Ali Abdallah <aliov at xfce.org>
Date:   Tue Feb 2 10:58:28 2010 +0100

    Added runtime check for upower and devkit power, as well as devkit-disks and udisks, as xfpm
    uses the disk service to spin down hard disks.

 src/xfpm-battery.c      |    7 ++-
 src/xfpm-battery.h      |    1 +
 src/xfpm-disks.c        |   19 +++++--
 src/xfpm-manager.c      |    3 +-
 src/xfpm-power-common.c |    1 +
 src/xfpm-power-common.h |   32 +++++++------
 src/xfpm-power-info.c   |  102 ++++++++++++++++++++++++++++-----------
 src/xfpm-power.c        |  122 ++++++++++++++++++++++++++++++++++------------
 src/xfpm-power.h        |    6 +-
 9 files changed, 207 insertions(+), 86 deletions(-)

diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
index dea3a90..7926f5c 100644
--- a/src/xfpm-battery.c
+++ b/src/xfpm-battery.c
@@ -64,6 +64,8 @@ struct XfpmBatteryPrivate
     guint 		    percentage;
     gint64		    time_to_full;
     gint64		    time_to_empty;
+
+    const gchar            *backend_iface_device; /*upower or devkit*/
     
     gulong		    sig;
 };
@@ -510,7 +512,8 @@ xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
 {
     GHashTable *props;
     
-    props = xfpm_power_get_interface_properties (battery->priv->proxy_prop, DKP_IFACE_DEVICE);
+    props = xfpm_power_get_interface_properties (battery->priv->proxy_prop, 
+						 battery->priv->backend_iface_device);
     
     if ( props )
 	xfpm_battery_refresh (battery, props);
@@ -721,12 +724,14 @@ xfpm_battery_new (void)
 void xfpm_battery_monitor_device (XfpmBattery *battery,
 				  DBusGProxy *proxy,
 				  DBusGProxy *proxy_prop,
+				  const gchar *backend_iface_device,
 				  XfpmDeviceType device_type)
 {
     battery->priv->type = device_type;
     battery->priv->proxy_prop = proxy_prop;
     battery->priv->proxy = proxy;
     battery->priv->icon_prefix = xfpm_battery_get_icon_prefix_device_enum_type (device_type);
+    battery->priv->backend_iface_device = backend_iface_device;
     
     dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID);
     dbus_g_proxy_connect_signal (proxy, "Changed",
diff --git a/src/xfpm-battery.h b/src/xfpm-battery.h
index 2d0728a..e0a54b7 100644
--- a/src/xfpm-battery.h
+++ b/src/xfpm-battery.h
@@ -58,6 +58,7 @@ GtkStatusIcon              *xfpm_battery_new             (void);
 void			    xfpm_battery_monitor_device  (XfpmBattery *battery,
 							  DBusGProxy *proxy,
 							  DBusGProxy *proxy_prop,
+							  const gchar *backend_iface_device,
 							  XfpmDeviceType device_type);
 
 XfpmDeviceType	   	    xfpm_battery_get_device_type (XfpmBattery *battery);
diff --git a/src/xfpm-disks.c b/src/xfpm-disks.c
index bde079f..dbceaad 100644
--- a/src/xfpm-disks.c
+++ b/src/xfpm-disks.c
@@ -191,10 +191,19 @@ xfpm_disks_init (XfpmDisks *disks)
     }
     
     disks->priv->proxy = dbus_g_proxy_new_for_name (disks->priv->bus,
-						    "org.freedesktop.DeviceKit.Disks",
-						    "/org/freedesktop/DeviceKit/Disks",
-						    "org.freedesktop.DeviceKit.Disks");
-						      
+						    "org.freedesktop.UDisks",
+						    "/org/freedesktop/UDisks",
+						    "org.freedesktop.UDisks");
+    
+    if ( !disks->priv->proxy )
+    {
+	g_message ("UDisks not found, trying devkit-disks");
+	disks->priv->proxy = dbus_g_proxy_new_for_name (disks->priv->bus,
+							"org.freedesktop.DeviceKit.Disks",
+							"/org/freedesktop/DeviceKit/Disks",
+							"org.freedesktop.DeviceKit.Disks");
+    }
+    
     if ( !disks->priv->proxy )
     {
 	g_warning ("Unable to create proxy for 'org.freedesktop.DeviceKit.Disks'");
@@ -202,7 +211,7 @@ xfpm_disks_init (XfpmDisks *disks)
     }
 
     disks->priv->conf = xfpm_xfconf_new ();
-    disks->priv->power  = xfpm_power_get    ();
+    disks->priv->power  = xfpm_power_get ();
     disks->priv->polkit = xfpm_polkit_get ();
 
     xfpm_disks_get_is_auth_to_spin (disks);
diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
index b9c157a..b17c8f9 100644
--- a/src/xfpm-manager.c
+++ b/src/xfpm-manager.c
@@ -110,7 +110,8 @@ xfpm_manager_class_init (XfpmManagerClass *klass)
 static void
 xfpm_manager_init (XfpmManager *manager)
 {
-    manager->priv = XFPM_MANAGER_GET_PRIVATE(manager);
+    manager->priv = XFPM_MANAGER_GET_PRIVATE (manager);
+
     manager->priv->timer = g_timer_new ();
     
     notify_init ("xfce4-power-manager");
diff --git a/src/xfpm-power-common.c b/src/xfpm-power-common.c
index 0b4dd1b..922e22e 100644
--- a/src/xfpm-power-common.c
+++ b/src/xfpm-power-common.c
@@ -23,6 +23,7 @@
 #endif
 
 #include <libxfce4util/libxfce4util.h>
+#include <dbus/dbus-glib-lowlevel.h>
 
 #include "xfpm-power-common.h"
 #include "xfpm-enum-glib.h"
diff --git a/src/xfpm-power-common.h b/src/xfpm-power-common.h
index 83c530d..914441c 100644
--- a/src/xfpm-power-common.h
+++ b/src/xfpm-power-common.h
@@ -33,29 +33,31 @@
 #define DKP_PATH_WAKEUPS     "/org/freedesktop/DeviceKit/Power/Wakeups"
 #define DKP_IFACE_WAKEUPS    "org.freedesktop.DeviceKit.Power.Wakeups"
 
-#define UPOWER_NAME 	     "org.freedesktop.DeviceKit.Power"
-#define UPOWER_PATH 	     "/org/freedesktop/DeviceKit/Power"
 
-#define UPOWER_IFACE 	     "org.freedesktop.DeviceKit.Power"
-#define UPOWER_IFACE_DEVICE  "org.freedesktop.DeviceKit.Power.Device"
+#define UPOWER_NAME 	     "org.freedesktop.UPower"
+#define UPOWER_PATH 	     "/org/freedesktop/UPower"
 
-#define UPOWER_PATH_WAKEUPS  "/org/freedesktop/DeviceKit/Power/Wakeups"
-#define UPOWER_IFACE_WAKEUPS "org.freedesktop.DeviceKit.Power.Wakeups"
+#define UPOWER_IFACE 	     "org.freedesktop.UPower"
+#define UPOWER_IFACE_DEVICE  "org.freedesktop.UPower.Device"
+#define UPOWER_PATH_DEVICE   "/org/freedesktop/UPower/devices/"
 
+#define UPOWER_PATH_WAKEUPS  "/org/freedesktop/UPower/Wakeups"
+#define UPOWER_IFACE_WAKEUPS "org.freedesktop.UPower.Wakeups"
 
-GPtrArray 		*xfpm_power_enumerate_devices		 	(DBusGProxy *proxy);
+GPtrArray 	*xfpm_power_enumerate_devices		(DBusGProxy *proxy);
 
-GHashTable 		*xfpm_power_get_interface_properties 		(DBusGProxy *proxy_prop, 
-									 const gchar *iface_name);
+GHashTable	*xfpm_power_get_interface_properties 	(DBusGProxy *proxy_prop, 
+							 const gchar *iface_name);
 
-GValue 			 xfpm_power_get_interface_property   		(DBusGProxy *proxy, 
-									 const gchar *iface_name, 
-									 const gchar *prop_name);
+GValue 		 xfpm_power_get_interface_property   	(DBusGProxy *proxy, 
+							 const gchar *iface_name, 
+							 const gchar *prop_name);
 
-const gchar 		*xfpm_power_translate_device_type 		(guint type);
+const gchar 	*xfpm_power_translate_device_type 	(guint type);
 
-const gchar		*xfpm_power_translate_technology		(guint value);
+const gchar	*xfpm_power_translate_technology	(guint value);
+
+const gchar	*xfpm_power_get_icon_name		(guint device_type);
 
-const gchar 		*xfpm_power_get_icon_name			(guint device_type);
 
 #endif /* XFPM_UPOWER_COMMON */
diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c
index 6a8bbce..cfd533c 100644
--- a/src/xfpm-power-info.c
+++ b/src/xfpm-power-info.c
@@ -46,6 +46,14 @@
 
 #include "xfpm-unique.h"
 
+static const gchar *BACKEND_NAME;
+static const gchar *BACKEND_PATH;
+static const gchar *BACKEND_IFACE;
+static const gchar *BACKEND_IFACE_DEVICE;
+static const gchar *BACKEND_PATH_DEVICE;
+static const gchar *BACKEND_IFACE_WAKEUPS;
+static const gchar *BACKEND_PATH_WAKEUPS;
+
 typedef struct 
 {
     DBusGConnection *bus;
@@ -346,7 +354,7 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec
     gtk_list_store_append (list_store, &iter);
     gtk_list_store_set (list_store, &iter, 
 			XFPM_DEVICE_INFO_NAME, _("Device"), 
-			XFPM_DEVICE_INFO_VALUE, g_str_has_prefix (object_path, DKP_PATH_DEVICE) ? object_path + strlen (DKP_PATH_DEVICE) : object_path,
+			XFPM_DEVICE_INFO_VALUE, g_str_has_prefix (object_path, BACKEND_PATH_DEVICE) ? object_path + strlen (BACKEND_PATH_DEVICE) : object_path,
 			-1);
     i++;
     
@@ -513,7 +521,7 @@ xfpm_info_add_device (XfpmInfo *info, const gchar *object_path)
     GHashTable *props;
     
     proxy_prop = dbus_g_proxy_new_for_name (info->bus, 
-					    DKP_NAME,
+					    BACKEND_NAME,
 					    object_path,
 					    DBUS_INTERFACE_PROPERTIES);
 					    
@@ -523,7 +531,7 @@ xfpm_info_add_device (XfpmInfo *info, const gchar *object_path)
 	return;
     }
     
-    props = xfpm_power_get_interface_properties (proxy_prop, DKP_IFACE_DEVICE);
+    props = xfpm_power_get_interface_properties (proxy_prop, BACKEND_IFACE_DEVICE);
     
     if ( props )
     {
@@ -538,17 +546,50 @@ xfpm_info_power_devices (XfpmInfo *info)
     GPtrArray *array = NULL;
     guint i;
     
-    info->power_proxy = dbus_g_proxy_new_for_name (info->bus, 
-						   DKP_NAME,
-						   DKP_PATH,
-						   DKP_IFACE);
-						   
-    if ( !info->power_proxy )
+    /*Check for upower/devkit power here*/
+
+    info->power_proxy = dbus_g_proxy_new_for_name_owner (info->bus,
+							 UPOWER_NAME,
+							 UPOWER_PATH,
+							 UPOWER_IFACE,
+							 NULL);
+    
+    if ( info->power_proxy )
     {
-	g_warning ("Unable to create proxy for : %s", DKP_NAME);
-	return;
+	BACKEND_NAME          =  UPOWER_NAME;
+	BACKEND_PATH          =  UPOWER_PATH;
+	BACKEND_IFACE         =  UPOWER_IFACE;
+	BACKEND_IFACE_DEVICE  =  UPOWER_IFACE_DEVICE;
+	BACKEND_PATH_DEVICE   =  UPOWER_PATH_DEVICE;
+	BACKEND_IFACE_WAKEUPS =  UPOWER_IFACE_WAKEUPS;
+	BACKEND_PATH_WAKEUPS  =  UPOWER_PATH_WAKEUPS;
+     }
+    else
+    {
+	g_message ("Unable to create proxy for UPower, trying DeviceKit Power...");
+	info->power_proxy = dbus_g_proxy_new_for_name_owner (info->bus,
+							     DKP_NAME,
+							     DKP_PATH,
+							     DKP_IFACE,
+							     NULL);
+	if ( info->power_proxy )
+	{
+	    g_message ("Devkit Power found in the system");
+	    
+	    BACKEND_NAME          =  DKP_NAME;
+	    BACKEND_PATH          =  DKP_PATH;
+	    BACKEND_IFACE         =  DKP_IFACE;
+	    BACKEND_IFACE_DEVICE  =  DKP_IFACE_DEVICE;
+	    BACKEND_PATH_DEVICE   =  DKP_PATH_DEVICE;
+	    BACKEND_IFACE_WAKEUPS =  DKP_IFACE_WAKEUPS;
+	    BACKEND_PATH_WAKEUPS  =  DKP_PATH_WAKEUPS;
+	}
+	else
+	{
+	    g_error ("UPower and DevkitPower are not found");
+	}
     }
-    
+
     array = xfpm_power_enumerate_devices (info->power_proxy);
     
     if ( array )
@@ -583,23 +624,26 @@ xfpm_info_update_wakeups (XfpmInfo *info)
     
     GError *error = NULL;
     
-    GType collection_type;
-    GType struct_type;
-    
+    static GType collection_type = G_TYPE_INVALID;
+    static GType struct_type = G_TYPE_INVALID;
+
     GPtrArray *array = NULL;
     
     gboolean ret;
     guint i;
     
-    struct_type = dbus_g_type_get_struct ("GValueArray",
-					  G_TYPE_BOOLEAN,
-					  G_TYPE_UINT,
-					  G_TYPE_DOUBLE,
-					  G_TYPE_STRING,
-					  G_TYPE_STRING,
-					  G_TYPE_INVALID);
-    
-    collection_type = dbus_g_type_get_collection ("GPtrArray", struct_type);
+    if ( G_UNLIKELY (collection_type == G_TYPE_INVALID ) )
+    {
+	struct_type = dbus_g_type_get_struct ("GValueArray",
+					      G_TYPE_BOOLEAN,
+					      G_TYPE_UINT,
+					      G_TYPE_DOUBLE,
+					      G_TYPE_STRING,
+					      G_TYPE_STRING,
+					      G_TYPE_INVALID);
+    
+	collection_type = dbus_g_type_get_collection ("GPtrArray", struct_type);
+    }
     
     ret = dbus_g_proxy_call (info->wakeups_proxy, "GetData", &error,
 			     G_TYPE_INVALID,
@@ -608,7 +652,7 @@ xfpm_info_update_wakeups (XfpmInfo *info)
 		       
     if ( !ret )
     {
-	g_warning ("GetData Failed on %s : %s", DKP_PATH_WAKEUPS, error->message);
+	g_warning ("GetData Failed on %s : %s", BACKEND_PATH_WAKEUPS, error->message);
 	g_error_free (error);
 	return;
     }
@@ -709,13 +753,13 @@ xfpm_info_cpu_wakeups (XfpmInfo *info)
     GtkCellRenderer *renderer;
     
     info->wakeups_proxy = dbus_g_proxy_new_for_name (info->bus,
-						     DKP_NAME,
-						     DKP_PATH_WAKEUPS,
-						     DKP_IFACE_WAKEUPS);
+						     BACKEND_NAME,
+						     BACKEND_PATH_WAKEUPS,
+						     BACKEND_IFACE_WAKEUPS);
 							  
     if ( !info->wakeups_proxy )
     {
-	g_warning ("Unable to create proxy for %s", DKP_PATH_WAKEUPS);
+	g_warning ("Unable to create proxy for %s", BACKEND_PATH_WAKEUPS);
 	return;
     }
     
diff --git a/src/xfpm-power.c b/src/xfpm-power.c
index 6911b86..50bb0b9 100644
--- a/src/xfpm-power.c
+++ b/src/xfpm-power.c
@@ -50,12 +50,23 @@
 #include "xfpm-debug.h"
 #include "xfpm-enum-types.h"
 
+
+static const gchar *BACKEND_NAME;
+static const gchar *BACKEND_PATH;
+static const gchar *BACKEND_IFACE;
+static const gchar *BACKEND_IFACE_DEVICE;
+static const gchar *BACKEND_PATH_DEVICE;
+#ifdef HAVE_POLKIT
+static const gchar *POLKIT_AUTH_SUSPEND;
+static const gchar *POLKIT_AUTH_HIBERNATE;
+#endif /*HAVE_POLKIT*/
+
 static void xfpm_power_finalize     (GObject *object);
 
 static void xfpm_power_get_property (GObject *object,
-				   guint prop_id,
-				   GValue *value,
-				   GParamSpec *pspec);
+				     guint prop_id,
+				     GValue *value,
+				     GParamSpec *pspec);
 
 static void xfpm_power_dbus_class_init (XfpmPowerClass * klass);
 static void xfpm_power_dbus_init (XfpmPower *power);
@@ -63,7 +74,7 @@ static void xfpm_power_dbus_init (XfpmPower *power);
 static void xfpm_power_refresh_adaptor_visible (XfpmPower *power);
 
 #define XFPM_POWER_GET_PRIVATE(o) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_DKP, XfpmPowerPrivate))
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_POWER, XfpmPowerPrivate))
 
 struct XfpmPowerPrivate
 {
@@ -87,6 +98,8 @@ struct XfpmPowerPrivate
 #endif
     gboolean	     auth_suspend;
     gboolean	     auth_hibernate;
+
+    gboolean         dkp_is_upower;
     
     /* Properties */
     gboolean	     on_low_battery;
@@ -138,10 +151,10 @@ static void
 xfpm_power_check_polkit_auth (XfpmPower *power)
 {
     power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit, 
-						      "org.freedesktop.devicekit.power.suspend");
+							POLKIT_AUTH_SUSPEND);
 
     power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit, 
-							"org.freedesktop.devicekit.power.hibernate");
+							  POLKIT_AUTH_HIBERNATE);
 
 }
 #endif
@@ -328,7 +341,7 @@ xfpm_power_get_properties (XfpmPower *power)
 {
     GHashTable *props;
     
-    props = xfpm_power_get_interface_properties (power->priv->proxy_prop, DKP_IFACE);
+    props = xfpm_power_get_interface_properties (power->priv->proxy_prop, BACKEND_IFACE);
     
     xfpm_power_check_pm (power, props);
     xfpm_power_check_lid (power, props);
@@ -945,7 +958,7 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
     GValue value;
     
     proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus, 
-					    DKP_NAME,
+					    BACKEND_NAME,
 					    object_path,
 					    DBUS_INTERFACE_PROPERTIES);
 				       
@@ -955,7 +968,7 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
 	return;
     }
     
-    value = xfpm_power_get_interface_property (proxy_prop, DKP_IFACE_DEVICE, "Type");
+    value = xfpm_power_get_interface_property (proxy_prop, BACKEND_IFACE_DEVICE, "Type");
     
     device_type = g_value_get_uint (&value);
     
@@ -970,12 +983,17 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path)
 	XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, 
 			"Battery device detected at : %s", object_path);
 	proxy = dbus_g_proxy_new_for_name (power->priv->bus,
-					   DKP_NAME,
+					   BACKEND_NAME,
 					   object_path,
-					   DKP_IFACE_DEVICE);
+					   BACKEND_IFACE_DEVICE);
 	battery = xfpm_battery_new ();
 	gtk_status_icon_set_visible (battery, FALSE);
-	xfpm_battery_monitor_device (XFPM_BATTERY (battery), proxy, proxy_prop, device_type);
+	xfpm_battery_monitor_device (XFPM_BATTERY (battery), 
+				     proxy, 
+				     proxy_prop, 
+				     BACKEND_IFACE_DEVICE, 
+				     device_type);
+
 	g_hash_table_insert (power->priv->hash, g_strdup (object_path), battery);
 	
 	g_signal_connect (battery, "popup-menu",
@@ -1146,7 +1164,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [ON_BATTERY_CHANGED] = 
         g_signal_new ("on-battery-changed",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, on_battery_changed),
                       NULL, NULL,
@@ -1155,7 +1173,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [LOW_BATTERY_CHANGED] = 
         g_signal_new ("low-battery-changed",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, low_battery_changed),
                       NULL, NULL,
@@ -1164,7 +1182,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [LID_CHANGED] = 
         g_signal_new ("lid-changed",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, lid_changed),
                       NULL, NULL,
@@ -1173,7 +1191,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [WAKING_UP] = 
         g_signal_new ("waking-up",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, waking_up),
                       NULL, NULL,
@@ -1182,7 +1200,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [SLEEPING] = 
         g_signal_new ("sleeping",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, sleeping),
                       NULL, NULL,
@@ -1191,7 +1209,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [ASK_SHUTDOWN] = 
         g_signal_new ("ask-shutdown",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, ask_shutdown),
                       NULL, NULL,
@@ -1200,7 +1218,7 @@ xfpm_power_class_init (XfpmPowerClass *klass)
 
     signals [SHUTDOWN] = 
         g_signal_new ("shutdown",
-                      XFPM_TYPE_DKP,
+                      XFPM_TYPE_POWER,
                       G_SIGNAL_RUN_LAST,
                       G_STRUCT_OFFSET(XfpmPowerClass, shutdown),
                       NULL, NULL,
@@ -1306,24 +1324,64 @@ xfpm_power_init (XfpmPower *power)
 	g_error_free (error);
 	goto out;
     }
-    
-    power->priv->proxy = dbus_g_proxy_new_for_name (power->priv->bus,
-					          DKP_NAME,
-						  DKP_PATH,
-						  DKP_IFACE);
-    if (power->priv->proxy == NULL) 
+
+    power->priv->proxy = dbus_g_proxy_new_for_name_owner (power->priv->bus,
+							  UPOWER_NAME,
+							  UPOWER_PATH,
+							  UPOWER_IFACE,
+							  NULL);
+
+    if ( power->priv->proxy )
     {
-	g_critical ("Unable to create proxy for %s", DKP_NAME);
-	goto out;
+	power->priv->dkp_is_upower = TRUE;
+
+	BACKEND_NAME          =  UPOWER_NAME;
+	BACKEND_PATH          =  UPOWER_PATH;
+	BACKEND_IFACE         =  UPOWER_IFACE;
+	BACKEND_IFACE_DEVICE  =  UPOWER_IFACE_DEVICE;
+	BACKEND_PATH_DEVICE   =  UPOWER_PATH_DEVICE;
+#ifdef HAVE_POLKIT
+	POLKIT_AUTH_SUSPEND   = "org.freedesktop.upower.suspend";
+	POLKIT_AUTH_HIBERNATE = "org.freedesktop.upower.hibernate";
+#endif
+    }
+    else
+    {
+	g_message ("Unable to create proxy for UPower, trying DeviceKit Power...");
+	power->priv->proxy = dbus_g_proxy_new_for_name_owner (power->priv->bus,
+							      DKP_NAME,
+							      DKP_PATH,
+							      DKP_IFACE,
+							      NULL);
+	if ( power->priv->proxy )
+	{
+	    g_message ("Devkit Power found in the system");
+	    power->priv->dkp_is_upower = FALSE;
+	    
+	    BACKEND_NAME  = DKP_NAME;
+	    BACKEND_PATH  =  DKP_PATH;
+	    BACKEND_IFACE =   DKP_IFACE;
+	    BACKEND_IFACE_DEVICE =  DKP_IFACE_DEVICE;
+	    BACKEND_PATH_DEVICE  =  DKP_PATH_DEVICE;
+#ifdef HAVE_POLKIT
+	    POLKIT_AUTH_SUSPEND = "org.freedesktop.devicekit.power.suspend";
+	    POLKIT_AUTH_HIBERNATE = "org.freedesktop.devicekit.power.hibernate";
+#endif
+	}
+	else
+	{
+	    g_critical ("UPower and DevkitPower are not found");
+	    goto out;
+	}
     }
     
     power->priv->proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus,
-						       DKP_NAME,
-						       DKP_PATH,
-						       DBUS_INTERFACE_PROPERTIES);
+							 BACKEND_NAME,
+							 BACKEND_PATH,
+							 DBUS_INTERFACE_PROPERTIES);
     if (power->priv->proxy_prop == NULL) 
     {
-	g_critical ("Unable to create proxy for %s", DKP_NAME);
+	g_critical ("Unable to create proxy for %s", BACKEND_NAME);
 	goto out;
     }
     
@@ -1448,7 +1506,7 @@ xfpm_power_get (void)
     }
     else
     {
-	xfpm_power_object = g_object_new (XFPM_TYPE_DKP, NULL);
+	xfpm_power_object = g_object_new (XFPM_TYPE_POWER, NULL);
 	g_object_add_weak_pointer (xfpm_power_object, &xfpm_power_object);
     }
     
diff --git a/src/xfpm-power.h b/src/xfpm-power.h
index c927354..8cfcd61 100644
--- a/src/xfpm-power.h
+++ b/src/xfpm-power.h
@@ -25,9 +25,9 @@
 
 G_BEGIN_DECLS
 
-#define XFPM_TYPE_DKP        (xfpm_power_get_type () )
-#define XFPM_POWER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), XFPM_TYPE_DKP, XfpmPower))
-#define XFPM_IS_DKP(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFPM_TYPE_DKP))
+#define XFPM_TYPE_POWER        (xfpm_power_get_type () )
+#define XFPM_POWER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), XFPM_TYPE_POWER, XfpmPower))
+#define XFPM_IS_POWER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFPM_TYPE_POWER))
 
 typedef struct XfpmPowerPrivate XfpmPowerPrivate;
 



More information about the Xfce4-commits mailing list