[Goodies-commits] r5681 - xfce4-power-manager/trunk/src

Ali Abdallah aliov at xfce.org
Sat Oct 18 20:26:20 CEST 2008


Author: aliov
Date: 2008-10-18 18:26:20 +0000 (Sat, 18 Oct 2008)
New Revision: 5681

Modified:
   xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
   xfce4-power-manager/trunk/src/xfpm-ac-adapter.h
   xfce4-power-manager/trunk/src/xfpm-battery-icon.c
   xfce4-power-manager/trunk/src/xfpm-battery-icon.h
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-battery.h
   xfce4-power-manager/trunk/src/xfpm-button.c
   xfce4-power-manager/trunk/src/xfpm-button.h
   xfce4-power-manager/trunk/src/xfpm-common.h
   xfce4-power-manager/trunk/src/xfpm-driver.c
   xfce4-power-manager/trunk/src/xfpm-hal.c
   xfce4-power-manager/trunk/src/xfpm-hal.h
   xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
   xfce4-power-manager/trunk/src/xfpm-notify.c
   xfce4-power-manager/trunk/src/xfpm-notify.h
   xfce4-power-manager/trunk/src/xfpm-settings.c
   xfce4-power-manager/trunk/src/xfpm-settings.h
Log:
Lot of improvements and bug fixes

Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -101,12 +101,11 @@
     SystemFormFactor factor;
     
     GQuark adapter_udi;
-    
-    gboolean adapter_found;
     gboolean present;
-    gboolean can_suspend;
-    gboolean can_hibernate;
+    gboolean adapter_found;
     
+    guint8 power_management;
+        
 };
 
 enum 
@@ -157,7 +156,9 @@
     
     priv->hal = xfpm_hal_new();
     priv->adapter_udi = 0 ;
-    
+
+    priv->power_management = 0 ;
+        
     g_signal_connect(adapter,"size-changed",
                     G_CALLBACK(xfpm_ac_adapter_size_changed_cb),NULL);
     g_signal_connect(adapter,"popup-menu",
@@ -395,7 +396,7 @@
 	gtk_widget_set_sensitive(mi,FALSE);
 	
 	
-	if ( priv->can_hibernate )
+	if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
 	{
 		gtk_widget_set_sensitive(mi,TRUE);
 		g_signal_connect(mi,"activate",
@@ -411,7 +412,7 @@
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
 	
 	gtk_widget_set_sensitive(mi,FALSE);
-	if ( priv->can_suspend )
+	if ( priv->power_management & SYSTEM_CAN_SUSPEND )
     {	
 		gtk_widget_set_sensitive(mi,TRUE);
 		g_signal_connect(mi,"activate",
@@ -476,13 +477,11 @@
 
 void           
 xfpm_ac_adapter_set_sleep_info (XfpmAcAdapter *adapter,
-                                gboolean can_hibernate,
-                                gboolean can_suspend)
+                                guint8 sleep_info)
 {
     g_return_if_fail(XFPM_IS_AC_ADAPTER(adapter));
     XfpmAcAdapterPrivate *priv;
     priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
-    
-    priv->can_suspend = can_suspend;
-    priv->can_hibernate = can_hibernate;
+
+    priv->power_management = sleep_info;    
 }

Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -57,6 +57,5 @@
 void           xfpm_ac_adapter_monitor        (XfpmAcAdapter *adapter,
                                                SystemFormFactor factor);
 void           xfpm_ac_adapter_set_sleep_info (XfpmAcAdapter *adapter,
-                                               gboolean can_hibernate,
-                                               gboolean can_suspend);
+                                               guint8 sleep_info);
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-battery-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-icon.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery-icon.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -103,7 +103,7 @@
                                                       "Last full",
                                                       "Last battery full charge",
                                                       0,
-                                                      G_MAXINT16, /*shouldn't be longer */
+                                                      G_MAXUINT32,
                                                       4000,
                                                       G_PARAM_READWRITE|G_PARAM_CONSTRUCT ));
     
@@ -112,7 +112,7 @@
                                     g_param_spec_uint("batt-critical-level",
                                                       "Battery critical level",
                                                       "Low battery level",
-                                                      0,
+                                                      1,
                                                       15,
                                                       8,
                                                       G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
@@ -284,7 +284,6 @@
 	return "100";
 }
 
-
 static gchar *
 xfpm_battery_icon_get_icon_prefix(XfpmBatteryType type)
 {
@@ -384,8 +383,10 @@
             }
             else
             {
-            xfpm_notify_simple(_("Xfce power manager"),message,5000,NOTIFY_URGENCY_LOW,
-                           GTK_STATUS_ICON(battery_icon),icon_name,0);
+                NotifyNotification *n =
+                xfpm_notify_new(_("Xfce power manager"),message,5000,NOTIFY_URGENCY_LOW,
+                               GTK_STATUS_ICON(battery_icon),icon_name);
+                xfpm_notify_show_notification(n,0);               
             }
         }
 #endif     
@@ -423,7 +424,7 @@
 }
 
 GtkStatusIcon *
-xfpm_battery_icon_new(guint last_full,guint battery_type,
+xfpm_battery_icon_new(guint32 last_full,XfpmBatteryType battery_type,
                       guint critical_level,gboolean visible)
 {
     XfpmBatteryIcon *battery_icon = NULL;
@@ -442,16 +443,48 @@
 }
 
 void
-xfpm_battery_icon_set_state(XfpmBatteryIcon *battery_icon,guint charge,guint remaining_per,
-                         gboolean present,gboolean is_charging,gboolean is_discharging,
-                         gboolean ac_adapter_present)
+xfpm_battery_icon_set_state(XfpmBatteryIcon *battery_icon,guint32 charge,guint per,
+                            guint32 remaining_time,gboolean present,
+                            gboolean is_charging,gboolean is_discharging,
+                            gboolean ac_adapter_present)
 {
     g_return_if_fail(XFPM_IS_BATTERY_ICON(battery_icon));
     battery_icon->ac_adapter_present = ac_adapter_present;
     battery_icon->battery_present    = present;
+#ifdef DEBUG
+    gchar *content_is_charging;
+    gchar *content_is_discharging;
+    gchar *content_present;
     
-    gchar tip[128];
+    GValue value = { 0, };
+    g_value_init(&value,G_TYPE_BOOLEAN);
+    g_value_set_boolean(&value,is_charging);
+    content_is_charging = g_strdup_value_contents(&value);
     
+    g_value_set_boolean(&value,is_discharging);
+    content_is_discharging = g_strdup_value_contents(&value);
+    
+    g_value_set_boolean(&value,present);
+    content_present = g_strdup_value_contents(&value);
+        
+    XFPM_DEBUG("Setting battery state charge=%d is_charging:%s is_discharging:%s present:%s \n",charge,
+    content_is_charging,content_is_discharging,content_present);
+    g_free(content_is_charging);
+    g_free(content_is_discharging);
+    g_free(content_present);
+#endif    
+    guint remaining_per;
+    if ( per > 0 )
+    {
+        remaining_per =  per;
+    }
+    else
+    {
+        remaining_per = 1;
+    }
+    
+    gchar tip[256];
+    
     if ( present == FALSE )
     {
         xfpm_battery_icon_update(battery_icon,NOT_PRESENT,remaining_per);
@@ -461,23 +494,19 @@
     }
     
     sprintf(tip,"%i",remaining_per);
-    strcat(tip,"%");
+    strcat(tip,_("%"));
     
-    XFPM_DEBUG("Setting battery state charge=%d is_charging=%d is_discharging=%d \n",charge,
-    is_charging,is_discharging);
-    
     // battery is full
     if ( is_charging == FALSE && is_discharging == FALSE && battery_icon->last_full == charge )
     {
         strcat(tip,_(" Battery fully charged"));
-        gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
         xfpm_battery_icon_update(battery_icon,FULL,remaining_per);
     }
     
     // battery is not dis/charging but is not full also
     if ( is_charging == FALSE && is_discharging == FALSE && battery_icon->last_full != charge )
     {
-        gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
+        strcat(tip,_(" Battery charge"));
         xfpm_battery_icon_update(battery_icon,NOT_FULL,remaining_per);
     }
     
@@ -485,7 +514,6 @@
     if ( is_charging == TRUE && is_discharging == FALSE )
     {
         strcat(tip,_(" Battery is charging "));
-        gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
         xfpm_battery_icon_update(battery_icon,CHARGING,remaining_per);
     }
     
@@ -499,20 +527,35 @@
                 strcat(tip,
                 battery_icon->type == PRIMARY ? _(" Running on battery"): _(" Battery is discharging"));
             }
-            gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
             xfpm_battery_icon_update(battery_icon,DISCHARGING,remaining_per);
         } 
         else if ( remaining_per <= ( battery_icon->critical_level+10 ) && remaining_per > battery_icon->critical_level )
         {
             strcat(tip,_(" Battery charge level is low"));
-            gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
             xfpm_battery_icon_update(battery_icon,LOW,remaining_per);
         }
         else if ( remaining_per <= battery_icon->critical_level )
         {
             strcat(tip,_(" Battery charge level is critical"));
-            gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
             xfpm_battery_icon_update(battery_icon,CRITICAL,remaining_per);
         }
     }
+    
+    if ( remaining_time != 0 )
+    {
+        gchar time_str[80] = "";
+        gchar hours_str[20] = "";
+        gchar minutes_str[20] = "";
+        gint minutes,hours,minutes_left;
+       	hours = remaining_time / 3600;
+		minutes = remaining_time / 60;
+		minutes_left = minutes % 60;
+		
+		strcat(hours_str,hours > 1 ? _("hours") : _("hour") );
+		strcat(minutes_str,minutes > 1 ? _("minutes") : _("minute"));
+		
+		sprintf(time_str,_("\nEstimated Time Left: %d %s %d %s"),hours,hours_str,minutes_left,minutes_str);
+		strcat(tip,time_str);
+    }
+    gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
 }

Modified: xfce4-power-manager/trunk/src/xfpm-battery-icon.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-icon.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery-icon.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -69,14 +69,15 @@
 } XfpmBatteryIconClass;
 
 GType          xfpm_battery_icon_get_type   (void);
-GtkStatusIcon *xfpm_battery_icon_new        (guint last_full,
-                                            guint battery_type,
+GtkStatusIcon *xfpm_battery_icon_new        (guint32 last_full,
+                                            XfpmBatteryType battery_type,
                                             guint critical_charge,        
                                             gboolean visible);
                                             
 void           xfpm_battery_icon_set_state  (XfpmBatteryIcon *battery_icon,
-                                            guint charge,
+                                            guint32 charge,
                                             guint remaining_per,
+                                            guint32 remaining_time,
                                             gboolean present,
                                             gboolean is_charging,
                                             gboolean is_discharging,

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -98,6 +98,14 @@
                                                         const gchar *key,gboolean is_removed,
                                                         gboolean is_added,XfpmBattery *batt);
                                                         
+static void xfpm_battery_show_critical_options(XfpmBattery *batt,XfpmBatteryIcon *icon);
+static void xfpm_battery_handle_primary_critical(XfpmBattery *batt,
+                                                XfpmBatteryIcon *icon);
+static void xfpm_battery_handle_ups_critical(XfpmBattery *batt,
+                                             XfpmBatteryIcon *icon);                                                
+static void xfpm_battery_handle_critical_charge(XfpmBattery *batt,
+                                                XfpmBatteryIcon *icon);
+                                                
 static void xfpm_battery_state_change_cb(GObject *object,
                                          GParamSpec *arg1,
                                          gpointer data);
@@ -124,8 +132,9 @@
 {
     XfpmHal *hal;
     GHashTable *batteries;
-    gboolean can_hibernate;
-    gboolean can_suspend;
+
+    guint8 power_management;
+        
 };
                                 
 G_DEFINE_TYPE(XfpmBattery,xfpm_battery,G_TYPE_OBJECT)
@@ -191,7 +200,7 @@
                                     g_param_spec_uint("critical-charge",
                                                       "Critical charge",
                                                       "Critical battery charge",
-                                                      0,
+                                                      1,
                                                       15,
                                                       8,
                                                       G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
@@ -234,8 +243,6 @@
     priv = XFPM_BATTERY_GET_PRIVATE(battery);
     
     priv->batteries = g_hash_table_new(g_str_hash,g_str_equal);
-    priv->can_hibernate = FALSE;
-    priv->can_suspend   = FALSE;
     
     xfpm_battery_load_config(battery);
     
@@ -575,6 +582,20 @@
     xfpm_battery_refresh(batt);
 }
 
+
+static guint 
+_get_battery_percentage(gint32 last_full,gint32 current)
+{
+    guint val = 100;
+    
+    if ( last_full <= current ) return val;
+    
+    float f = (float)current/last_full *100;
+	
+	val = (guint)f;
+    return val;   
+}
+    
 static void
 xfpm_battery_handle_device_property_changed(XfpmHal *hal,const gchar *udi,
                                            const gchar *key,gboolean is_removed,
@@ -597,12 +618,12 @@
         {
             return;
         }
-        if ( !strcmp(key,"battery.reporting.last_full") )
+        if ( !strcmp(key,"battery.charge_level.last_full") )
         {
             GError *error = NULL;
             guint last_full = xfpm_hal_get_int_info(priv->hal,
                                                     udi,
-                                                    "battery.reporting.last_full",
+                                                    "battery.charge_level.last_full",
                                                     &error);
             if ( error )                                        
             {
@@ -613,16 +634,15 @@
             return;
         }
 
-        if ( strcmp(key,"battery.reporting.current")           &&
-             strcmp(key,"battery.charge_level.percentage")     &&
-             strcmp(key,"battery.rechargeable.is_charging")    &&
+        if ( strcmp(key,"battery.charge_level.current")           &&
+             strcmp(key,"battery.rechargeable.is_charging")       &&
              strcmp(key,"battery.rechargeable.is_discharging") )
         {
             return;
         }
         XFPM_DEBUG("Drive status change udi=%s key=%s\n",udi,key);
 
-        guint current;
+        gint32 current;
         guint percentage;
         gboolean is_charging;
         gboolean is_discharging;
@@ -630,7 +650,7 @@
         GError *error = NULL;
         current = xfpm_hal_get_int_info(priv->hal,
                                         udi,
-                                        "battery.reporting.current",
+                                        "battery.charge_level.current",
                                         &error);
         if ( error )                                        
         {
@@ -638,16 +658,35 @@
             g_error_free(error);
             return;
         }                                    
-        percentage = xfpm_hal_get_int_info(priv->hal,
-                                           udi,
-                                          "battery.charge_level.percentage",
-                                          &error);
-        if ( error )                                        
+
+        if (xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.persentage"))
         {
-            XFPM_DEBUG("%s\n",error->message);
-            g_error_free(error);
-            return;
-        }                                         
+            if ( error ) 
+            {
+                XFPM_DEBUG("%s:\n",error->message);
+                g_error_free(error);
+                return;
+            }                                      
+            percentage = xfpm_hal_get_int_info(priv->hal,
+                                              udi,
+                                              "battery.charge_level.percentage",
+                                              &error);
+        }
+        else
+        {
+            GError *error = NULL;
+            guint last_full = xfpm_hal_get_int_info(priv->hal,
+                                                    udi,
+                                                    "battery.charge_level.last_full",
+                                                    &error);
+            if ( error )                                        
+            {
+                XFPM_DEBUG("%s\n",error->message);
+                g_error_free(error);
+                return;
+            }                                        
+            percentage = _get_battery_percentage(last_full,current);
+        }
                                       
         is_present = xfpm_hal_get_bool_info(priv->hal,
                                              udi,
@@ -680,13 +719,130 @@
             g_error_free(error);
             return;
         }                                               
-                                               
-        xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(icon),current,percentage,
+        
+        gint32 remaining_time  = 0 ;
+        if (xfpm_hal_device_have_key(priv->hal,udi,"battery.remaining_time"))
+        {
+            if ( error ) 
+            {
+                XFPM_DEBUG("%s:\n",error->message);
+                g_error_free(error);
+                return;
+            }                                      
+            remaining_time = xfpm_hal_get_int_info(priv->hal,
+                                                   udi,
+                                                   "battery.remaining_time",
+                                                   &error);
+        }                                       
+        xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(icon),current,percentage,remaining_time,
                                     is_present,is_charging,is_discharging,batt->ac_adapter_present);
     }
 }
 
+#ifdef HAVE_LIBNOTIFY
 static void
+_do_critical_action(NotifyNotification *n,gchar *action,XfpmBattery *batt)
+{
+    if (!strcmp(action,"shutdown"))
+    {
+        XFPM_DEBUG("Sending shutdown request\n");
+        g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
+    }
+    else if ( !strcmp(action,"hibernate"))
+    {
+        XFPM_DEBUG("Sending hibernate request\n");
+        g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
+    }
+}
+#endif
+
+static void
+xfpm_battery_show_critical_options(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+    XfpmBatteryPrivate *priv;
+    priv = XFPM_BATTERY_GET_PRIVATE(batt);
+    
+    const gchar *message;
+    message = _("Your battery charge level is critical "\
+              "save your work to avoid data loss");
+              
+#ifdef HAVE_LIBNOTIFY            
+                                    
+    NotifyNotification *n = xfpm_notify_new(_("Xfce power manager"),
+                                             message,
+                                             20000,
+                                             NOTIFY_URGENCY_CRITICAL,
+                                             GTK_STATUS_ICON(icon),
+                                             "gpm-ac-adapter");
+    if (priv->power_management & SYSTEM_CAN_SHUTDOWN )
+    {
+        xfpm_notify_add_action(n,
+                               "shutdown",
+                               _("Shutdown the system"),
+                               (NotifyActionCallback)_do_critical_action,
+                               batt);   
+    }                          
+    if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
+    {
+        xfpm_notify_add_action(n,
+                               "hibernate",
+                               _("Hibernate the system"),
+                               (NotifyActionCallback)_do_critical_action,
+                               batt);      
+    }
+    xfpm_notify_show_notification(n,6);      
+#else
+    /*FIXME Show the options in  GtkDialog   */
+    
+#endif
+}
+
+static void
+xfpm_battery_handle_primary_critical(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+    if ( batt->critical_action == XFPM_DO_HIBERNATE )
+    {
+        XFPM_DEBUG("Sending Hibernate request\n");
+        g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
+        return;
+    }
+    
+    if ( batt->critical_action == XFPM_DO_SHUTDOWN )
+    {
+        XFPM_DEBUG("Sending shutdown request\n");
+        g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
+        return;
+    }
+    
+    if ( batt->critical_action == XFPM_DO_NOTHING )
+    {
+        xfpm_battery_show_critical_options(batt,icon);
+    }
+}
+
+static void
+xfpm_battery_handle_ups_critical(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+    xfpm_battery_show_critical_options(batt,icon);
+}
+
+static void
+xfpm_battery_handle_critical_charge(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+    XfpmBatteryType battery_type;
+    g_object_get(G_OBJECT(icon),"battery-type",&battery_type,NULL);
+    
+    if ( battery_type == PRIMARY )
+    {
+        xfpm_battery_handle_primary_critical(batt,icon);
+    }
+    else if ( battery_type == UPS )
+    {
+        xfpm_battery_handle_ups_critical(batt,icon);
+    }
+}
+
+static void
 xfpm_battery_state_change_cb(GObject *object,GParamSpec *arg1,gpointer data)
 {
     if ( !strcmp(arg1->name,"battery-state") ) 
@@ -708,29 +864,9 @@
         XFPM_DEBUG("param:%s value:%s\n",arg1->name,content);
         g_free(content);
 #endif  
-        if ( batt->critical_action == XFPM_DO_NOTHING )
-        {
-            return;
-        }
-        
         if ( state == CRITICAL )
         {
-            XfpmBatteryType battery_type;
-            g_object_get(object,"battery-type",&battery_type,NULL);
-            if ( battery_type != PRIMARY ) 
-            {
-                return;
-            }
-            if ( batt->critical_action == XFPM_DO_HIBERNATE )
-            {
-                XFPM_DEBUG("Sending Hibernate\n");
-                g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
-                return;
-            }
-            if ( batt->critical_action == XFPM_DO_SHUTDOWN )
-            {
-                g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
-            }
+            xfpm_battery_handle_critical_charge(batt,XFPM_BATTERY_ICON(object));
         }
     }
 }
@@ -780,7 +916,7 @@
 	img = gtk_image_new_from_icon_name("gpm-hibernate",GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
 	gtk_widget_set_sensitive(mi,FALSE);
-	if ( priv->can_hibernate )
+	if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
 	{
 		gtk_widget_set_sensitive(mi,TRUE);
 		g_signal_connect(mi,"activate",
@@ -796,7 +932,7 @@
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
 	
 	gtk_widget_set_sensitive(mi,FALSE);
-	if ( priv->can_suspend )
+	if ( priv->power_management & SYSTEM_CAN_SUSPEND )
     {	
 		gtk_widget_set_sensitive(mi,TRUE);
 		g_signal_connect(mi,"activate",
@@ -861,15 +997,18 @@
     priv = XFPM_BATTERY_GET_PRIVATE(batt);
     
     // Sanity check
-    if ( !xfpm_hal_device_have_key(priv->hal,udi,"battery.reporting.last_full") ||
-         !xfpm_hal_device_have_key(priv->hal,udi,"battery.reporting.current")   ||
-         !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.percentage") ||
+    // All those keys are flagged as always exist on device battery, except for battery.is_rechargeable
+    if ( !xfpm_hal_device_have_key(priv->hal,udi,"battery.is_rechargeable") ||
+         !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.last_full") ||
+         !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.current")   ||
          !xfpm_hal_device_have_key(priv->hal,udi,"battery.present")  ||
          !xfpm_hal_device_have_key(priv->hal,udi,"battery.rechargeable.is_charging") ||
+         !xfpm_hal_device_have_key(priv->hal,udi,"battery.rechargeable.is_discharging") ||
          !xfpm_hal_device_have_key(priv->hal,udi,"battery.type") )
     {
         return FALSE;
     }
+    
     return TRUE;
 }
 
@@ -886,7 +1025,7 @@
     GError *error = NULL;      
     guint last_full = xfpm_hal_get_int_info(priv->hal,
                                           udi,
-                                          "battery.reporting.last_full",
+                                          "battery.charge_level.last_full",
                                           &error);
     if ( error ) 
     {
@@ -894,9 +1033,9 @@
         g_error_free(error);
         return;
     }
-    guint current   = xfpm_hal_get_int_info(priv->hal,
+    gint32 current   = xfpm_hal_get_int_info(priv->hal,
                                           udi,
-                                          "battery.reporting.current",
+                                          "battery.charge_level.current",
                                           &error);
     if ( error ) 
     {
@@ -904,16 +1043,6 @@
         g_error_free(error);
         return;
     }                                      
-    guint percentage = xfpm_hal_get_int_info(priv->hal,
-                                          udi,
-                                          "battery.charge_level.percentage",
-                                          &error);
-    if ( error ) 
-    {
-        XFPM_DEBUG("%s:\n",error->message);
-        g_error_free(error);
-        return;
-    }                                      
     gboolean is_present = xfpm_hal_get_bool_info(priv->hal,
                                                 udi,
                                                "battery.present",
@@ -953,8 +1082,42 @@
         XFPM_DEBUG("%s:\n",error->message);
         g_error_free(error);
         return;
-    }             
+    } 
+    
+    guint percentage;            
+    if (xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.persentage"))
+    {
+        if ( error ) 
+        {
+            XFPM_DEBUG("%s:\n",error->message);
+            g_error_free(error);
+            return;
+        }                                      
+        percentage = xfpm_hal_get_int_info(priv->hal,
+                                          udi,
+                                          "battery.charge_level.percentage",
+                                          &error);
+    }
+    else
+    {
+        percentage = _get_battery_percentage(last_full,current);
+    }
    
+    gint32 remaining_time  = 0 ;
+    if (xfpm_hal_device_have_key(priv->hal,udi,"battery.remaining_time"))
+    {
+        if ( error ) 
+        {
+            XFPM_DEBUG("%s:\n",error->message);
+            g_error_free(error);
+            return;
+        }                                      
+        remaining_time = xfpm_hal_get_int_info(priv->hal,
+                                               udi,
+                                               "battery.remaining_time",
+                                               &error);
+    }
+    
     XfpmBatteryType type = 
     xfpm_battery_get_battery_type(battery_type);
     if ( battery_type )
@@ -965,16 +1128,20 @@
                                       type,
                                       batt->critical_level,
                                       TRUE);
+                                      
 #ifdef HAVE_LIBNOTIFY    
     g_object_set(batt_icon,"systray-notify",batt->notify_enabled,NULL);
 #endif    
+                                                  
     xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(batt_icon),
                                 current,
                                 percentage,
+                                remaining_time,
                                 is_present,
                                 is_charging,
                                 is_discharging,
                                 batt->ac_adapter_present);
+                                
     g_signal_connect(batt_icon,"notify",G_CALLBACK(xfpm_battery_state_change_cb),batt);                            
     g_signal_connect(batt_icon,"popup-menu",G_CALLBACK(xfpm_battery_popup_tray_icon_menu),batt);
     
@@ -1063,26 +1230,25 @@
         }
         icon = NULL;
     }
-    xfpm_notify_simple("Xfce power manager",
-                       error,
-                       14000,
-                       NOTIFY_URGENCY_CRITICAL,
-                       icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
-                       icon_name,
-                       0);
+    NotifyNotification *n =
+    xfpm_notify_new("Xfce power manager",
+                    error,
+                    14000,
+                    NOTIFY_URGENCY_CRITICAL,
+                    icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
+                    icon_name);
+    xfpm_notify_show_notification(n,0);                 
 }                                       
 #endif
 
 void           
-xfpm_battery_set_sleep_info(XfpmBattery *batt,
-                            gboolean can_suspend,
-                            gboolean can_hibernate)
+xfpm_battery_set_power_info(XfpmBattery *batt,guint8 power_management)
 {
     g_return_if_fail(XFPM_IS_BATTERY(batt));
     
     XfpmBatteryPrivate *priv;
     priv = XFPM_BATTERY_GET_PRIVATE(batt);                            
-    priv->can_hibernate = can_hibernate;
-    priv->can_suspend   = can_suspend;
+
+    priv->power_management = power_management;  
 }                                        
                                             

Modified: xfce4-power-manager/trunk/src/xfpm-battery.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -76,9 +76,8 @@
                                        const gchar *icon_name,
                                        const gchar *error);     
 #endif
-void           xfpm_battery_set_sleep_info(XfpmBattery *batt,
-                                            gboolean can_suspend,
-                                            gboolean can_hibernate);
+void           xfpm_battery_set_power_info(XfpmBattery *batt,
+                                           guint8 power_management);
 G_END_DECLS
 
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-button.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -100,8 +100,8 @@
     
     gboolean device_found;
     
-    gboolean can_suspend;
-    gboolean can_hibernate;
+    guint8 sleep_info;
+    
 };
 
 G_DEFINE_TYPE(XfpmButton,xfpm_button,G_TYPE_OBJECT)
@@ -183,9 +183,8 @@
     priv->have_sleep_bt         = FALSE;
     priv->sleep_button_has_state= FALSE;
     
-    priv->can_suspend = FALSE;
-    priv->can_hibernate = FALSE;
-    
+    priv->sleep_info  = 0;
+        
     priv->hal = xfpm_hal_new();
     
     xfpm_button_load_config(bt);
@@ -323,14 +322,10 @@
     
     if ( action == XFPM_DO_SUSPEND )
     {
-        if (!priv->can_suspend ) return;
-        
         xfpm_button_do_suspend(bt);
     }
     else if ( action == XFPM_DO_HIBERNATE )
     {
-        if (!priv->can_hibernate ) return;
-        
         xfpm_button_do_hibernate(bt);
     }
     else if ( action == XFPM_DO_SHUTDOWN )
@@ -664,13 +659,11 @@
 }
 
 void            
-xfpm_button_set_sleep_info (XfpmButton *button,gboolean can_hibernate,
-                            gboolean can_suspend)
+xfpm_button_set_sleep_info (XfpmButton *button,guint8 sleep_info)
 {
     g_return_if_fail(XFPM_IS_BUTTON(button));
     XfpmButtonPrivate *priv;
     priv = XFPM_BUTTON_GET_PRIVATE(button);
-    
-    priv->can_suspend = can_suspend;
-    priv->can_hibernate = can_hibernate;
+
+    priv->sleep_info = sleep_info;    
 }

Modified: xfce4-power-manager/trunk/src/xfpm-button.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-button.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -60,8 +60,7 @@
 XfpmButton     *xfpm_button_new                   (void);
 guint8          xfpm_button_get_available_buttons (XfpmButton *button);
 void            xfpm_button_set_sleep_info        (XfpmButton *button,
-                                                   gboolean can_hibernate,
-                                                   gboolean can_suspend);
+                                                    guint8 sleep_info);
 G_END_DECLS
 
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-common.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-common.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-common.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -40,6 +40,7 @@
 #define ON_BATT_CPU_GOV_CFG         "/xfce4-power-manager/on-batt-cpu-gov"
 
 #define POWER_SAVE_CFG              "/xfce4-power-manager/power-save"
+#define CAN_POWER_SAVE              "/xfce4-power-manager/can-power-save"
 #define LCD_BRIGHTNESS_CFG          "/xfce4-power-manager/lcd-brightness"
 #define LID_SWITCH_CFG              "/xfce4-power-manager/lid-switch-action"
 #define SLEEP_SWITCH_CFG            "/xfce4-power-manager/sleep-switch-action"
@@ -59,6 +60,15 @@
 #define ON_AC_DPMS_TIMEOUTS_CFG     "/xfce4-power-manager/on-ac-monitor-dpms-timeouts"
 #endif
 
+typedef enum
+{
+    SYSTEM_CAN_SHUTDOWN          =  (1<<0),
+    SYSTEM_CAN_HIBERNATE         =  (1<<2),
+    SYSTEM_CAN_SUSPEND           =  (1<<3),
+    SYSTEM_CAN_POWER_SAVE        =  (1<<4)
+    
+} SystemPowerManagement;
+
 typedef enum 
 {
     SYSTEM_LAPTOP,

Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -86,6 +86,8 @@
                                                     gboolean state_ok,
                                                     XfpmDriver *drv);
                                                     
+static void xfpm_driver_set_power_save(XfpmDriver *drv);
+
 static void xfpm_driver_property_changed_cb(XfconfChannel *channel,
                                             gchar *property,
                                             GValue *value,
@@ -114,7 +116,11 @@
                                               gboolean critical,
                                               XfpmDriver *drv);
 static void xfpm_driver_load_config(XfpmDriver *drv);
+
+static void xfpm_driver_check_power_management(XfpmDriver *drv);
+static void xfpm_driver_check_power_save(XfpmDriver *drv);
 static void xfpm_driver_check(XfpmDriver *drv);
+
 static void xfpm_driver_load_all(XfpmDriver *drv);
 
 /* DBus message Filter and replies */
@@ -133,12 +139,13 @@
     gboolean dialog_opened;
     
     SystemFormFactor formfactor;
-    gboolean can_use_power_management;
-    gboolean can_suspend;
-    gboolean can_hibernate;
+    
+    guint8 power_management;
+    
 #ifdef HAVE_LIBNOTIFY    
     gboolean show_power_management_error;
 #endif
+    gboolean enable_power_save;
     
     gboolean accept_sleep_request;
     
@@ -176,14 +183,14 @@
 {
     XfpmDriverPrivate *priv;
     priv = XFPM_DRIVER_GET_PRIVATE(drv);
-    
+
+    priv->power_management = 0;
+        
     priv->dialog_opened = FALSE;
     priv->cpufreq_control = FALSE;
     priv->buttons_control = FALSE;
+    priv->enable_power_save = FALSE;
     priv->lcd_brightness_control = FALSE;
-    priv->can_use_power_management = FALSE;
-    priv->can_hibernate = FALSE;
-    priv->can_suspend = FALSE;
     priv->accept_sleep_request = TRUE;
     priv->loop    = NULL;
     priv->cpu     = NULL;
@@ -245,6 +252,22 @@
     G_OBJECT_CLASS(xfpm_driver_parent_class)->finalize(object);
 }
 
+static void
+xfpm_driver_set_power_save(XfpmDriver *drv)
+{
+    XfpmDriverPrivate *priv;
+    priv = XFPM_DRIVER_GET_PRIVATE(drv);
+    
+    GError *error = NULL;
+    xfpm_hal_set_power_save(priv->hal,priv->ac_adapter_present,&error);
+    
+    if ( error )
+    {
+        XFPM_DEBUG("Set power save failed: %s\n",error->message);
+        g_error_free(error);
+    }
+}
+
 static void xfpm_driver_ac_adapter_state_changed_cb(XfpmAcAdapter *adapter,
                                                     gboolean present,
                                                     gboolean state_ok,
@@ -265,13 +288,14 @@
                              
         if ( visible ) 
         {
-            xfpm_notify_simple(_("Xfce power manager"),
-                               error,
-                               12000,
-                               NOTIFY_URGENCY_CRITICAL,
-                               GTK_STATUS_ICON(adapter),
-                               "gpm-ac-adapter",
-                               0);    
+            NotifyNotification *n =
+            xfpm_notify_new(_("Xfce power manager"),
+                            error,
+                            12000,
+                            NOTIFY_URGENCY_CRITICAL,
+                            GTK_STATUS_ICON(adapter),
+                            "gpm-ac-adapter");
+            xfpm_notify_show_notification(n,0);                
         }  
         else
         {
@@ -295,6 +319,11 @@
     {
         g_object_set(G_OBJECT(priv->lcd),"on-ac-adapter",priv->ac_adapter_present,NULL);
     }
+    
+    if ( priv->power_management & SYSTEM_CAN_POWER_SAVE ) 
+    {
+        xfpm_driver_set_power_save(drv);
+    }
 }                                                    
 
 static void
@@ -305,16 +334,6 @@
     
     priv->dialog_opened = FALSE;
     
-    gpointer data = 
-    g_object_get_data(G_OBJECT(drv),"conf-channel");
-    
-    if ( data )
-    {
-        XfconfChannel *channel = (XfconfChannel *)data;
-        g_object_unref(channel);
-        xfconf_shutdown();
-    }
-    
     switch(response) 
     {
             case GTK_RESPONSE_HELP:
@@ -325,9 +344,24 @@
                 gtk_widget_destroy(GTK_WIDGET(dialog));
                 break;
     }
+    
 }              
 
 static void
+_close_dialog_cb(GtkDialog *dialog,XfpmDriver *drv)
+{
+    gpointer data = 
+    g_object_get_data(G_OBJECT(drv),"conf-channel");
+    if ( data )
+    {
+        XfconfChannel *channel = (XfconfChannel *)data;
+        g_object_unref(channel);
+    }
+    xfconf_shutdown();     
+    
+}
+
+static void
 xfpm_driver_property_changed_cb(XfconfChannel *channel,gchar *property,
                                 GValue *value,XfpmDriver *drv)
 {
@@ -486,6 +520,14 @@
             return;
         }
     }
+    
+    if ( !strcmp(property,POWER_SAVE_CFG) )
+    {
+        gboolean val = g_value_get_boolean(value);
+        priv->enable_power_save = val;
+        xfpm_driver_set_power_save(drv);
+    }
+    
 } 
 
 static gboolean
@@ -557,9 +599,7 @@
     
     dialog = xfpm_settings_new(channel,
                                priv->formfactor == SYSTEM_LAPTOP ? TRUE : FALSE,
-                               priv->can_hibernate,
-                               priv->can_suspend,
-                               priv->can_use_power_management,
+                               priv->power_management,
                                with_dpms,
                                gov,
                                switch_buttons,
@@ -571,6 +611,8 @@
     gdk_x11_window_set_user_time(dialog->window,gdk_x11_get_server_time (dialog->window));
     
     g_signal_connect(dialog,"response",G_CALLBACK(_dialog_response_cb),drv);        
+    g_signal_connect(dialog,"close",G_CALLBACK(_close_dialog_cb),drv);
+    
     gtk_widget_show(dialog);
     priv->dialog_opened = TRUE;
     
@@ -589,14 +631,14 @@
     
     if ( adapter_visible )
     {
-         xfpm_notify_simple("Xfce power manager",
-                           error,
-                           14000,
-                           NOTIFY_URGENCY_CRITICAL,
-                           GTK_STATUS_ICON(priv->adapter),
-                           icon_name,
-                           0);
-        
+        NotifyNotification *n =
+        xfpm_notify_new("Xfce power manager",
+                         error,
+                         14000,
+                         NOTIFY_URGENCY_CRITICAL,
+                         GTK_STATUS_ICON(priv->adapter),
+                         icon_name);
+        xfpm_notify_show_notification(n,0);
     }
     else  /* the battery object will take care */
     {
@@ -726,7 +768,7 @@
     g_free(content);
     
 #endif    
-    if ( !priv->can_use_power_management )
+    if ( priv->power_management != 0 )
     {
         XFPM_DEBUG("We cannot use power management interface\n");
         return;
@@ -743,15 +785,16 @@
     switch ( action )
     {
         case XFPM_DO_SUSPEND:
-            if (!priv->can_suspend) return;
-            xfpm_driver_suspend(drv,critical);
+            if (priv->power_management & SYSTEM_CAN_SUSPEND )
+                xfpm_driver_suspend(drv,critical);
             break;
         case XFPM_DO_HIBERNATE:
-            if (!priv->can_hibernate) return;
-            xfpm_driver_hibernate(drv,critical);
+            if (priv->power_management & SYSTEM_CAN_HIBERNATE )
+                xfpm_driver_hibernate(drv,critical);
             break;
         case XFPM_DO_SHUTDOWN:
-            xfpm_driver_shutdown(drv,critical);
+            if ( priv->power_management & SYSTEM_CAN_SHUTDOWN ) 
+                xfpm_driver_shutdown(drv,critical);
             break;    
         default:
             break;
@@ -816,6 +859,7 @@
 #ifdef HAVE_LIBNOTIFY        
         priv->show_power_management_error = TRUE;
 #endif        
+        priv->enable_power_save = FALSE;
         return;
     }
     XfconfChannel *channel;
@@ -825,6 +869,7 @@
     priv->show_power_management_error
      = xfconf_channel_get_bool(channel,SHOW_POWER_MANAGEMENT_ERROR,TRUE);
 #endif
+    priv->enable_power_save = xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE);
     
     g_object_unref(channel);
     xfconf_shutdown();    
@@ -835,7 +880,7 @@
 static void
 _disable_error(NotifyNotification *n,gchar *action,XfpmDriver *drv)
 {
-    if (strcmp(action,"ok")) return;
+    if (strcmp(action,"confirmed")) return;
     
     GError *g_error = NULL;
     if ( !xfconf_init(&g_error) )
@@ -851,7 +896,7 @@
     
     g_object_unref(channel);
     xfconf_shutdown();    
-    
+    g_object_unref(n);
 }
 #endif
 
@@ -863,41 +908,45 @@
                  _("Unable to use power management service, functionalities like hibernate and shutdown will not work "\
                   "Possible reasons: you don't have permission or  "\
                   "broken connection with the hardware abstract layer or the message bus daemon is not running");
-                             
-     xfpm_notify_with_action(_("Xfce power manager"),
-                            error,
-                            14000,
-                            NOTIFY_URGENCY_CRITICAL,
-                            NULL,
-                            "gpm-ac-adapter",
+     NotifyNotification *n = xfpm_notify_new(_("Xfce power manager"),
+                                             error,
+                                             14000,
+                                             NOTIFY_URGENCY_CRITICAL,
+                                             NULL,
+                                             "gpm-ac-adapter");
+     xfpm_notify_add_action(n,
+                            "confirmed",
                             _("Don't show this message again"),
-                            0,
                             (NotifyActionCallback)_disable_error,
-                            drv);    
+                            drv);   
+     xfpm_notify_show_notification(n,10);                        
      return FALSE;                       
 }
 #endif
 
+
 static void
-xfpm_driver_check(XfpmDriver *drv)
+xfpm_driver_check_power_management(XfpmDriver *drv)
 {
+    XFPM_DEBUG("Checking power management\n");
+    
     XfpmDriverPrivate *priv;
     priv = XFPM_DRIVER_GET_PRIVATE(drv);
     
     GError *g_error = NULL;
     
-    priv->can_use_power_management = xfpm_hal_power_management_can_be_used(priv->hal);
-    if ( !priv->can_use_power_management )
+    gboolean can_use_power_management = xfpm_hal_power_management_can_be_used(priv->hal);
+    if ( !can_use_power_management )
     {
 #ifdef HAVE_LIBNOTIFY
     g_timeout_add_seconds(8,(GSourceFunc)_show_power_management_error_message,drv);
 #endif                                       
         XFPM_DEBUG("Unable to use HAL power management services\n");
-        /*We do return here, so can_suspend and can_hibernate stay FALSE*/
         return;
     }
-        
-    priv->can_suspend = xfpm_hal_get_bool_info(priv->hal,
+    priv->power_management |= SYSTEM_CAN_SHUTDOWN;
+    
+    gboolean can_suspend = xfpm_hal_get_bool_info(priv->hal,
                                                HAL_ROOT_COMPUTER,
                                                "power_management.can_suspend",
                                                &g_error);
@@ -908,19 +957,68 @@
         g_error = NULL;
     }            
     
-    priv->can_hibernate = xfpm_hal_get_bool_info(priv->hal,
-                                                 HAL_ROOT_COMPUTER,
-                                                 "power_management.can_hibernate",
-                                                 &g_error);
+    if ( can_suspend )  priv->power_management |= SYSTEM_CAN_SUSPEND;
+    
+    gboolean can_hibernate = xfpm_hal_get_bool_info(priv->hal,
+                                                    HAL_ROOT_COMPUTER,
+                                                    "power_management.can_hibernate",
+                                                    &g_error);
     if ( g_error )
     {
         XFPM_DEBUG("%s: \n",g_error->message);
         g_error_free(g_error);
-        g_error = NULL;
-    }            
+    }       
+    
+    if ( can_hibernate )  priv->power_management |= SYSTEM_CAN_HIBERNATE;
 }
 
 static void
+xfpm_driver_check_power_save(XfpmDriver *drv)
+{
+    XFPM_DEBUG("Checking power save availability\n");
+    XfpmDriverPrivate *priv;
+    priv = XFPM_DRIVER_GET_PRIVATE(drv);
+    
+    GError *error = NULL;
+    gboolean ret = xfpm_hal_get_bool_info(priv->hal,
+                                          HAL_ROOT_COMPUTER,
+                                          "power_management.is_powersave_set",
+                                          &error);
+    if ( error )
+    {
+        XFPM_DEBUG("error getting powersave_set %s\n",error->message);
+        g_error_free(error);
+        return;
+    }
+    
+    xfpm_hal_set_power_save(priv->hal,ret,&error);
+    
+    if ( error )
+    {
+        XFPM_DEBUG("System doesn't support power save: %s\n",error->message);
+        g_error_free(error);
+        return;
+    }
+    
+    if ( ret ) priv->power_management |= SYSTEM_CAN_POWER_SAVE;
+    
+}
+
+static void
+xfpm_driver_check(XfpmDriver *drv)
+{
+    XfpmDriverPrivate *priv;
+    priv = XFPM_DRIVER_GET_PRIVATE(drv);
+    
+    xfpm_driver_check_power_management(drv);
+    
+    if ( priv->power_management != 0 )
+    {
+        xfpm_driver_check_power_save(drv);
+    }
+}
+
+static void
 xfpm_driver_load_all(XfpmDriver *drv)
 {
     XfpmDriverPrivate *priv;
@@ -968,7 +1066,7 @@
     else
     {
         priv->buttons_control = TRUE;
-        xfpm_button_set_sleep_info(priv->bt,priv->can_hibernate,priv->can_suspend);
+        xfpm_button_set_sleep_info(priv->bt,priv->power_management);
         g_signal_connect(priv->bt,"xfpm-action-request",
                         G_CALLBACK(xfpm_driver_handle_action_request),drv);
     }
@@ -983,14 +1081,14 @@
     
     /*We call the battery object to start monitoring after loading the Ac adapter*/
     priv->batt = xfpm_battery_new(); 
-    xfpm_battery_set_sleep_info(priv->batt,priv->can_hibernate,priv->can_suspend); 
+    xfpm_battery_set_power_info(priv->batt,priv->power_management);
+    
     g_signal_connect(priv->batt,"xfpm-action-request",
                         G_CALLBACK(xfpm_driver_handle_action_request),drv);
     g_signal_connect(priv->batt,"xfpm-show-adapter-icon",G_CALLBACK(_show_adapter_icon),drv);
                         
     priv->adapter = xfpm_ac_adapter_new(FALSE);
-    xfpm_ac_adapter_set_sleep_info(XFPM_AC_ADAPTER(priv->adapter),
-                                    priv->can_hibernate,priv->can_suspend);
+    xfpm_ac_adapter_set_sleep_info(XFPM_AC_ADAPTER(priv->adapter),priv->power_management);
     
     g_signal_connect(priv->adapter,"xfpm-ac-adapter-changed",
                     G_CALLBACK(xfpm_driver_ac_adapter_state_changed_cb),drv);
@@ -1092,7 +1190,7 @@
     {
         return FALSE;
     }
-
+    
     xfpm_driver_load_config(drv);    
     _get_system_form_factor(priv);
     
@@ -1103,6 +1201,6 @@
     g_main_loop_run(priv->loop);
     
     dbus_connection_remove_filter(priv->conn,xfpm_driver_signal_filter,NULL);
-    xfconf_shutdown();
+    
     return TRUE;
 }

Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -374,7 +374,7 @@
     }    
 }    
 
-gint
+gint32
 xfpm_hal_get_int_info(XfpmHal *xfpm_hal,const gchar *udi,
                       const gchar *property,GError **gerror)  {
  
@@ -989,6 +989,13 @@
     dbus_error_init(&error);
     reply = dbus_connection_send_with_reply_and_block(priv->connection,mess,-1,&error);
     dbus_message_unref(mess);
+    
+    if ( dbus_error_is_set(&error) )
+    {
+        dbus_set_g_error(gerror,&error);
+        dbus_error_free(&error);
+        return;
+    }
 
     if ( !reply ) 
     {
@@ -1028,6 +1035,13 @@
     dbus_error_init(&error);
     reply = dbus_connection_send_with_reply_and_block(priv->connection,mess,-1,&error);
     dbus_message_unref(mess);
+    
+    if ( dbus_error_is_set(&error) )
+    {
+        dbus_set_g_error(gerror,&error);
+        dbus_error_free(&error);
+        return;
+    }
 
     if ( !reply ) 
     {

Modified: xfce4-power-manager/trunk/src/xfpm-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -90,7 +90,7 @@
                                                              const gchar *capability,
                                                              gint *num,
                                                              GError **gerror);
-gint                 xfpm_hal_get_int_info                 (XfpmHal *xfpm_hal,
+gint32               xfpm_hal_get_int_info                 (XfpmHal *xfpm_hal,
                                                              const gchar *udi,
                                                              const gchar *property,
                                                              GError **gerror);    

Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -260,6 +260,7 @@
     
     if ( lcd->ac_adapter_present )
     {
+        XFPM_DEBUG("Setting level on ac adapter\n");
         if ( level != priv->max_brightness -1 )
         {
             xfpm_hal_set_brightness(priv->hal,priv->udi,priv->max_brightness -1,&error);
@@ -273,6 +274,7 @@
     }
     else 
     {
+        XFPM_DEBUG("Setting level battery power\n");
         xfpm_hal_set_brightness(priv->hal,priv->udi, 1,&error);
         if ( error )
         {

Modified: xfce4-power-manager/trunk/src/xfpm-notify.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-notify.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-notify.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -24,26 +24,26 @@
 
 #ifdef HAVE_LIBNOTIFY
 static NotifyNotification *
-xfpm_notify_new(const char *title,const char *message,
-                const gchar *icon_name,GtkStatusIcon *icon)
+xfpm_notify_create_notification(const char *title,const char *message,
+                                const gchar *icon_name,GtkStatusIcon *icon)
 {
     NotifyNotification *n;
     if ( icon != NULL ) 
 	{
-	    n = notify_notification_new_with_status_icon(title,message,icon_name,icon);
+	    n = notify_notification_new_with_status_icon(title,message,NULL,icon);
 	}
 	else
 	{
 	    n = notify_notification_new(title,message,NULL,NULL);
-    
-	    if ( icon_name != NULL ) {
-		    GdkPixbuf *pixbuf = xfpm_load_icon(icon_name,60);	
-		    if (pixbuf) {
-			    notify_notification_set_icon_from_pixbuf(n,pixbuf);
-			    g_object_unref(G_OBJECT(pixbuf));
-		    }    
-	    }		
 	}
+    if ( icon_name != NULL ) {
+        GdkPixbuf *pixbuf = xfpm_load_icon(icon_name,48);	
+        if (pixbuf) 
+        {
+            notify_notification_set_icon_from_pixbuf(n,pixbuf);
+            g_object_unref(G_OBJECT(pixbuf));
+        }    
+    }		
 	return n;
 }
 
@@ -52,69 +52,46 @@
 {
     NotifyNotification *n = data;
     notify_notification_show(n,NULL);	
-	g_object_unref(n);				
 	return FALSE;
 }
 
-static gboolean
-xfpm_notify_send_notification_with_action(gpointer data)
+NotifyNotification * 
+xfpm_notify_new(const gchar *title,const gchar *message,
+                guint timeout,NotifyUrgency urgency,
+                GtkStatusIcon *icon,const gchar *icon_name) 
 {
-    NotifyNotification *n = data;
-    notify_notification_show(n,NULL);	
-    /* The action callback should call g_object_unref on NotifyNotification object */
-	return FALSE;
-}
-
-void 
-xfpm_notify_simple(const gchar *title,const gchar *message,guint timeout,
-                   NotifyUrgency urgency,GtkStatusIcon *icon,
-                   const gchar *icon_name,guint8 timeout_to_show) 
-{
 	
 	NotifyNotification *n;
-	n = xfpm_notify_new(title,message,icon_name,icon);
+	n = xfpm_notify_create_notification(title,message,icon_name,icon);
 	    
 	notify_notification_set_urgency(n,urgency);
 	notify_notification_set_timeout(n,timeout);
-	if ( timeout_to_show != 0 )
-	{
-	    g_timeout_add_seconds(timeout_to_show,xfpm_notify_send_notification,n);
-    }
-    else
-    {
-        xfpm_notify_send_notification(n);
-    }
+	return n;
+	
 }	
 
-void xfpm_notify_with_action(const gchar *title,
-							 const gchar *message,
-							 guint timeout,
-							 NotifyUrgency urgency,
-							 GtkStatusIcon *icon,
-							 const gchar *icon_name,
-							 const gchar *action_label,
-							 guint8 timeout_to_show,
-							 NotifyActionCallback notify_callback,
-							 gpointer user_data) {
-										  	
-	NotifyNotification *n;
-	n = xfpm_notify_new(title,message,icon_name,icon);
-	
-	notify_notification_set_urgency(n,urgency);
-	notify_notification_set_timeout(n,timeout);
-	
-	notify_notification_add_action(n,"ok",action_label,
+void xfpm_notify_add_action(NotifyNotification *n,
+                            const gchar *action_id,
+                            const gchar *action_label,
+                            NotifyActionCallback notify_callback,
+                            gpointer user_data) 
+{
+    notify_notification_add_action(n,action_id,action_label,
 								  (NotifyActionCallback)notify_callback,
 								  user_data,NULL);
-								  
-	if ( timeout_to_show != 0 )
+}
+							     
+void xfpm_notify_show_notification(NotifyNotification *n,guint timeout_to_show)
+{
+    if ( timeout_to_show != 0 )
 	{
-	    g_timeout_add_seconds(timeout_to_show,xfpm_notify_send_notification_with_action,n);
+	    g_timeout_add_seconds(timeout_to_show,
+                              xfpm_notify_send_notification,
+                              n);
     }
     else
     {
-        xfpm_notify_send_notification_with_action(n);
-    }							  
-}										  	
-
+        xfpm_notify_send_notification(n);
+    }			
+}
 #endif

Modified: xfce4-power-manager/trunk/src/xfpm-notify.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-notify.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-notify.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -30,26 +30,22 @@
 #include <libnotify/notify.h>
 #include <gtk/gtk.h>
 
-void xfpm_notify_simple(const gchar *title,
-			  	        const gchar *message,
-						guint  timeout,
-						NotifyUrgency urgency,
-						GtkStatusIcon *icon,
-						const gchar *icon_name,
-						guint8 timeout_to_show);
-
-void xfpm_notify_with_action(const gchar *title,
-			   			     const gchar *message,
-							 guint timeout,
-							 NotifyUrgency urgency,
-							 GtkStatusIcon *icon,
-							 const gchar *icon_name,
-							 const gchar *action_label,
-							 guint8 timeout_to_show,
-							 NotifyActionCallback notify_callback,
-							 gpointer user_data);
-
-
+NotifyNotification *  xfpm_notify_new(const gchar *title,
+                                      const gchar *message,
+                                      guint timeout,
+                                      NotifyUrgency urgency,
+                                      GtkStatusIcon *icon,
+                                      const gchar *icon_name);
+                                      
+void xfpm_notify_add_action(NotifyNotification *n,
+                            const gchar *action_id,
+                            const gchar *action_label,
+                            NotifyActionCallback notify_callback,
+                            gpointer user_data) ;
+                            
+void xfpm_notify_show_notification(NotifyNotification *n,
+                                   guint timeout_to_show);
+                            
 #endif /* HAVE_LIBNOTIFY */
 
 #endif /*__XFPM_NOTIFY_H */

Modified: xfce4-power-manager/trunk/src/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-18 18:26:20 UTC (rev 5681)
@@ -141,6 +141,17 @@
     }
 }
 
+static void
+set_power_save_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+    gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    
+    if(!xfconf_channel_set_bool(channel,POWER_SAVE_CFG,value))
+    {
+        g_critical("Cannot set value %s\n",POWER_SAVE_CFG);
+    }
+}
+
 #ifdef HAVE_LIBNOTIFY
 static void
 set_battery_state_notification_cb(GtkWidget *widget,XfconfChannel *channel)
@@ -376,22 +387,21 @@
 
 static XfpmActionRequest
 _combo_helper_function(XfconfChannel *channel,const gchar *config,
-                       gboolean can_suspend,gboolean can_hibernate,
-                       gboolean can_use_power_management,XfpmActionRequest action)
+                       guint8 power_management,XfpmActionRequest action)
 {
-    if( !can_use_power_management && action != XFPM_DO_NOTHING ) 
+    if( power_management == 0 && action != XFPM_DO_NOTHING ) 
     {
         xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
         return XFPM_DO_NOTHING;
     }
     
-    if( !can_suspend && action == XFPM_DO_SUSPEND ) 
+    if( !(power_management & SYSTEM_CAN_SUSPEND)  && action == XFPM_DO_SUSPEND ) 
     {
         xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
         return XFPM_DO_NOTHING;
     }
     
-    if( !can_hibernate && action == XFPM_DO_HIBERNATE )  
+    if( !(power_management & SYSTEM_CAN_HIBERNATE) && action == XFPM_DO_HIBERNATE )  
     {
         xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
         return XFPM_DO_NOTHING;
@@ -407,7 +417,7 @@
 
 /// Settings frames ///
 static GtkWidget *
-xfpm_settings_battery(XfconfChannel *channel, gboolean can_hibernate,gboolean can_power)
+xfpm_settings_battery(XfconfChannel *channel, guint8 power_management)
 {
     GtkWidget *table;
     GtkWidget *frame,*align;
@@ -429,7 +439,7 @@
     xfpm_spin_button_set_suffix(XFPM_SPIN_BUTTON(critical_spin),_(" percent"));
     gtk_widget_show(critical_spin);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(critical_spin),
-                              xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,12));
+                              xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,8));
     g_signal_connect(critical_spin,"value-changed",
                     G_CALLBACK(set_battery_critical_charge_cb),channel);
     gtk_table_attach(GTK_TABLE(table),critical_spin,1,2,0,1,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -440,34 +450,56 @@
     
     action = gtk_combo_box_new_text();
     gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Nothing"));
-    if ( can_power )
+    if ( power_management != 0 )
     {
         gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Shutdown"));
     }
-    if ( can_hibernate )
+    if ( power_management & SYSTEM_CAN_HIBERNATE )
     {
         gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Hibernate"));
     }                           
     guint active = xfconf_channel_get_uint(channel,CRITICAL_BATT_ACTION_CFG,XFPM_DO_NOTHING);
-    active = _combo_helper_function(channel,CRITICAL_BATT_ACTION_CFG,FALSE,
-                                    can_hibernate,can_power,active);
+    active = _combo_helper_function(channel,CRITICAL_BATT_ACTION_CFG,power_management,active);
+
     gtk_combo_box_set_active(GTK_COMBO_BOX(action),active);
     
     gtk_widget_show(action);
     g_signal_connect(action,"changed",G_CALLBACK(set_critical_action_cb),channel);
     gtk_table_attach(GTK_TABLE(table),action,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0);
 
+    // Power Save Profile
+    GtkWidget *power_save;        
+    label = gtk_label_new(_("Enable power save on battery power"));
+    gtk_widget_show(label);
+    gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,2,3);
+    power_save = gtk_check_button_new();
+    gtk_widget_show(power_save);
+    if ( !(power_management & SYSTEM_CAN_POWER_SAVE) )
+    {
+        gtk_widget_set_tooltip_text(power_save,_("No power save method found in the system"));
+        gtk_widget_set_sensitive(power_save,FALSE);
+    }
+    
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(power_save),
+                                 power_management & SYSTEM_CAN_POWER_SAVE ?
+                                 xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE)
+                                 : FALSE);
+                                  
+    g_signal_connect(power_save,"toggled",G_CALLBACK(set_power_save_cb),channel); 
+    gtk_table_attach(GTK_TABLE(table),power_save,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);   
+    
+
 #ifdef HAVE_LIBNOTIFY
     GtkWidget *notify_bt;        
     label = gtk_label_new(_("Enable battery state notification"));
     gtk_widget_show(label);
-    gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,2,3);
+    gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,3,4);
     notify_bt = gtk_check_button_new();
     gtk_widget_show(notify_bt);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(notify_bt),
                                  xfconf_channel_get_bool(channel,BATT_STATE_NOTIFICATION_CFG,TRUE)); 
     g_signal_connect(notify_bt,"toggled",G_CALLBACK(set_battery_state_notification_cb),channel); 
-    gtk_table_attach(GTK_TABLE(table),notify_bt,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);                             
+    gtk_table_attach(GTK_TABLE(table),notify_bt,1,2,3,4,GTK_SHRINK,GTK_SHRINK,0,0);                             
 #endif        
     
     gtk_container_add(GTK_CONTAINER(align),table);
@@ -853,8 +885,10 @@
 
 
 static GtkWidget *
-xfpm_settings_keys(XfconfChannel *channel,gboolean can_power,gboolean can_hibernate,
-                   gboolean can_suspend,gboolean laptop,guint8 switch_buttons)
+xfpm_settings_keys(XfconfChannel *channel,
+                   gboolean laptop,
+                   guint8 power_management,
+                   guint8 switch_buttons)
 {
     GtkWidget *table;
     GtkWidget *label;
@@ -878,16 +912,15 @@
         GtkWidget *power_button;
         power_button = gtk_combo_box_new_text();
         gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Nothing"));
-        if ( can_suspend ) 
+        if ( power_management & SYSTEM_CAN_SUSPEND ) 
             gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Suspend"));
-        if ( can_hibernate )
+        if ( power_management & SYSTEM_CAN_HIBERNATE )
             gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Hibernate"));
-        if ( can_power)    
+        if ( power_management & SYSTEM_CAN_SHUTDOWN )    
             gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Shutdown"));        
          
         active = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,0);
-        active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
-                                    can_hibernate,can_power,active);    
+        active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);    
                                     
         gtk_combo_box_set_active(GTK_COMBO_BOX(power_button),active);
         gtk_table_attach(GTK_TABLE(table),power_button,1,2,0,1,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -908,14 +941,13 @@
         sleep_button = gtk_combo_box_new_text();
         
         gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Nothing"));
-        if ( can_suspend ) 
+        if ( power_management & SYSTEM_CAN_SUSPEND ) 
             gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Suspend"));
-        if ( can_hibernate )
+        if ( power_management & SYSTEM_CAN_HIBERNATE )
             gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Hibernate"));
-        if ( can_power )
+        if ( power_management & SYSTEM_CAN_SHUTDOWN )
             gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Shutdown"));    
-        active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
-                                    can_hibernate,can_power,active);   
+        active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);   
         gtk_combo_box_set_active(GTK_COMBO_BOX(sleep_button),active);
         gtk_widget_show(sleep_button);
         gtk_table_attach(GTK_TABLE(table),sleep_button,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -932,14 +964,13 @@
         active = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,0);
         lid_button = gtk_combo_box_new_text();
         gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Nothing"));
-        if ( can_suspend ) 
+        if ( power_management & SYSTEM_CAN_SUSPEND ) 
             gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Suspend"));
-        if ( can_hibernate )
+        if ( power_management & SYSTEM_CAN_SUSPEND )
             gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Hibernate"));
-        if ( can_power )    
+        if ( power_management & SYSTEM_CAN_SHUTDOWN )    
             gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Shutdown"));    
-        active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
-                                    can_hibernate,can_power,active);       
+        active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);       
         gtk_combo_box_set_active(GTK_COMBO_BOX(lid_button),active);
         gtk_widget_show(lid_button);
         gtk_table_attach(GTK_TABLE(table),lid_button,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -1154,11 +1185,13 @@
 }
 
 GtkWidget *
-xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
-                  gboolean can_hibernate,gboolean can_suspend,
-                  gboolean can_power,
-                  gboolean dpms_capable,guint8 govs,
-                  guint8 switch_buttons,gboolean lcd)
+xfpm_settings_new(XfconfChannel *channel,
+                  gboolean is_laptop,
+                  guint8 power_management,
+                  gboolean dpms_capable,
+                  guint8 govs,
+                  guint8 switch_buttons,
+                  gboolean lcd)
 {
     GtkWidget *Dialog;  /* Main dialog window */
     GtkWidget *mainbox; /* Box to get (Dialog)->vbox */
@@ -1176,7 +1209,7 @@
                                                     NULL);
     
     gtk_window_set_icon_name(GTK_WINDOW(Dialog),"gpm-ac-adapter");
-    gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CANCEL);
+    gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CLOSE);
     
     mainbox = GTK_DIALOG(Dialog)->vbox;
     
@@ -1201,11 +1234,11 @@
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
 
     /// Battery settings
-    box = xfpm_settings_battery(channel,can_hibernate,can_power);
+    box = xfpm_settings_battery(channel,power_management);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
 
     /// Keyboard buttons settings
-    box = xfpm_settings_keys(channel,can_power,can_hibernate,can_suspend,is_laptop,switch_buttons);
+    box = xfpm_settings_keys(channel,is_laptop,power_management,switch_buttons);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); 
     
     /// Dpms settings && LCD brightness settings DPMS existence is checked above

Modified: xfce4-power-manager/trunk/src/xfpm-settings.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.h	2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-settings.h	2008-10-18 18:26:20 UTC (rev 5681)
@@ -22,11 +22,13 @@
 #ifndef __XFPM_SETTINGS_H
 #define __XFPM_SETTINGS_H
 
-GtkWidget *xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
-                             gboolean can_hibernate,gboolean can_suspend,
-                             gboolean can_power,
-                             gboolean dpms_capable,guint8 govs,
-                             guint8 switch_buttons,gboolean lcd);
+GtkWidget *xfpm_settings_new(XfconfChannel *channel,
+                             gboolean is_laptop,
+                             guint8 power_management,
+                             gboolean dpms_capable,
+                             guint8 govs,
+                             guint8 switch_buttons,
+                             gboolean lcd);
 
 
 #endif /* __XFPM_SETTINGS_H */




More information about the Goodies-commits mailing list