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

commit d20a7732f68506e539b6f4e5d27270e082f4fb8c
Author: Ali Abdallah <[email protected]>
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;
 
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to