[Goodies-commits] r7007 - in xfce4-power-manager/trunk: . src

Ali Abdallah aliov at xfce.org
Fri Mar 27 15:37:30 CET 2009


Author: aliov
Date: 2009-03-27 14:37:29 +0000 (Fri, 27 Mar 2009)
New Revision: 7007

Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
   xfce4-power-manager/trunk/src/xfpm-cpu.c
   xfce4-power-manager/trunk/src/xfpm-dpms.c
   xfce4-power-manager/trunk/src/xfpm-dpms.h
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-supply.c
   xfce4-power-manager/trunk/src/xfpm-xfconf.c
   xfce4-power-manager/trunk/src/xfpm-xfconf.h
Log:
Move the configuration loading to xfpm-xfconf

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/ChangeLog	2009-03-27 14:37:29 UTC (rev 7007)
@@ -1,4 +1,7 @@
 
+2009-03-27 15:37 Ali aliov at xfce.org 
+	 * : Move the configuration loading to xfpm-xfconf
+
 2009-03-25 13:03 Ali aliov at xfce.org 
 	 * : Added xfpm-errors quark for the common errors
 

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -64,10 +64,8 @@
     gchar 	    *icon_prefix;
     
     gboolean         adapter_present;
-    
-    XfpmShowIcon     show_icon;
     XfpmBatteryState state;
-    guint            critical_level;
+   
 };
 
 enum
@@ -101,17 +99,20 @@
 static void
 xfpm_battery_refresh_visible_icon (XfpmBattery *battery)
 {
+    XfpmShowIcon show_icon;
     gboolean visible = TRUE;
     
-    if ( battery->priv->show_icon == SHOW_ICON_ALWAYS )
+    show_icon = xfpm_xfconf_get_property_enum (battery->priv->conf, SHOW_TRAY_ICON_CFG);
+    
+    if ( show_icon == SHOW_ICON_ALWAYS )
     	visible = TRUE;
-    else if ( battery->priv->show_icon == SHOW_ICON_WHEN_BATTERY_PRESENT )
+    else if ( show_icon == SHOW_ICON_WHEN_BATTERY_PRESENT )
     {
 	if ( battery->priv->state == BATTERY_NOT_PRESENT )
 	    visible = FALSE;
 	else visible = TRUE;
     }
-    else if ( battery->priv->show_icon == SHOW_ICON_WHEN_BATTERY_CHARGING_DISCHARGING )
+    else if ( show_icon == SHOW_ICON_WHEN_BATTERY_CHARGING_DISCHARGING )
     {
 	if ( battery->priv->state == BATTERY_FULLY_CHARGED )
 	    visible = FALSE;
@@ -254,6 +255,8 @@
 				   guint percentage, guint time)
 {
     gchar *tip;
+    guint critical_level = xfpm_xfconf_get_property_int (battery->priv->conf, CRITICAL_POWER_LEVEL );
+    
     if ( !is_present )
     {
 	tip = g_strdup_printf ("%s %s", _get_battery_name(battery->priv->type), _("is not present"));
@@ -265,7 +268,7 @@
     XfpmBatteryState state = battery->priv->state;
     const gchar *str = xfpm_battery_get_battery_state (&state, is_charging, is_discharging,
  						       last_full, current_charge, percentage, 
-						       battery->priv->critical_level);
+						       critical_level);
     tip = g_strdup_printf("%i%% %s %s", percentage, _get_battery_name(battery->priv->type), str);
     //FIXME: Time for misc batteries
     xfpm_tray_icon_set_tooltip (battery->priv->icon, tip);
@@ -281,6 +284,8 @@
 {
     gchar *tip;
     const gchar *str;
+    guint critical_level = xfpm_xfconf_get_property_int (battery->priv->conf, CRITICAL_POWER_LEVEL );
+    
     XfpmBatteryState state = battery->priv->state;
     
     if ( !is_present )
@@ -290,7 +295,7 @@
     }
 
     str = xfpm_battery_get_battery_state (&state, is_charging, is_discharging,
-					  last_full, current_charge, percentage, battery->priv->critical_level);
+					  last_full, current_charge, percentage, critical_level);
     
     if ( time != 0  && time <= 28800 /* 8 hours */ && 
 	 state != BATTERY_FULLY_CHARGED && state != BATTERY_NOT_FULLY_CHARGED )
@@ -432,53 +437,12 @@
 }
 
 static void
-xfpm_battery_property_changed_cb (XfconfChannel *channel, gchar *property,
-				  GValue *value, XfpmBattery *battery)
+xfpm_battery_tray_icon_settings_changed (XfpmXfconf *conf, XfpmBattery *battery)
 {
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-    	return;
-
-    if ( xfpm_strequal (property, SHOW_TRAY_ICON_CFG) )
-    {
-	guint val = g_value_get_uint (value);
-	battery->priv->show_icon = val;
-	xfpm_battery_refresh_visible_icon (battery);
-    }
-    else if ( xfpm_strequal( property, CRITICAL_POWER_LEVEL) )
-    {
-	guint val = g_value_get_uint (value);
-	if ( val > 20 )
-	{
-	    g_warning ("Value %d for property %s is out of range \n", val, CRITICAL_POWER_LEVEL);
-	    battery->priv->critical_level = 10;
-	}
-	else 
-	    battery->priv->critical_level = val;
-    }
+    xfpm_battery_refresh_visible_icon (battery);
 }
 
 static void
-xfpm_battery_load_configuration (XfpmBattery *battery)
-{
-    battery->priv->show_icon =
-    	xfconf_channel_get_uint (battery->priv->conf->channel, SHOW_TRAY_ICON_CFG, SHOW_ICON_WHEN_BATTERY_PRESENT);
-    if ( battery->priv->show_icon < 0 || battery->priv->show_icon > 3 )
-    {
-	g_warning ("Invalid value %d for property %s, using default\n", battery->priv->show_icon, SHOW_TRAY_ICON_CFG);
-	xfconf_channel_set_uint (battery->priv->conf->channel, CRITICAL_BATT_ACTION_CFG, SHOW_ICON_WHEN_BATTERY_PRESENT);
-    }
-    
-    battery->priv->critical_level =
-	xfconf_channel_get_uint (battery->priv->conf->channel, CRITICAL_POWER_LEVEL, 0);
-	
-    if ( battery->priv->critical_level <0 || battery->priv->critical_level > 20 )
-    {
-	g_warning ("Value %d for property %s is out of range \n", battery->priv->critical_level, CRITICAL_POWER_LEVEL);
-	battery->priv->critical_level = 10;
-    }
-}
-
-static void
 xfpm_battery_class_init(XfpmBatteryClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -516,7 +480,6 @@
     battery->priv = XFPM_BATTERY_GET_PRIVATE(battery);
     
     battery->priv->icon      = xfpm_tray_icon_new ();
-    battery->priv->show_icon = SHOW_ICON_WHEN_BATTERY_PRESENT;
     battery->priv->adapter   = xfpm_adapter_new ();
     battery->priv->conf      = xfpm_xfconf_new ();
     
@@ -524,11 +487,6 @@
     
     g_signal_connect (battery->priv->adapter ,"adapter-changed",
 		      G_CALLBACK(xfpm_battery_adapter_changed_cb), battery);
-		      
-    g_signal_connect (battery->priv->conf->channel ,"property-changed",
-		      G_CALLBACK(xfpm_battery_property_changed_cb), battery);
-		      
-    xfpm_battery_load_configuration (battery);
 }
 
 static void
@@ -571,19 +529,13 @@
 		      
     g_signal_connect (G_OBJECT(xfpm_tray_icon_get_tray_icon(battery->priv->icon)), "popup-menu",
 		      G_CALLBACK(xfpm_battery_popup_menu_cb), battery);
+		      
+    g_signal_connect (G_OBJECT(battery->priv->conf), "tray-icon-settings-changed",
+		      G_CALLBACK(xfpm_battery_tray_icon_settings_changed), battery);
     
     return battery;
 }
 
-void xfpm_battery_set_show_icon (XfpmBattery *battery, XfpmShowIcon show_icon)
-{
-    g_return_if_fail (XFPM_IS_BATTERY(battery));
-    
-    battery->priv->show_icon = show_icon;
-    
-    xfpm_battery_refresh_visible_icon (battery);
-}
-
 const HalBattery*
 xfpm_battery_get_device (XfpmBattery *battery)
 {
@@ -629,10 +581,3 @@
     
     gtk_widget_show_all (info);
 }
-
-void xfpm_battery_set_critical_level (XfpmBattery *battery, guint8 critical_level)
-{
-    g_return_if_fail (XFPM_IS_BATTERY(battery));
-    
-    battery->priv->critical_level = critical_level;
-}

Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -81,69 +81,17 @@
     
     gboolean        on_battery;
     
-    guint           on_battery_timeout;
-    guint 	    on_ac_timeout;
 };
 
 enum
 {
-    TIMEOUT_INPUT,
+    TIMEOUT_INPUT = 0,
     TIMEOUT_ON_AC_ID,
     TIMEOUT_ON_BATTERY_ID
 };
 
 G_DEFINE_TYPE(XfpmBrightnessHal, xfpm_brightness_hal, G_TYPE_OBJECT)
 
-static void
-xfpm_brightness_hal_class_init(XfpmBrightnessHalClass *klass)
-{
-    GObjectClass *object_class = G_OBJECT_CLASS(klass);
-
-    object_class->finalize = xfpm_brightness_hal_finalize;
-
-    g_type_class_add_private(klass,sizeof(XfpmBrightnessHalPrivate));
-}
-
-static void
-xfpm_brightness_hal_init(XfpmBrightnessHal *brg)
-{
-    brg->priv = XFPM_BRIGHTNESS_HAL_GET_PRIVATE(brg);
-    
-    brg->priv->proxy    	= NULL;
-    brg->priv->idle             = NULL;
-    brg->priv->hw_found 	= FALSE;
-    brg->priv->on_battery       = FALSE;
-    brg->priv->block            = FALSE;
-    brg->priv->brightness_in_hw = FALSE;
-    brg->priv->max_level        = 0;
-    brg->priv->inhibited        = FALSE;
-}
-
-static void
-xfpm_brightness_hal_finalize (GObject *object)
-{
-    XfpmBrightnessHal *brg;
-
-    brg = XFPM_BRIGHTNESS_HAL(object);
-    
-    if ( brg->priv->proxy )
-	g_object_unref (brg->priv->proxy);
-    
-    if ( brg->priv->idle )
-	g_object_unref (brg->priv->idle);
-	
-    if ( brg->priv->conf )
-	g_object_unref (brg->priv->conf);
-	
-    if (brg->priv->adapter)
-	g_object_unref (brg->priv->adapter);
-	
-    if ( brg->priv->inhibit )
-	g_object_unref (brg->priv->inhibit);
-	
-    G_OBJECT_CLASS(xfpm_brightness_hal_parent_class)->finalize(object);
-}
-
 static gint 
 xfpm_brightness_hal_get_level (XfpmBrightnessHal *brg)
 {
@@ -307,7 +255,7 @@
 {
     gint level;
     
-    if (brg->priv->block )
+    if (brg->priv->block)
 	return;
     
     if ( brg->priv->inhibited )
@@ -323,69 +271,56 @@
 }
 
 static void
-xfpm_brightness_hal_alarm_timeout_cb (XfpmIdle *idle, guint id, XfpmBrightnessHal *brg)
+xfpm_brightness_timeout_on_ac (XfpmBrightnessHal *brg)
 {
     gint level;
     
-    if ( brg->priv->block )
-	brg->priv->block = FALSE;
+    if ( brg->priv->on_battery )
+	    return;
     
     level = xfpm_brightness_hal_get_level(brg);
-    TRACE("Alarm timeout id=%d\n", id);
     
-    if ( brg->priv->inhibited )
-	return;
-    
-    if ( id == TIMEOUT_ON_AC_ID && brg->priv->on_ac_timeout != 9)
+    if ( level != 0 )
     {
-	if ( brg->priv->on_battery )
-	    return;
-	    
-	if ( level != 0 )
-	{
-	    TRACE ("Reducing brightness, on AC power\n");
-	    xfpm_brightness_hal_set_level(brg, 0);
-	}
+	TRACE ("Reducing brightness, on AC power\n");
+	xfpm_brightness_hal_set_level(brg, 0);
     }
-    else if ( id == TIMEOUT_ON_BATTERY_ID && brg->priv->on_battery_timeout != 9)
-    {
-	if ( !brg->priv->on_battery )
+}
+
+static void
+xfpm_brightness_timeout_on_battery (XfpmBrightnessHal *brg)
+{
+    gint level;
+    
+    if ( !brg->priv->on_battery )
 	    return;
-	
-	if ( level != 0 )
-	{
-	    xfpm_brightness_hal_set_level(brg, 0);
-	    TRACE ("Reducing brightness, on battery power\n");
-	}
+    
+    level = xfpm_brightness_hal_get_level(brg);
+    
+    if ( level != 0 )
+    {
+	xfpm_brightness_hal_set_level(brg, 0);
+	TRACE ("Reducing brightness, on battery power\n");
     }
 }
 
 static void
-xfpm_brightness_hal_adapter_changed_cb (XfpmAdapter *adapter, gboolean present, XfpmBrightnessHal *brg)
+xfpm_brightness_hal_alarm_timeout_cb (XfpmIdle *idle, guint id, XfpmBrightnessHal *brg)
 {
-    brg->priv->on_battery = !present;
+    if ( brg->priv->block )
+	brg->priv->block = FALSE;
+    
+    if ( brg->priv->inhibited )
+	return;
+    
+    id == TIMEOUT_ON_AC_ID ? xfpm_brightness_timeout_on_ac (brg) :
+			     xfpm_brightness_timeout_on_battery (brg);
 }
 
 static void
-xfpm_brightness_hal_load_config (XfpmBrightnessHal *brg)
+xfpm_brightness_hal_adapter_changed_cb (XfpmAdapter *adapter, gboolean present, XfpmBrightnessHal *brg)
 {
-    brg->priv->on_ac_timeout =
-	xfconf_channel_get_uint (brg->priv->conf->channel, BRIGHTNESS_ON_AC, 9);
-	
-    if ( brg->priv->on_ac_timeout > 120 || brg->priv->on_ac_timeout < 9)
-    {
-	g_warning ("Value %d for %s is out of range", brg->priv->on_ac_timeout, BRIGHTNESS_ON_AC );
-	brg->priv->on_ac_timeout = 9;
-    }
-    
-    brg->priv->on_battery_timeout =
-	xfconf_channel_get_uint (brg->priv->conf->channel, BRIGHTNESS_ON_BATTERY, 10);
-	
-    if ( brg->priv->on_battery_timeout > 120 || brg->priv->on_battery_timeout < 9)
-    {
-	g_warning ("Value %d for %s is out of range", brg->priv->on_battery_timeout, BRIGHTNESS_ON_BATTERY );
-	brg->priv->on_battery_timeout = 10;
-    }
+    brg->priv->on_battery = !present;
 }
 
 static void
@@ -396,61 +331,61 @@
 }
 
 static void
+xfpm_brightness_get_user_timeouts (XfpmBrightnessHal *brg, guint16 *on_ac, guint16 *on_battery)
+{
+    *on_ac      = xfpm_xfconf_get_property_int (brg->priv->conf, BRIGHTNESS_ON_AC);
+    *on_battery = xfpm_xfconf_get_property_int (brg->priv->conf, BRIGHTNESS_ON_BATTERY);
+}
+
+static void
 xfpm_brightness_hal_set_timeouts (XfpmBrightnessHal *brg )
 {
-    xfpm_idle_set_alarm (brg->priv->idle, TIMEOUT_ON_AC_ID, brg->priv->on_ac_timeout * 1000);
+    guint16 on_ac, on_battery;
     
-    xfpm_idle_set_alarm (brg->priv->idle, TIMEOUT_ON_BATTERY_ID, brg->priv->on_battery_timeout * 1000);
+    xfpm_brightness_get_user_timeouts (brg, &on_ac, &on_battery);
     
+    if ( on_ac == 9 )
+	on_ac = 0;
+    if ( on_battery == 9 )
+	on_battery = 0;
+    
+    xfpm_idle_set_alarm (brg->priv->idle, TIMEOUT_ON_AC_ID, on_ac * 1000);
+    
+    xfpm_idle_set_alarm (brg->priv->idle, TIMEOUT_ON_BATTERY_ID, on_battery * 1000);
+    
     xfpm_idle_alarm_reset_all (brg->priv->idle);
 }
 
 static void
-xfpm_brightness_hal_property_changed_cb (XfconfChannel *channel, gchar *property, 
-				         GValue *value, XfpmBrightnessHal *brg)
+xfpm_brightness_hal_settings_changed_cb (XfpmXfconf *conf, XfpmBrightnessHal *brg)
 {
-    gboolean set = FALSE;
-    
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-        return;
-    
-    if ( xfpm_strequal (property, BRIGHTNESS_ON_AC ) )
-    {
-	guint val = g_value_get_uint (value);
-	
-	if ( val > 120 || val < 9)
-	{
-	    g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_AC );
-	}
-	else
-	{
-	    brg->priv->on_ac_timeout = val;
-	}
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, BRIGHTNESS_ON_BATTERY ) )
-    {
-	guint val = g_value_get_uint (value);
-	
-	if ( val > 120 || val < 9)
-	{
-	    g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_BATTERY );
-	}
-	else
-	    brg->priv->on_battery_timeout = val;
-	set = TRUE;
-    }
-    
-    if ( set )
-	xfpm_brightness_hal_set_timeouts (brg);
+    xfpm_brightness_hal_set_timeouts (brg);
 }
 
-XfpmBrightnessHal *
-xfpm_brightness_hal_new ()
+static void
+xfpm_brightness_hal_class_init(XfpmBrightnessHalClass *klass)
 {
-    XfpmBrightnessHal *brg = NULL;
-    brg = g_object_new (XFPM_TYPE_BRIGHTNESS_HAL, NULL);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+    object_class->finalize = xfpm_brightness_hal_finalize;
+
+    g_type_class_add_private(klass,sizeof(XfpmBrightnessHalPrivate));
+}
+
+static void
+xfpm_brightness_hal_init(XfpmBrightnessHal *brg)
+{
+    brg->priv = XFPM_BRIGHTNESS_HAL_GET_PRIVATE(brg);
     
+    brg->priv->proxy    	= NULL;
+    brg->priv->idle             = NULL;
+    brg->priv->hw_found 	= FALSE;
+    brg->priv->on_battery       = FALSE;
+    brg->priv->block            = FALSE;
+    brg->priv->brightness_in_hw = FALSE;
+    brg->priv->max_level        = 0;
+    brg->priv->inhibited        = FALSE;
+    
     xfpm_brightness_hal_setup (brg);
 
     if ( brg->priv->hw_found || brg->priv->max_level != 0 )
@@ -478,10 +413,8 @@
 	g_signal_connect (brg->priv->idle, "reset",
 			  G_CALLBACK(xfpm_brightness_hal_reset_cb), brg);
 			  
-	xfpm_brightness_hal_load_config (brg);
-	
-	g_signal_connect (brg->priv->conf->channel, "property-changed", 
-			  G_CALLBACK(xfpm_brightness_hal_property_changed_cb), brg);
+	g_signal_connect (brg->priv->conf, "brightness-settings-changed", 
+			  G_CALLBACK(xfpm_brightness_hal_settings_changed_cb), brg);
 			  
 	xfpm_brightness_hal_set_timeouts (brg);
     }
@@ -489,7 +422,38 @@
     {
 	TRACE("No lcd brightness control found in the system");
     }
+}
+
+static void
+xfpm_brightness_hal_finalize (GObject *object)
+{
+    XfpmBrightnessHal *brg;
+
+    brg = XFPM_BRIGHTNESS_HAL(object);
     
+    if ( brg->priv->proxy )
+	g_object_unref (brg->priv->proxy);
+    
+    if ( brg->priv->idle )
+	g_object_unref (brg->priv->idle);
+	
+    if ( brg->priv->conf )
+	g_object_unref (brg->priv->conf);
+	
+    if (brg->priv->adapter)
+	g_object_unref (brg->priv->adapter);
+	
+    if ( brg->priv->inhibit )
+	g_object_unref (brg->priv->inhibit);
+	
+    G_OBJECT_CLASS(xfpm_brightness_hal_parent_class)->finalize(object);
+}
+
+XfpmBrightnessHal *
+xfpm_brightness_hal_new ()
+{
+    XfpmBrightnessHal *brg = NULL;
+    brg = g_object_new (XFPM_TYPE_BRIGHTNESS_HAL, NULL);
     return brg;
 }
 

Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -62,8 +62,6 @@
     HalIface      *iface;
     
     gboolean 	   on_battery;
-    gboolean 	   power_save;
-    
     guint8         cpu_governors;
 };
 
@@ -73,6 +71,7 @@
 xfpm_cpu_set_governor (XfpmCpu *cpu, const gchar *governor)
 {
     GError *error = NULL;
+    TRACE("Settings cpu governor to %s", governor);
     
     if (! hal_iface_set_cpu_governor(cpu->priv->iface, governor, &error))
     {
@@ -93,79 +92,45 @@
     return CPU_UNKNOWN;
 }
 
-static void
-xfpm_cpu_update_governor (XfpmCpu *cpu)
+static XfpmCpuGovernor
+xfpm_cpu_get_current_governor (XfpmCpu *cpu)
 {
-    GError *error = NULL;
-    gboolean cpu_freq_iface;
+    gchar *current_governor = NULL;
+    XfpmCpuGovernor governor_enum;
     
-    g_object_get (G_OBJECT(cpu->priv->iface), 
-		  "cpu-freq-iface", &cpu_freq_iface,
-		  NULL);
-		  
-    if ( !cpu_freq_iface)
-	return;
+    current_governor = hal_iface_get_cpu_current_governor (cpu->priv->iface, NULL);
     
-    gchar *current_governor = hal_iface_get_cpu_current_governor (cpu->priv->iface, &error);
-    
-    if ( error )
-    {
-	g_warning ("Get cpu governor failed: %s.", error->message);
-	g_error_free (error);
-	return;
-    }
-    
     if ( !current_governor )
-    	return;
-
-    XfpmCpuGovernor current = _governor_name_to_enum (current_governor);
-
-    if ( !cpu->priv->power_save || ( !cpu->priv->on_battery && cpu->priv->power_save) )
     {
-	if ( cpu->priv->cpu_governors & CPU_ONDEMAND )
-	    xfpm_cpu_set_governor (cpu, "ondemand");
-	else if ( cpu->priv->cpu_governors & CPU_PERFORMANCE )
-	    xfpm_cpu_set_governor (cpu, "performance");
-	else
-	    g_critical ("No conveniant cpu governor found\n");
-	return;
+	g_warning ("Unable to get current governor");
+	return CPU_UNKNOWN;
     }
-
-    if ( cpu->priv->on_battery && cpu->priv->power_save )
-    {
-    	if ( current != CPU_POWERSAVE )
-	{
-	    TRACE ("Settings cpu governor to powersave");
-	    xfpm_cpu_set_governor (cpu, "powersave");
-	}
-    }
+    
+    governor_enum = _governor_name_to_enum (current_governor);
+    
     g_free (current_governor);
+    return governor_enum;
 }
 
-static gboolean
+/*
+ * Get the available CPU governors on the system
+ */
+static void
 xfpm_cpu_get_available_governors (XfpmCpu *cpu)
 {
-    GError *error = NULL;
-    gchar **governors =
-    	hal_iface_get_cpu_governors (cpu->priv->iface, &error);
+    int i;
+    gchar **governors = NULL;
+    governors = hal_iface_get_cpu_governors (cpu->priv->iface, NULL);
 	
-    if ( error )
+    if ( !governors || !governors[0])
     {
-	g_critical ("Error getting available cpu governors");
-	return FALSE;
-    }
-	
-    if ( !governors )
-    {
     	g_critical ("Unable to get CPU governors\n");
-	return FALSE;
+	return;
     }
     
-    int i =0 ;
     for ( i = 0; governors[i]; i++)
     {
     	TRACE("found CPU governor %s", governors[i]);
-	
 	if (xfpm_strequal(governors[i], "powersave") )
 	    cpu->priv->cpu_governors |= CPU_POWERSAVE;
 	else if ( xfpm_strequal(governors[i], "ondemand") )
@@ -173,38 +138,13 @@
 	else if ( xfpm_strequal(governors[i], "performance") )
 	    cpu->priv->cpu_governors |= CPU_PERFORMANCE;
     }
-
     hal_iface_free_string_array (governors);
-    
-    return TRUE;
 }
 
-static void
-xfpm_cpu_load_configuration (XfpmCpu *cpu)
+static gboolean
+xfpm_cpu_check_iface (XfpmCpu *cpu)
 {
-    cpu->priv->power_save =
-    	xfconf_channel_get_bool (cpu->priv->conf->channel, POWER_SAVE_ON_BATTERY, TRUE);
-}
-
-static void
-xfpm_cpu_property_changed_cb (XfconfChannel *channel, gchar *property, GValue *value, XfpmCpu *cpu)
-{
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-        return;
-	
-    if ( xfpm_strequal(property, POWER_SAVE_ON_BATTERY) )
-    {
-	gboolean val = g_value_get_boolean (value);
-	cpu->priv->power_save = val;
-	xfpm_cpu_update_governor(cpu);
-    }
-}
-
-static void
-xfpm_cpu_check (XfpmCpu *cpu)
-{
     gboolean caller_privilege, cpu_freq_iface;
-    
     g_object_get (G_OBJECT(cpu->priv->iface), 
 		  "caller-privilege", &caller_privilege,
 		  "cpu-freq-iface", &cpu_freq_iface,
@@ -213,32 +153,69 @@
     if ( !caller_privilege )
     {
 	g_warning ("Using CPU FREQ interface permission denied");
-	goto out;
+	return FALSE;
     }
     
     if (!cpu_freq_iface)
     {
 	g_warning ("CPU FREQ interface cannot be used");
-	goto out;
+	return FALSE;
     }
     
-    if ( !xfpm_cpu_get_available_governors (cpu) )
+    xfpm_cpu_get_available_governors (cpu);
+    
+    if ( !cpu->priv->cpu_governors & CPU_POWERSAVE || 
+	 !cpu->priv->cpu_governors & CPU_ONDEMAND  ||
+	 !cpu->priv->cpu_governors & CPU_PERFORMANCE )
     {
-	g_critical ("Failed to handle cpu governors");
-	goto out;
+	g_warning ("No convenient cpu governors found on the system, cpu frequency control will be disabled");
+	return FALSE;
     }
-out:
-	;
+    return TRUE;
 }
 
 static void
+xfpm_cpu_set_power_save (XfpmCpu *cpu)
+{
+    if ( xfpm_cpu_get_current_governor (cpu) != CPU_POWERSAVE )
+	xfpm_cpu_set_governor (cpu, "powersave");
+}
+
+static void
+xfpm_cpu_set_performance_ondemand (XfpmCpu *cpu)
+{
+    if ( xfpm_cpu_get_current_governor (cpu) != CPU_ONDEMAND )
+	xfpm_cpu_set_governor (cpu, "ondemand");
+}
+
+static void
+xfpm_cpu_refresh (XfpmCpu *cpu)
+{
+    gboolean power_save = xfpm_xfconf_get_property_bool (cpu->priv->conf, POWER_SAVE_ON_BATTERY);
+    
+    if (!power_save)
+	return;
+	
+    if ( cpu->priv->on_battery )
+	xfpm_cpu_set_power_save (cpu);
+    else 
+	xfpm_cpu_set_performance_ondemand (cpu);
+}
+
+static void
 xfpm_cpu_adapter_changed_cb (XfpmAdapter *adapter, gboolean is_present, XfpmCpu *cpu)
 {
     cpu->priv->on_battery = !is_present;
-    xfpm_cpu_update_governor (cpu);
+    xfpm_cpu_refresh (cpu);
 }
 
 static void
+xfpm_cpu_power_save_settings_changed_cb (XfpmXfconf *conf, XfpmCpu *cpu)
+{
+    xfpm_cpu_refresh (cpu);
+}
+
+static void
 xfpm_cpu_class_init(XfpmCpuClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -252,23 +229,24 @@
 xfpm_cpu_init(XfpmCpu *cpu)
 {
     cpu->priv = XFPM_CPU_GET_PRIVATE(cpu);
-    
     cpu->priv->cpu_governors = 0;
+    
     cpu->priv->iface         = hal_iface_new ();
-    cpu->priv->adapter       = xfpm_adapter_new ();
     
-    cpu->priv->conf = xfpm_xfconf_new ();
-    xfpm_cpu_load_configuration (cpu);
+    if ( xfpm_cpu_check_iface (cpu))
+    {
+	cpu->priv->adapter       = xfpm_adapter_new ();
+	cpu->priv->conf 	 = xfpm_xfconf_new ();
+	
+	g_signal_connect (cpu->priv->adapter, "adapter-changed",
+			  G_CALLBACK(xfpm_cpu_adapter_changed_cb), cpu);
+			  
+	g_signal_connect (cpu->priv->conf, "power-save-settings-changed",
+			  G_CALLBACK(xfpm_cpu_power_save_settings_changed_cb), cpu);
+	
+	cpu->priv->on_battery = !xfpm_adapter_get_present (cpu->priv->adapter);
+    }
     
-    g_signal_connect (cpu->priv->conf->channel, "property-changed",
-		      G_CALLBACK(xfpm_cpu_property_changed_cb), cpu);
-		      
-    g_signal_connect (cpu->priv->adapter, "adapter-changed",
-		      G_CALLBACK(xfpm_cpu_adapter_changed_cb), cpu);
-    
-    cpu->priv->on_battery = !xfpm_adapter_get_present (cpu->priv->adapter);
-		
-    xfpm_cpu_check (cpu);
 }
 
 static void

Modified: xfce4-power-manager/trunk/src/xfpm-dpms.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dpms.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-dpms.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -56,8 +56,6 @@
 
 #ifdef HAVE_DPMS
 
-#define CHECK_DPMS_TIMEOUT 120
-
 /* Init */
 static void xfpm_dpms_class_init (XfpmDpmsClass *klass);
 static void xfpm_dpms_init       (XfpmDpms *xfpm_dpms);
@@ -73,17 +71,8 @@
     XfpmInhibit   *inhibit;
     
     gboolean       dpms_capable;
-    gboolean       dpms_enabled;
-    
     gboolean       inhibited;
-    
-    guint16        sleep_on_battery;
-    guint16        off_on_battery;
-    guint16        sleep_on_ac;
-    guint16        off_on_ac;
-    
     gboolean       on_battery;
-    guint8         sleep_dpms_mode; /*0=sleep 1=suspend*/
 };
 
 G_DEFINE_TYPE(XfpmDpms, xfpm_dpms, G_TYPE_OBJECT)
@@ -91,7 +80,7 @@
 static void
 xfpm_dpms_set_timeouts (XfpmDpms *dpms, guint16 standby, guint16 suspend, guint off)
 {
-    CARD16 x_standby = 0 ,x_suspend = 0,x_off = 0;
+    CARD16 x_standby = 0 , x_suspend = 0, x_off = 0;
     
     DPMSGetTimeouts (GDK_DISPLAY(), &x_standby, &x_suspend, &x_off);
     
@@ -102,199 +91,125 @@
 					suspend,
 					off );
     }
-    
 }
 
+/*
+ * Disable DPMS
+ */
 static void
-xfpm_dpms_timeouts_on_battery (XfpmDpms *dpms)
+xfpm_dpms_disable (XfpmDpms *dpms)
 {
-    if ( dpms->priv->sleep_dpms_mode == 0 )
-    {
-	xfpm_dpms_set_timeouts      (dpms, 
-				     dpms->priv->sleep_on_battery ,
-				     0,
-				     dpms->priv->off_on_battery );
-    }
-    else 
-    {
-	xfpm_dpms_set_timeouts 	    (dpms, 
-				     0,
-				     dpms->priv->sleep_on_battery ,
-				     dpms->priv->off_on_battery );
-    }
+    BOOL state;
+    CARD16 power_level;
+    
+    if (!DPMSInfo (GDK_DISPLAY(), &power_level, &state) )
+	g_warning ("Cannot get DPMSInfo");
+	
+    if ( state )
+	DPMSDisable (GDK_DISPLAY());
 }
 
+/*
+ * Enable DPMS
+ */
 static void
-xfpm_dpms_timeouts_on_adapter (XfpmDpms *dpms)
+xfpm_dpms_enable (XfpmDpms *dpms)
 {
-    if ( dpms->priv->sleep_dpms_mode == 0 )
-    {
-	xfpm_dpms_set_timeouts	   (dpms, 
-				    dpms->priv->sleep_on_ac ,
-				    0,
-				    dpms->priv->off_on_ac );
-    }
-    else
-    {
-	xfpm_dpms_set_timeouts     (dpms, 
-				    0,
-				    dpms->priv->sleep_on_ac ,
-				    dpms->priv->off_on_ac );
-    }
+    BOOL state;
+    CARD16 power_level;
+    
+    if (!DPMSInfo (GDK_DISPLAY(), &power_level, &state) )
+	g_warning ("Cannot get DPMSInfo");
+	
+    if ( !state )
+	DPMSEnable (GDK_DISPLAY());
 }
 
-static gboolean
-xfpm_dpms_enable_disable (XfpmDpms *dpms)
+static void
+xfpm_dpms_get_enabled (XfpmDpms *dpms, gboolean *dpms_enabled)
 {
-    BOOL on_off;
-    CARD16 state = 0;
-    
-    if ( !dpms->priv->dpms_capable )
-    	return FALSE;
-	
-    DPMSInfo (GDK_DISPLAY(), &state, &on_off);
-    
-    if ( dpms->priv->inhibited && on_off )
-    {
-	TRACE("Power manager inhibited, disabling DPMS");
-	DPMSDisable (GDK_DISPLAY());
-    }
-    else if ( !on_off && dpms->priv->dpms_enabled && !dpms->priv->inhibited )
-    {
-        TRACE("DPMS is disabled, enabling it: user settings");
-        DPMSEnable(GDK_DISPLAY());
-    } 
-    else if ( on_off && !dpms->priv->dpms_enabled && !dpms->priv->inhibited)
-    {
-        TRACE("DPMS is enabled, disabling it: user settings");
-        DPMSDisable(GDK_DISPLAY());
-    }
-    return TRUE;
+    *dpms_enabled = xfpm_xfconf_get_property_bool (dpms->priv->conf, DPMS_ENABLED_CFG);
 }
 
 static void
-xfpm_dpms_check (XfpmDpms *dpms)
+xfpm_dpms_get_sleep_mode (XfpmDpms *dpms, gboolean *sleep_mode)
 {
-    xfpm_dpms_enable_disable (dpms);
-    
-    if ( dpms->priv->inhibited  == TRUE || dpms->priv->dpms_enabled == FALSE )
-	return;
-    
-    if ( !dpms->priv->on_battery )
-    	xfpm_dpms_timeouts_on_adapter (dpms);
-    else 
-    	xfpm_dpms_timeouts_on_battery (dpms);
+    *sleep_mode = xfpm_xfconf_get_property_bool (dpms->priv->conf, DPMS_SLEEP_MODE);
 }
 
 static void
-xfpm_dpms_value_changed_cb (XfconfChannel *channel, gchar *property,
-			    GValue *value, XfpmDpms *dpms)
+xfpm_dpms_get_configuration_timeouts (XfpmDpms *dpms, guint16 *sleep, guint16 *off )
 {
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-    	return;
-	
-    gboolean set = FALSE;
-    
-    if ( xfpm_strequal (property, DPMS_ENABLED_CFG) )
-    {
-	gboolean val = g_value_get_boolean (value);
-	dpms->priv->dpms_enabled = val;
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, ON_AC_DPMS_SLEEP) )
-    {
-	guint val = g_value_get_uint (value);
-	dpms->priv->sleep_on_ac = MIN(3600, val * 60);
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, ON_AC_DPMS_OFF) )
-    {
-	guint val = g_value_get_uint (value);
-	dpms->priv->off_on_ac = MIN(3600, val * 60);
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, ON_BATT_DPMS_SLEEP) )
-    {
-	guint val = g_value_get_uint (value);
-	dpms->priv->sleep_on_battery = MIN(3600, val * 60);
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, ON_BATT_DPMS_OFF) )
-    {
-	guint val = g_value_get_uint (value);
-	dpms->priv->off_on_battery = MIN (3600, val * 60);
-	set = TRUE;
-    }
-    else if ( xfpm_strequal (property, DPMS_SLEEP_MODE) )
-    {
-	const gchar *str = g_value_get_string (value);
-	if ( xfpm_strequal (str, "sleep" ) )
-	{
-	    dpms->priv->sleep_dpms_mode = 0;
-	}
-	else if ( xfpm_strequal (str, "suspend") )
-	{
-	    dpms->priv->sleep_dpms_mode = 1;
-	}
-	else
-	{
-	    g_critical("Invalid value %s for property %s\n", str, DPMS_SLEEP_MODE);
-	    dpms->priv->sleep_dpms_mode = 0;
-	}
-	set = TRUE;
-    }
-    
-    if ( set )
-    	xfpm_dpms_check (dpms);
+    *sleep   = xfpm_xfconf_get_property_int  (dpms->priv->conf,
+					      dpms->priv->on_battery ? ON_BATT_DPMS_SLEEP :
+					      ON_AC_DPMS_SLEEP);
+					      
+    *off     = xfpm_xfconf_get_property_int  (dpms->priv->conf,
+					      dpms->priv->on_battery ? ON_BATT_DPMS_OFF :
+					      ON_AC_DPMS_OFF);
 }
 
 static void
-xfpm_dpms_load_configuration (XfpmDpms *dpms)
+xfpm_dpms_refresh (XfpmDpms *dpms)
 {
-    dpms->priv->dpms_enabled =
-    	xfconf_channel_get_bool (dpms->priv->conf->channel, DPMS_ENABLED_CFG, TRUE);
+    gboolean enabled;
+    guint16 off_timeout;
+    guint16 sleep_timeout;
+    gboolean sleep_mode;
     
-    dpms->priv->sleep_on_battery = 
-    	MIN( xfconf_channel_get_uint( dpms->priv->conf->channel, ON_BATT_DPMS_SLEEP, 3) * 60, 3600);
-
-    dpms->priv->off_on_battery = 
-    	MIN(xfconf_channel_get_uint( dpms->priv->conf->channel, ON_BATT_DPMS_OFF, 5) * 60, 3600);
-	
-    dpms->priv->sleep_on_ac = 
-    	MIN(xfconf_channel_get_uint( dpms->priv->conf->channel, ON_AC_DPMS_SLEEP, 10) * 60, 3600);
+    if ( dpms->priv->inhibited )
+    {
+	xfpm_dpms_disable (dpms);
+	return;
+    }
     
-    dpms->priv->off_on_ac = 
-    	MIN(xfconf_channel_get_uint( dpms->priv->conf->channel, ON_AC_DPMS_OFF, 15) * 60, 3600);
-	
-    gchar *str = xfconf_channel_get_string (dpms->priv->conf->channel, DPMS_SLEEP_MODE, "sleep");
+    xfpm_dpms_get_enabled (dpms, &enabled);
     
-    if ( xfpm_strequal (str, "sleep" ) )
+    if ( !enabled )
     {
-	dpms->priv->sleep_dpms_mode = 0;
+	xfpm_dpms_disable (dpms);
+	return;
     }
-    else if ( xfpm_strequal (str, "suspend") )
+        
+    xfpm_dpms_enable (dpms);
+    xfpm_dpms_get_configuration_timeouts (dpms, &sleep_timeout, &off_timeout);
+    xfpm_dpms_get_sleep_mode (dpms, &sleep_mode);
+    
+    if (sleep_mode == TRUE )
     {
-	dpms->priv->sleep_dpms_mode = 1;
+	xfpm_dpms_set_timeouts	   (dpms, 
+				    sleep_timeout,
+				    0,
+				    off_timeout);
     }
     else
     {
-	g_critical("Invalid value %s for property %s\n", str, DPMS_SLEEP_MODE);
-	dpms->priv->sleep_dpms_mode = 0;
+	xfpm_dpms_set_timeouts     (dpms, 
+				    0,
+				    sleep_timeout,
+				    off_timeout );
     }
-    g_free (str);
 }
 
 static void
+xfpm_dpms_settings_changed_cb (XfpmXfconf *conf, XfpmDpms *dpms)
+{
+    xfpm_dpms_refresh (dpms);
+}
+
+static void
 xfpm_dpms_adapter_changed_cb (XfpmAdapter *adapter, gboolean present, XfpmDpms *dpms)
 {
     dpms->priv->on_battery = !present;
+    xfpm_dpms_refresh (dpms);
 }
 
 static void
 xfpm_dpms_inhibit_changed_cb (XfpmInhibit *inhibit, gboolean inhibited, XfpmDpms *dpms)
 {
     dpms->priv->inhibited = inhibited;
-    xfpm_dpms_enable_disable (dpms);
+    
+    xfpm_dpms_refresh (dpms);
 }
 
 static void
@@ -307,22 +222,31 @@
     g_type_class_add_private(klass,sizeof(XfpmDpmsPrivate));
 }
 
+/*
+ * Check if the display is DPMS capabale if not do nothing.
+ */
 static void
 xfpm_dpms_init(XfpmDpms *dpms)
 {
     dpms->priv = XFPM_DPMS_GET_PRIVATE(dpms);
     
     dpms->priv->dpms_capable = DPMSCapable (GDK_DISPLAY());
-    dpms->priv->adapter = xfpm_adapter_new ();
-    dpms->priv->inhibit = xfpm_inhibit_new ();
     
-    g_signal_connect (dpms->priv->inhibit, "has-inhibit-changed",
-		      G_CALLBACK(xfpm_dpms_inhibit_changed_cb), dpms);
+    if ( dpms->priv->dpms_capable )
+    {
+	dpms->priv->adapter = xfpm_adapter_new ();
+	dpms->priv->inhibit = xfpm_inhibit_new ();
+	dpms->priv->conf    = xfpm_xfconf_new  ();
     
-    g_signal_connect (dpms->priv->adapter, "adapter-changed",
-		      G_CALLBACK(xfpm_dpms_adapter_changed_cb), dpms);
-		      
-    dpms->priv->conf = NULL;
+	g_signal_connect (dpms->priv->inhibit, "has-inhibit-changed",
+			  G_CALLBACK(xfpm_dpms_inhibit_changed_cb), dpms);
+    
+	g_signal_connect (dpms->priv->adapter, "adapter-changed",
+			  G_CALLBACK(xfpm_dpms_adapter_changed_cb), dpms);
+			  
+	g_signal_connect (dpms->priv->conf, "dpms-settings-changed",
+			  G_CALLBACK (xfpm_dpms_settings_changed_cb), dpms);
+    }
 }
 
 static void
@@ -337,6 +261,9 @@
 	
     if ( dpms->priv->adapter )
 	g_object_unref (dpms->priv->adapter);
+	
+    if ( dpms->priv->inhibit )
+	g_object_unref ( dpms->priv->inhibit);
 
     G_OBJECT_CLASS(xfpm_dpms_parent_class)->finalize(object);
 }
@@ -346,39 +273,17 @@
 {
     XfpmDpms *dpms = NULL;
     dpms = g_object_new (XFPM_TYPE_DPMS, NULL);
-    
-    if ( !dpms->priv->dpms_capable )
-    {
-    	g_warning ("Display dpms incapable\n");
-    	goto out;
-    }
-
-    dpms->priv->conf = xfpm_xfconf_new ();
-    xfpm_dpms_load_configuration (dpms);
-    
-    g_signal_connect (dpms->priv->conf->channel, "property-changed",
-		      G_CALLBACK(xfpm_dpms_value_changed_cb), dpms);
-		      
-    g_timeout_add_seconds ( CHECK_DPMS_TIMEOUT,
-    			    (GSourceFunc) xfpm_dpms_enable_disable, dpms);
-out:
     return dpms;
 }
 
-void xfpm_dpms_set_on_battery  (XfpmDpms *dpms, gboolean on_battery)
-{
-    g_return_if_fail (XFPM_IS_DPMS(dpms));
-    
-    dpms->priv->on_battery = on_battery;
-    
-    xfpm_dpms_check (dpms);
-}
-
+/*
+ * Get if the display is DPMS capable. if not the dpms
+ * object is freed by xfpm-engine
+ */
 gboolean xfpm_dpms_capable (XfpmDpms *dpms)
 {
     g_return_val_if_fail (XFPM_IS_DPMS(dpms), FALSE);
     
     return dpms->priv->dpms_capable;
 }
-
 #endif /* HAVE_DPMS */

Modified: xfce4-power-manager/trunk/src/xfpm-dpms.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dpms.h	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-dpms.h	2009-03-27 14:37:29 UTC (rev 7007)
@@ -55,9 +55,8 @@
 GType           xfpm_dpms_get_type        (void) G_GNUC_CONST;
 XfpmDpms       *xfpm_dpms_new             (void);
 
-gboolean        xfpm_dpms_capable         (XfpmDpms *dpms);
+gboolean        xfpm_dpms_capable         (XfpmDpms *dpms) G_GNUC_PURE;
 
-
 G_END_DECLS
 
 #endif /* HAVE_DPMS */

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -66,516 +66,410 @@
 #include "xfpm-config.h"
 
 /* Init */
-static void xfpm_engine_class_init (XfpmEngineClass *klass);
-static void xfpm_engine_init       (XfpmEngine *engine);
-static void xfpm_engine_finalize   (GObject *object);
+static void xfpm_engine_class_init (XfpmEngineClass * klass);
+static void xfpm_engine_init (XfpmEngine * engine);
+static void xfpm_engine_finalize (GObject * object);
 
-static void xfpm_engine_dbus_class_init  (XfpmEngineClass *klass);
-static void xfpm_engine_dbus_init	 (XfpmEngine *engine);
+static void xfpm_engine_dbus_class_init (XfpmEngineClass * klass);
+static void xfpm_engine_dbus_init (XfpmEngine * engine);
 
 #define XFPM_ENGINE_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE((o), XFPM_TYPE_ENGINE, XfpmEnginePrivate))
 
 struct XfpmEnginePrivate
 {
-    XfpmXfconf         *conf;
-    XfpmSupply         *supply;
-    XfpmNotify         *notify;
-    
-    XfpmCpu            *cpu;
-    XfpmButtonXf86     *xf86_button;
-    XfpmLidHal         *lid;
-    XfpmBacklight      *bk;
-    XfpmAdapter        *adapter;
-    XfpmInhibit        *inhibit;
-    HalIface           *iface;
+  XfpmXfconf *conf;
+  XfpmSupply *supply;
+  XfpmNotify *notify;
+
+  XfpmCpu *cpu;
+  XfpmButtonXf86 *xf86_button;
+  XfpmLidHal *lid;
+  XfpmBacklight *bk;
+  XfpmAdapter *adapter;
+  XfpmInhibit *inhibit;
+  HalIface *iface;
 #ifdef HAVE_DPMS
-    XfpmDpms           *dpms;
+  XfpmDpms *dpms;
 #endif
 
-    gboolean            inhibited;
+  gboolean inhibited;
 
-    guint8              power_management;
-    gboolean            on_battery;
-    
-    gboolean            block_shutdown;
-    
-    gboolean            is_laptop;
-    gboolean            has_lcd_brightness;
-    gboolean            has_lid;
-    
-    /*Configuration */
-    XfpmShutdownRequest sleep_button;
-    XfpmShutdownRequest lid_button_ac;
-    XfpmShutdownRequest lid_button_battery;
-    gboolean            lock_screen;
-};
+  guint8 power_management;
+  gboolean on_battery;
 
-G_DEFINE_TYPE(XfpmEngine, xfpm_engine, G_TYPE_OBJECT)
+  gboolean block_shutdown;
 
-static gboolean
-xfpm_engine_do_suspend (XfpmEngine *engine)
+  gboolean is_laptop;
+  gboolean has_lcd_brightness;
+  gboolean has_lid;
+};
+
+G_DEFINE_TYPE (XfpmEngine, xfpm_engine, G_TYPE_OBJECT)
+     static gboolean xfpm_engine_do_suspend (XfpmEngine * engine)
 {
-    GError *error = NULL;
-    
-    hal_iface_shutdown (engine->priv->iface, "Suspend", &error);
-    
-    if ( error )
+  GError *error = NULL;
+
+  hal_iface_shutdown (engine->priv->iface, "Suspend", &error);
+
+  if (error)
     {
-	g_warning ("%s", error->message);
-	g_error_free (error);
+      g_warning ("%s", error->message);
+      g_error_free (error);
     }
-    xfpm_send_message_to_network_manager ("wake");
-    return FALSE;
+  xfpm_send_message_to_network_manager ("wake");
+  engine->priv->block_shutdown = FALSE;
+  return FALSE;
 }
 
 static gboolean
-xfpm_engine_do_hibernate (XfpmEngine *engine)
+xfpm_engine_do_hibernate (XfpmEngine * engine)
 {
-    GError *error = NULL;
-    
-    hal_iface_shutdown (engine->priv->iface, "Hibernate", &error);
-    
-    if ( error )
+  GError *error = NULL;
+
+  hal_iface_shutdown (engine->priv->iface, "Hibernate", &error);
+
+  if (error)
     {
-	g_warning ("%s", error->message);
-	g_error_free (error);
+      g_warning ("%s", error->message);
+      g_error_free (error);
     }
-    xfpm_send_message_to_network_manager ("wake");
-    return FALSE;
+  xfpm_send_message_to_network_manager ("wake");
+  engine->priv->block_shutdown = FALSE;
+  return FALSE;
 }
 
 static gboolean
-xfpm_engine_do_shutdown (XfpmEngine *engine)
+xfpm_engine_do_shutdown (XfpmEngine * engine)
 {
-    GError *error = NULL;
-    
-    hal_iface_shutdown (engine->priv->iface, "Shutdown", &error);
-    
-    if ( error )
+  GError *error = NULL;
+
+  hal_iface_shutdown (engine->priv->iface, "Shutdown", &error);
+
+  if (error)
     {
-	g_warning ("%s", error->message);
-	g_error_free (error);
+      g_warning ("%s", error->message);
+      g_error_free (error);
     }
-    return FALSE;
+  return FALSE;
 }
 
 static void
-xfpm_engine_shutdown_request (XfpmEngine *engine, XfpmShutdownRequest shutdown, gboolean critical)
+xfpm_engine_shutdown_request (XfpmEngine * engine,
+			      XfpmShutdownRequest shutdown, gboolean critical)
 {
-    const gchar *action = xfpm_int_to_shutdown_string (shutdown);
-	
-    if ( xfpm_strequal(action, "Nothing") )
+  gboolean lock_screen;
+  const gchar *action = xfpm_int_to_shutdown_string (shutdown);
+
+  lock_screen =
+    xfpm_xfconf_get_property_bool (engine->priv->conf, LOCK_SCREEN_ON_SLEEP);
+
+  if (xfpm_strequal (action, "Nothing"))
     {
-	TRACE("Sleep button disabled in configuration");
-	return;
+      TRACE ("Sleep button disabled in configuration");
+      return;
     }
-    else if ( !engine->priv->inhibited )
+  else if (!engine->priv->inhibited)
     {
-	TRACE("Going to do %s\n", action);
-	xfpm_send_message_to_network_manager ("sleep");
-	
-	if ( shutdown == XFPM_DO_SHUTDOWN)
+      TRACE ("Going to do %s\n", action);
+      xfpm_send_message_to_network_manager ("sleep");
+      engine->priv->block_shutdown = TRUE;
+
+      if (shutdown == XFPM_DO_SHUTDOWN)
 	{
-	    xfpm_engine_do_shutdown (engine);
+	  xfpm_engine_do_shutdown (engine);
 	}
-	else if ( shutdown == XFPM_DO_HIBERNATE )
+      else if (shutdown == XFPM_DO_HIBERNATE)
 	{
-	    g_timeout_add_seconds (3, (GSourceFunc) xfpm_engine_do_hibernate, engine);
+	  g_timeout_add_seconds (3, (GSourceFunc) xfpm_engine_do_hibernate,
+				 engine);
 	}
-	else if ( shutdown == XFPM_DO_SUSPEND )
+      else if (shutdown == XFPM_DO_SUSPEND)
 	{
-	    g_timeout_add_seconds (3, (GSourceFunc) xfpm_engine_do_suspend, engine);
+	  g_timeout_add_seconds (3, (GSourceFunc) xfpm_engine_do_suspend,
+				 engine);
 	}
-	
-	if ( engine->priv->lock_screen )
-	    xfpm_lock_screen ();
+
+      if (lock_screen)
+	xfpm_lock_screen ();
     }
 }
 
 static void
-xfpm_engine_shutdown_request_battery_cb (XfpmSupply *supply, gboolean critical,
-					 XfpmShutdownRequest action, XfpmEngine *engine)
+xfpm_engine_shutdown_request_battery_cb (XfpmSupply * supply,
+					 gboolean critical,
+					 XfpmShutdownRequest action,
+					 XfpmEngine * engine)
 {
-    xfpm_engine_shutdown_request (engine, action, critical);
+  xfpm_engine_shutdown_request (engine, action, critical);
 }
 
 static void
-xfpm_engine_xf86_button_pressed_cb (XfpmButtonXf86 *button, XfpmXF86Button type, XfpmEngine *engine)
+xfpm_engine_xf86_button_pressed_cb (XfpmButtonXf86 * button,
+				    XfpmXF86Button type, XfpmEngine * engine)
 {
-    TRACE("Received button press event type %d", type);
-    
-    if ( type == BUTTON_POWER_OFF || type == BUTTON_SLEEP )
+  TRACE ("Received button press event type %d", type);
+  XfpmShutdownRequest shutdown;
+  
+  shutdown = xfpm_xfconf_get_property_enum (engine->priv->conf, SLEEP_SWITCH_CFG );
+
+  if (type == BUTTON_POWER_OFF || type == BUTTON_SLEEP)
     {
-	if ( engine->priv->block_shutdown )
-	    return;
-	    
-	TRACE("Accepting shutdown request");
-	xfpm_engine_shutdown_request (engine, engine->priv->sleep_button, FALSE);
+      if (engine->priv->block_shutdown)
+	return;
+
+      TRACE ("Accepting shutdown request");
+      xfpm_engine_shutdown_request (engine, shutdown, FALSE);
     }
 }
 
 static void
-xfpm_engine_lid_closed_cb (XfpmLidHal *lid, XfpmEngine *engine)
+xfpm_engine_lid_closed_cb (XfpmLidHal * lid, XfpmEngine * engine)
 {
-    g_return_if_fail (engine->priv->lid_button_ac != XFPM_DO_SHUTDOWN );
-    g_return_if_fail (engine->priv->lid_button_battery != XFPM_DO_SHUTDOWN );
+  XfpmShutdownRequest shutdown;
 
-    if ( engine->priv->on_battery && engine->priv->lid_button_battery == XFPM_DO_NOTHING )
-    {
-	TRACE("System on battery, doing nothing: user settings\n");
-    	return;
-    }
-	
-    if ( !engine->priv->on_battery && engine->priv->lid_button_ac == XFPM_DO_NOTHING )
-    {
-	TRACE("System on AC, doing nothing: user settings\n");
-    	return;
-    }
-    
-    if ( engine->priv->block_shutdown )
-    	return;
-	
-    TRACE("Accepting shutdown request");
-    
-    xfpm_engine_shutdown_request (engine, engine->priv->on_battery ? 
-					  engine->priv->lid_button_battery :
-					  engine->priv->lid_button_ac,
-					  FALSE);
+  shutdown = xfpm_xfconf_get_property_enum (engine->priv->conf,
+					    engine->priv->
+					    on_battery ?
+					    LID_SWITCH_ON_BATTERY_CFG :
+					    LID_SWITCH_ON_AC_CFG);
+
+  if (engine->priv->block_shutdown)
+    return;
+
+  TRACE ("Accepting shutdown request");
+
+  xfpm_engine_shutdown_request (engine, shutdown, FALSE);
 }
 
 static void
-xfpm_engine_check_hal_iface (XfpmEngine *engine)
+xfpm_engine_check_hal_iface (XfpmEngine * engine)
 {
-    gboolean can_suspend, can_hibernate, caller, cpu;
-    
-    if (!hal_iface_connect (engine->priv->iface))
-	return;
-    
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "caller-privilege", &caller,
-		  "can-suspend", &can_suspend,
-		  "can-hibernate", &can_hibernate,
-		  "cpu-freq-iface", &cpu,
-		  NULL);
-		  
-    if ( can_hibernate )
-	engine->priv->power_management |= SYSTEM_CAN_HIBERNATE;
-    if ( can_suspend )
-	engine->priv->power_management |= SYSTEM_CAN_SUSPEND;
-	
-    //FIXME: Show errors here
+  gboolean can_suspend, can_hibernate, caller, cpu;
+
+  if (!hal_iface_connect (engine->priv->iface))
+    return;
+
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"caller-privilege", &caller,
+		"can-suspend", &can_suspend,
+		"can-hibernate", &can_hibernate,
+		"cpu-freq-iface", &cpu, NULL);
+
+  if (can_hibernate)
+    engine->priv->power_management |= SYSTEM_CAN_HIBERNATE;
+  if (can_suspend)
+    engine->priv->power_management |= SYSTEM_CAN_SUSPEND;
+
+  //FIXME: Show errors here
 }
 
 static void
-xfpm_engine_load_all (XfpmEngine *engine)
+xfpm_engine_load_all (XfpmEngine * engine)
 {
-    HalDevice *device;
-    gchar *form_factor = NULL;
-    
-    xfpm_engine_check_hal_iface (engine);
-    
-    device = hal_device_new ();
-    
-    hal_device_set_udi (device, "/org/freedesktop/Hal/devices/computer");
-    
-    form_factor = hal_device_get_property_string (device, "system.formfactor");
-        
-    TRACE("System formfactor=%s\n", form_factor);
-    if ( xfpm_strequal (form_factor, "laptop") )
+  HalDevice *device;
+  gchar *form_factor = NULL;
+
+  xfpm_engine_check_hal_iface (engine);
+
+  device = hal_device_new ();
+
+  hal_device_set_udi (device, "/org/freedesktop/Hal/devices/computer");
+
+  form_factor = hal_device_get_property_string (device, "system.formfactor");
+
+  TRACE ("System formfactor=%s\n", form_factor);
+  if (xfpm_strequal (form_factor, "laptop"))
     {
-	engine->priv->is_laptop = TRUE;
-	TRACE("System is identified as a laptop");
+      engine->priv->is_laptop = TRUE;
+      TRACE ("System is identified as a laptop");
     }
-    else
+  else
     {
-	engine->priv->is_laptop = FALSE;
-	TRACE("System is not identified as a laptop");
+      engine->priv->is_laptop = FALSE;
+      TRACE ("System is not identified as a laptop");
     }
-    if ( form_factor )
-	g_free (form_factor);
-	
-    g_object_unref (device);
-    
-#ifdef HAVE_DPMS		      
-    engine->priv->dpms = xfpm_dpms_new ();
+  if (form_factor)
+    g_free (form_factor);
+
+  g_object_unref (device);
+
+#ifdef HAVE_DPMS
+  engine->priv->dpms = xfpm_dpms_new ();
 #endif
-    if ( engine->priv->is_laptop )
-	engine->priv->cpu = xfpm_cpu_new ();
+  if (engine->priv->is_laptop)
+    engine->priv->cpu = xfpm_cpu_new ();
 
-    engine->priv->supply = xfpm_supply_new (engine->priv->power_management);
-    g_signal_connect (G_OBJECT(engine->priv->supply), "shutdown-request",
-			      G_CALLBACK (xfpm_engine_shutdown_request_battery_cb), engine);
-    xfpm_supply_monitor (engine->priv->supply);
-    
-    /*
-    * Keys from XF86
-    */
-    engine->priv->xf86_button = xfpm_button_xf86_new ();
-    
-    g_signal_connect (engine->priv->xf86_button, "xf86-button-pressed", 
-		       G_CALLBACK(xfpm_engine_xf86_button_pressed_cb), engine);
-		      
-    /*
-    * Lid from HAL 
-    */
-    if ( engine->priv->is_laptop )
-    {
-	engine->priv->lid = xfpm_lid_hal_new ();
-	engine->priv->has_lid = xfpm_lid_hw_found (engine->priv->lid );
-	if ( engine->priv->has_lid )
-	    g_signal_connect (engine->priv->lid, "lid-closed",
-			      G_CALLBACK(xfpm_engine_lid_closed_cb), engine);
-	else
-	    g_object_unref (engine->priv->lid);
-    }
-			  
-    /*
-    * Brightness HAL
-    */
-    if ( engine->priv->is_laptop )
-    {
-	engine->priv->bk = xfpm_backlight_new ();
-	engine->priv->has_lcd_brightness = xfpm_backlight_has_hw (engine->priv->bk);
-    }
-}
+  engine->priv->supply = xfpm_supply_new (engine->priv->power_management);
+  g_signal_connect (G_OBJECT (engine->priv->supply), "shutdown-request",
+		    G_CALLBACK (xfpm_engine_shutdown_request_battery_cb),
+		    engine);
+  xfpm_supply_monitor (engine->priv->supply);
 
-static void
-xfpm_engine_load_configuration (XfpmEngine *engine)
-{
-    gchar *str;
-    gint val;
-    
-    str = xfconf_channel_get_string (engine->priv->conf->channel, SLEEP_SWITCH_CFG, "Nothing");
-    val = xfpm_shutdown_string_to_int (str);
-    
-    if ( val == -1 || val == 3)
-    {
-	g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
-	engine->priv->sleep_button = XFPM_DO_NOTHING;
-	xfconf_channel_set_string (engine->priv->conf->channel, SLEEP_SWITCH_CFG, "Nothing");
-    }
-    else engine->priv->sleep_button = val;
-    
-    g_free (str);
-    
-    str = xfconf_channel_get_string (engine->priv->conf->channel, LID_SWITCH_ON_AC_CFG, "Nothing");
-    val = xfpm_shutdown_string_to_int (str);
+  /*
+   * Keys from XF86
+   */
+  engine->priv->xf86_button = xfpm_button_xf86_new ();
 
-    if ( val == -1 || val == 3)
+  g_signal_connect (engine->priv->xf86_button, "xf86-button-pressed",
+		    G_CALLBACK (xfpm_engine_xf86_button_pressed_cb), engine);
+
+  /*
+   * Lid from HAL 
+   */
+  if (engine->priv->is_laptop)
     {
-	g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_AC_CFG);
-	engine->priv->lid_button_ac = XFPM_DO_NOTHING;
-	xfconf_channel_set_string (engine->priv->conf->channel, LID_SWITCH_ON_AC_CFG, "Nothing");
+      engine->priv->lid = xfpm_lid_hal_new ();
+      engine->priv->has_lid = xfpm_lid_hw_found (engine->priv->lid);
+      if (engine->priv->has_lid)
+	g_signal_connect (engine->priv->lid, "lid-closed",
+			  G_CALLBACK (xfpm_engine_lid_closed_cb), engine);
+      else
+	g_object_unref (engine->priv->lid);
     }
-    else engine->priv->lid_button_ac = val;
-    
-    g_free (str);
-    
-    str = xfconf_channel_get_string (engine->priv->conf->channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
-    val = xfpm_shutdown_string_to_int (str);
-    
-    if ( val == -1 || val == 3)
-    {
-	g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_BATTERY_CFG);
-	engine->priv->lid_button_battery = XFPM_DO_NOTHING;
-	xfconf_channel_set_string (engine->priv->conf->channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
-    }
-    else engine->priv->lid_button_battery = val;
-    
-    g_free (str);
-    
-    engine->priv->lock_screen = xfconf_channel_get_bool (engine->priv->conf->channel, LOCK_SCREEN_ON_SLEEP, TRUE);
-}
 
-static void
-xfpm_engine_property_changed_cb (XfconfChannel *channel, gchar *property, GValue *value, XfpmEngine *engine)
-{
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-        return;
-
-    if ( xfpm_strequal (property, SLEEP_SWITCH_CFG) )
+  /*
+   * Brightness HAL
+   */
+  if (engine->priv->is_laptop)
     {
-        const gchar *str = g_value_get_string (value);
-	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 || val == 3 )
-	{
-	    g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
-	    engine->priv->sleep_button = XFPM_DO_NOTHING;
-	}
-	else
-	    engine->priv->sleep_button = val;
+      engine->priv->bk = xfpm_backlight_new ();
+      engine->priv->has_lcd_brightness =
+	xfpm_backlight_has_hw (engine->priv->bk);
     }
-    else if ( xfpm_strequal (property, LID_SWITCH_ON_AC_CFG) )
-    {
-	const gchar *str = g_value_get_string (value);
-	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 || val == 3 )
-	{
-	    g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_AC_CFG);
-	    engine->priv->lid_button_ac = XFPM_DO_NOTHING;
-	}
-	else
-	    engine->priv->lid_button_ac = val;
-    }
-    else if ( xfpm_strequal (property, LID_SWITCH_ON_BATTERY_CFG) )
-    {
-	const gchar *str = g_value_get_string (value);
-	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 || val == 3 )
-	{
-	    g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_BATTERY_CFG);
-	    engine->priv->lid_button_battery = XFPM_DO_NOTHING;
-	}
-	else
-	    engine->priv->lid_button_battery = val;
-    }
-    else if ( xfpm_strequal (property, LOCK_SCREEN_ON_SLEEP ) )
-    {
-	engine->priv->lock_screen = g_value_get_boolean (value);
-    }
 }
 
 static void
-xfpm_engine_adapter_changed_cb (XfpmAdapter *adapter, gboolean present, XfpmEngine *engine)
+xfpm_engine_adapter_changed_cb (XfpmAdapter * adapter, gboolean present,
+				XfpmEngine * engine)
 {
-    engine->priv->on_battery = !present;
+  engine->priv->on_battery = !present;
 }
 
 static void
-xfpm_engine_inhibit_changed_cb (XfpmInhibit *inhibit, gboolean inhibited, XfpmEngine *engine)
+xfpm_engine_inhibit_changed_cb (XfpmInhibit * inhibit, gboolean inhibited,
+				XfpmEngine * engine)
 {
-    engine->priv->inhibited = inhibited;
+  engine->priv->inhibited = inhibited;
 }
 
 static void
-xfpm_engine_class_init(XfpmEngineClass *klass)
+xfpm_engine_class_init (XfpmEngineClass * klass)
 {
-    GObjectClass *object_class = G_OBJECT_CLASS(klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-    object_class->finalize = xfpm_engine_finalize;
+  object_class->finalize = xfpm_engine_finalize;
 
-    g_type_class_add_private (klass, sizeof(XfpmEnginePrivate));
-    
-    xfpm_engine_dbus_class_init (klass);
+  g_type_class_add_private (klass, sizeof (XfpmEnginePrivate));
+
+  xfpm_engine_dbus_class_init (klass);
 }
 
 static void
-xfpm_engine_init (XfpmEngine *engine)
+xfpm_engine_init (XfpmEngine * engine)
 {
-    GError *error = NULL;
-    engine->priv = XFPM_ENGINE_GET_PRIVATE(engine);
-    
-    engine->priv->iface       = hal_iface_new ();
-    engine->priv->adapter     = xfpm_adapter_new ();
-    engine->priv->notify      = xfpm_notify_new ();
+  engine->priv = XFPM_ENGINE_GET_PRIVATE (engine);
 
-    engine->priv->inhibit     = xfpm_inhibit_new ();
-    engine->priv->inhibited   = FALSE;
-    
-    g_signal_connect (engine->priv->inhibit, "has-inhibit-changed",
-		      G_CALLBACK(xfpm_engine_inhibit_changed_cb), engine);
-    
-    engine->priv->conf        = NULL;
-    engine->priv->supply      = NULL;
+  engine->priv->iface = hal_iface_new ();
+  engine->priv->adapter = xfpm_adapter_new ();
+  engine->priv->notify = xfpm_notify_new ();
+
+  engine->priv->inhibit = xfpm_inhibit_new ();
+  engine->priv->inhibited = FALSE;
+
+  g_signal_connect (engine->priv->inhibit, "has-inhibit-changed",
+		    G_CALLBACK (xfpm_engine_inhibit_changed_cb), engine);
+
+  engine->priv->conf = NULL;
+  engine->priv->supply = NULL;
 #ifdef HAVE_DPMS
-    engine->priv->dpms        = NULL;
-#endif    
-    engine->priv->cpu         = NULL;
-    engine->priv->xf86_button = NULL;
-    engine->priv->lid         = NULL;
-    engine->priv->bk          = NULL;
-    
-    engine->priv->power_management = 0;
-    
-    xfpm_engine_dbus_init (engine);
-    
-    if ( !xfconf_init(&error) )
-    {
-    	g_critical ("xfconf_init failed: %s\n", error->message);
-       	g_error_free (error);
-    }	
-    
-    engine->priv->conf    = xfpm_xfconf_new ();
-    
-    engine->priv->on_battery = ! xfpm_adapter_get_present (engine->priv->adapter);
-    
-    g_signal_connect (engine->priv->adapter, "adapter-changed",
-		      G_CALLBACK(xfpm_engine_adapter_changed_cb), engine);
-    
-    g_signal_connect (engine->priv->conf->channel, "property-changed",
-		      G_CALLBACK(xfpm_engine_property_changed_cb), engine);
-    
-    xfpm_engine_load_configuration (engine);
-    xfpm_engine_load_all (engine);
+  engine->priv->dpms = NULL;
+#endif
+  engine->priv->cpu = NULL;
+  engine->priv->xf86_button = NULL;
+  engine->priv->lid = NULL;
+  engine->priv->bk = NULL;
+
+  engine->priv->power_management = 0;
+
+  xfpm_engine_dbus_init (engine);
+
+  engine->priv->conf = xfpm_xfconf_new ();
+
+  engine->priv->on_battery =
+    !xfpm_adapter_get_present (engine->priv->adapter);
+
+  g_signal_connect (engine->priv->adapter, "adapter-changed",
+		    G_CALLBACK (xfpm_engine_adapter_changed_cb), engine);
+
+  xfpm_engine_load_all (engine);
 }
 
 static void
-xfpm_engine_finalize (GObject *object)
+xfpm_engine_finalize (GObject * object)
 {
-    XfpmEngine *engine;
+  XfpmEngine *engine;
 
-    engine = XFPM_ENGINE(object);
-    
-    if ( engine->priv->conf )
-    	g_object_unref (engine->priv->conf);
-	
-    if ( engine->priv->supply )
-    	g_object_unref (engine->priv->supply);
-	
+  engine = XFPM_ENGINE (object);
+
+  if (engine->priv->conf)
+    g_object_unref (engine->priv->conf);
+
+  if (engine->priv->supply)
+    g_object_unref (engine->priv->supply);
+
 #ifdef HAVE_DPMS
-    if ( engine->priv->dpms )
-    	g_object_unref (engine->priv->dpms);
+  if (engine->priv->dpms)
+    g_object_unref (engine->priv->dpms);
 #endif
 
-    if ( engine->priv->cpu )
-    	g_object_unref (engine->priv->cpu);
+  if (engine->priv->cpu)
+    g_object_unref (engine->priv->cpu);
 
-    if ( engine->priv->lid)
-    	g_object_unref(engine->priv->lid);
-    
-    if ( engine->priv->iface)
-    	g_object_unref(engine->priv->iface);
+  if (engine->priv->lid)
+    g_object_unref (engine->priv->lid);
 
-    if ( engine->priv->adapter)
-	g_object_unref (engine->priv->adapter);
-	
-    if ( engine->priv->bk )
-	g_object_unref (engine->priv->bk);
-	
-    g_object_unref (engine->priv->notify);
-	
-    G_OBJECT_CLASS(xfpm_engine_parent_class)->finalize(object);
+  if (engine->priv->iface)
+    g_object_unref (engine->priv->iface);
+
+  if (engine->priv->adapter)
+    g_object_unref (engine->priv->adapter);
+
+  if (engine->priv->bk)
+    g_object_unref (engine->priv->bk);
+
+  g_object_unref (engine->priv->notify);
+
+  G_OBJECT_CLASS (xfpm_engine_parent_class)->finalize (object);
 }
 
 XfpmEngine *
-xfpm_engine_new(void)
+xfpm_engine_new (void)
 {
-    XfpmEngine *engine = NULL;
-    engine = g_object_new (XFPM_TYPE_ENGINE, NULL);
+  XfpmEngine *engine = NULL;
+  engine = g_object_new (XFPM_TYPE_ENGINE, NULL);
 
-    return engine;
+  return engine;
 }
 
-void              xfpm_engine_get_info        (XfpmEngine *engine,
-					       gboolean *system_laptop,
-					       gboolean *user_privilege,
-					       gboolean *can_suspend,
-					       gboolean *can_hibernate,
-					       gboolean *has_lcd_brightness,
-					       gboolean *has_lid)
+void
+xfpm_engine_get_info (XfpmEngine * engine,
+		      gboolean * system_laptop,
+		      gboolean * user_privilege,
+		      gboolean * can_suspend,
+		      gboolean * can_hibernate,
+		      gboolean * has_lcd_brightness, gboolean * has_lid)
 {
-    g_return_if_fail (XFPM_IS_ENGINE(engine));
-    
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "caller-privilege", user_privilege,
-		  "can-suspend", can_suspend,
-		  "can-hibernate",can_hibernate,
-		  NULL);
-    
-    *system_laptop = engine->priv->is_laptop;
-    *has_lcd_brightness = engine->priv->has_lcd_brightness;
-    *has_lid = engine->priv->has_lid;
+  g_return_if_fail (XFPM_IS_ENGINE (engine));
+
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"caller-privilege", user_privilege,
+		"can-suspend", can_suspend,
+		"can-hibernate", can_hibernate, NULL);
+
+  *system_laptop = engine->priv->is_laptop;
+  *has_lcd_brightness = engine->priv->has_lcd_brightness;
+  *has_lid = engine->priv->has_lid;
 }
 
 /*
@@ -584,147 +478,147 @@
  * 
  */
 
-static gboolean xfpm_engine_dbus_hibernate 	(XfpmEngine *engine,
-						 GError **error);
-					    
-static gboolean xfpm_engine_dbus_suspend 	(XfpmEngine *engine,
-						 GError **error);
-					    
-static gboolean xfpm_engine_dbus_can_hibernate  (XfpmEngine *engine,
-						 gboolean *OUT_can_hibernate,
-						 GError **error);
+static gboolean xfpm_engine_dbus_hibernate (XfpmEngine * engine,
+					    GError ** error);
 
-static gboolean xfpm_engine_dbus_can_suspend  	(XfpmEngine *engine,
-						 gboolean *OUT_can_suspend,
-						 GError **error);
+static gboolean xfpm_engine_dbus_suspend (XfpmEngine * engine,
+					  GError ** error);
 
-static gboolean xfpm_engine_dbus_get_on_battery	(XfpmEngine *engine,
-						 gboolean *OUT_on_battery,
-						 GError **error);
+static gboolean xfpm_engine_dbus_can_hibernate (XfpmEngine * engine,
+						gboolean * OUT_can_hibernate,
+						GError ** error);
 
-static gboolean xfpm_engine_dbus_get_low_battery(XfpmEngine *engine,
-						 gboolean *OUT_low_battery,
-						 GError **error);
+static gboolean xfpm_engine_dbus_can_suspend (XfpmEngine * engine,
+					      gboolean * OUT_can_suspend,
+					      GError ** error);
 
+static gboolean xfpm_engine_dbus_get_on_battery (XfpmEngine * engine,
+						 gboolean * OUT_on_battery,
+						 GError ** error);
+
+static gboolean xfpm_engine_dbus_get_low_battery (XfpmEngine * engine,
+						  gboolean * OUT_low_battery,
+						  GError ** error);
+
 #include "org.freedesktop.PowerManagement.h"
 
 static void
-xfpm_engine_dbus_class_init(XfpmEngineClass *klass)
+xfpm_engine_dbus_class_init (XfpmEngineClass * klass)
 {
-     dbus_g_object_type_install_info(G_TYPE_FROM_CLASS(klass),
-				    &dbus_glib_xfpm_engine_object_info);
-				    
-     dbus_g_error_domain_register (XFPM_ERROR, 
-				   "org.freedesktop.PowerManagement",
-				   XFPM_TYPE_ERROR);
+  dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+				   &dbus_glib_xfpm_engine_object_info);
+
+  dbus_g_error_domain_register (XFPM_ERROR,
+				"org.freedesktop.PowerManagement",
+				XFPM_TYPE_ERROR);
 }
 
 static void
-xfpm_engine_dbus_init (XfpmEngine *engine)
+xfpm_engine_dbus_init (XfpmEngine * engine)
 {
-    DBusGConnection *bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
-    
-    dbus_g_connection_register_g_object (bus,
-					 "/org/freedesktop/PowerManagement",
-					 G_OBJECT(engine));
+  DBusGConnection *bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
+
+  dbus_g_connection_register_g_object (bus,
+				       "/org/freedesktop/PowerManagement",
+				       G_OBJECT (engine));
 }
 
-static gboolean xfpm_engine_dbus_hibernate 	(XfpmEngine *engine,
-						 GError **error)
+static gboolean
+xfpm_engine_dbus_hibernate (XfpmEngine * engine, GError ** error)
 {
-    TRACE("Hibernate message received");
-    gboolean caller_privilege, can_hibernate;
-    
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "caller-privilege", &caller_privilege,
-		  "can-hibernate", &can_hibernate,
-		  NULL);
+  TRACE ("Hibernate message received");
+  gboolean caller_privilege, can_hibernate;
 
-    if ( !caller_privilege)
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"caller-privilege", &caller_privilege,
+		"can-hibernate", &can_hibernate, NULL);
+
+  if (!caller_privilege)
     {
-	g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED, _("Permission denied"));
-	return FALSE;
+      g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+		   _("Permission denied"));
+      return FALSE;
     }
-    
-    if ( !can_hibernate )
+
+  if (!can_hibernate)
     {
-	g_set_error (error, XFPM_ERROR, XFPM_ERROR_HIBERNATE_NOT_SUPPORTED, _("Hibernate not supported"));
-	return FALSE;
+      g_set_error (error, XFPM_ERROR, XFPM_ERROR_HIBERNATE_NOT_SUPPORTED,
+		   _("Hibernate not supported"));
+      return FALSE;
     }
-		  
-    xfpm_engine_shutdown_request (engine, XFPM_DO_HIBERNATE, FALSE);
 
-    return TRUE;
+  xfpm_engine_shutdown_request (engine, XFPM_DO_HIBERNATE, FALSE);
+
+  return TRUE;
 }
-					    
-static gboolean xfpm_engine_dbus_suspend 	(XfpmEngine *engine,
-						 GError **error)
+
+static gboolean
+xfpm_engine_dbus_suspend (XfpmEngine * engine, GError ** error)
 {
-    TRACE("Suspend message received");
-    gboolean caller_privilege, can_suspend;
-    
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "caller-privilege", &caller_privilege,
-		  "can-suspend", &can_suspend,
-		  NULL);
-	
-     if ( !caller_privilege)
+  TRACE ("Suspend message received");
+  gboolean caller_privilege, can_suspend;
+
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"caller-privilege", &caller_privilege,
+		"can-suspend", &can_suspend, NULL);
+
+  if (!caller_privilege)
     {
-	g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED, _("Permission denied"));
-	return FALSE;
+      g_set_error (error, XFPM_ERROR, XFPM_ERROR_PERMISSION_DENIED,
+		   _("Permission denied"));
+      return FALSE;
     }
-    
-    if ( !can_suspend )
+
+  if (!can_suspend)
     {
-	g_set_error (error, XFPM_ERROR, XFPM_ERROR_SUSPEND_NOT_SUPPORTED, _("Suspend not supported"));
-	return FALSE;
+      g_set_error (error, XFPM_ERROR, XFPM_ERROR_SUSPEND_NOT_SUPPORTED,
+		   _("Suspend not supported"));
+      return FALSE;
     }
-    
-    xfpm_engine_shutdown_request (engine, XFPM_DO_SUSPEND, FALSE);
-    
-    return TRUE;
+
+  xfpm_engine_shutdown_request (engine, XFPM_DO_SUSPEND, FALSE);
+
+  return TRUE;
 }
-					    
-static gboolean xfpm_engine_dbus_can_hibernate  (XfpmEngine *engine,
-						 gboolean *OUT_can_hibernate,
-						 GError **error)
+
+static gboolean
+xfpm_engine_dbus_can_hibernate (XfpmEngine * engine,
+				gboolean * OUT_can_hibernate, GError ** error)
 {
-    TRACE("Can hibernate message received");
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "can-hibernate", OUT_can_hibernate,
-		  NULL);
-		  
-    return TRUE;
+  TRACE ("Can hibernate message received");
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"can-hibernate", OUT_can_hibernate, NULL);
+
+  return TRUE;
 }
 
-static gboolean xfpm_engine_dbus_can_suspend  	(XfpmEngine *engine,
-						 gboolean *OUT_can_suspend,
-						 GError **error)
+static gboolean
+xfpm_engine_dbus_can_suspend (XfpmEngine * engine,
+			      gboolean * OUT_can_suspend, GError ** error)
 {
-    TRACE("Can suspend message received");
-    g_object_get (G_OBJECT(engine->priv->iface), 
-		  "can-suspend", OUT_can_suspend,
-		  NULL);
-		  
-    return TRUE;
+  TRACE ("Can suspend message received");
+  g_object_get (G_OBJECT (engine->priv->iface),
+		"can-suspend", OUT_can_suspend, NULL);
+
+  return TRUE;
 }
 
-static gboolean xfpm_engine_dbus_get_on_battery (XfpmEngine *engine,
-						 gboolean *OUT_on_battery,
-						 GError **error)
+static gboolean
+xfpm_engine_dbus_get_on_battery (XfpmEngine * engine,
+				 gboolean * OUT_on_battery, GError ** error)
 {
-    TRACE("On battery message received");
-    *OUT_on_battery = engine->priv->on_battery;
-    
-    return TRUE;
+  TRACE ("On battery message received");
+  *OUT_on_battery = engine->priv->on_battery;
+
+  return TRUE;
 }
 
-static gboolean xfpm_engine_dbus_get_low_battery(XfpmEngine *engine,
-						 gboolean *OUT_low_battery,
-						 GError **error)
+static gboolean
+xfpm_engine_dbus_get_low_battery (XfpmEngine * engine,
+				  gboolean * OUT_low_battery, GError ** error)
 {
-    TRACE("On low battery message received");
-    *OUT_low_battery = xfpm_supply_on_low_battery (engine->priv->supply);
-    
-    return TRUE;
+  TRACE ("On low battery message received");
+  *OUT_low_battery = xfpm_supply_on_low_battery (engine->priv->supply);
+
+  return TRUE;
 }

Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -63,9 +63,6 @@
     GHashTable    *hash;
     
     gboolean       adapter_present;
-    
-    XfpmShutdownRequest critical_action;
-    
     guint8         power_management;
 };
 
@@ -248,10 +245,13 @@
 static void
 xfpm_supply_process_critical_action (XfpmSupply *supply)
 {
-    //FIXME: shouldn't happen
-    g_return_if_fail (supply->priv->critical_action != XFPM_DO_SUSPEND );
-    
-    g_signal_emit (G_OBJECT(supply ), signals[SHUTDOWN_REQUEST], 0, TRUE, supply->priv->critical_action);
+     XfpmShutdownRequest critical_action = 
+	xfpm_xfconf_get_property_enum (supply->priv->conf, CRITICAL_BATT_ACTION_CFG);
+
+    if ( G_UNLIKELY (critical_action == XFPM_DO_SUSPEND ) )
+	return;
+	
+    g_signal_emit (G_OBJECT(supply ), signals[SHUTDOWN_REQUEST], 0, TRUE, critical_action);
 }
 
 static void
@@ -307,10 +307,13 @@
 static void
 xfpm_supply_handle_primary_critical (XfpmSupply *supply, XfpmBattery *battery)
 {
+    XfpmShutdownRequest critical_action = 
+	xfpm_xfconf_get_property_enum (supply->priv->conf, CRITICAL_BATT_ACTION_CFG);
+    
     if ( xfpm_supply_on_low_power (supply) )
     {
 	TRACE ("System is running on low power");
-	if ( supply->priv->critical_action == XFPM_DO_NOTHING )
+	if ( critical_action == XFPM_DO_NOTHING )
 	{
 	    xfpm_supply_show_critical_action (supply, battery);
 	}
@@ -583,49 +586,6 @@
 }
 
 static void
-xfpm_supply_property_changed_cb (XfconfChannel *channel, gchar *property, GValue *value, XfpmSupply *supply)
-{
-    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
-    	return;
-	
-    if ( xfpm_strequal (property, CRITICAL_BATT_ACTION_CFG) )
-    {
-	const gchar *str = g_value_get_string (value);
-	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 || val == 3 || val == 1)
-	{
-	    g_warning ("Invalid value %s for property %s, using default\n", str, CRITICAL_BATT_ACTION_CFG);
-	    supply->priv->critical_action = XFPM_DO_NOTHING;
-	}
-	else
-	    supply->priv->critical_action = val;
-    }
-    
-}
-
-static void
-xfpm_supply_load_configuration (XfpmSupply *supply)
-{
-    //FIXME: Check if the action specified we can actually do it
-    gchar *str;
-    gint val;
-    
-    str = xfconf_channel_get_string (supply->priv->conf->channel, CRITICAL_BATT_ACTION_CFG, "Nothing");
-    val = xfpm_shutdown_string_to_int (str);
-    
-    if ( val == -1 || val > 3 || val == 1)
-    {
-	g_warning ("Invalid value %s for property %s, using default\n", str, CRITICAL_BATT_ACTION_CFG);
-	supply->priv->critical_action = XFPM_DO_NOTHING;
-	xfconf_channel_set_string ( supply->priv->conf->channel, CRITICAL_BATT_ACTION_CFG, "Nothing");
-    }
-    else supply->priv->critical_action = val;
-    
-    g_free (str);
-    
-}
-
-static void
 xfpm_supply_adapter_changed_cb (XfpmAdapter *adapter, gboolean present, XfpmSupply *supply)
 {
     supply->priv->adapter_present = present;
@@ -650,14 +610,9 @@
     supply->priv->adapter = xfpm_adapter_new ();
     supply->priv->adapter_present = xfpm_adapter_get_present (supply->priv->adapter);
     
-    xfpm_supply_load_configuration (supply);
-    
     g_signal_connect (supply->priv->adapter, "adapter-changed",
 		      G_CALLBACK(xfpm_supply_adapter_changed_cb), supply);
       
-    g_signal_connect (supply->priv->conf->channel, "property-changed", 
-		      G_CALLBACK(xfpm_supply_property_changed_cb), supply);
-
     xfpm_supply_monitor_start (supply);
     
     g_signal_connect(supply->priv->power, "battery-added",

Modified: xfce4-power-manager/trunk/src/xfpm-xfconf.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-xfconf.c	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-xfconf.c	2009-03-27 14:37:29 UTC (rev 7007)
@@ -26,41 +26,433 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <glib.h>
+#include <libxfce4util/libxfce4util.h>
+
+#include "libxfpm/xfpm-string.h"
+#include "libxfpm/xfpm-common.h"
+
 #include "xfpm-xfconf.h"
+#include "xfpm-config.h"
+#include "xfpm-enum-glib.h"
 
 /* Init */
 static void xfpm_xfconf_class_init (XfpmXfconfClass *klass);
-static void xfpm_xfconf_init       (XfpmXfconf *xfconf);
+static void xfpm_xfconf_init       (XfpmXfconf *conf);
 static void xfpm_xfconf_finalize   (GObject *object);
 
+#define XFPM_XFCONF_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFPM_TYPE_XFCONF, XfpmXfconfPrivate ))
+
 static gpointer xfpm_xfconf_object = NULL;
 
+struct XfpmXfconfPrivate
+{
+    XfconfChannel 	*channel;
+    
+    XfpmShutdownRequest  sleep_button;
+    XfpmShutdownRequest  lid_button_ac;
+    XfpmShutdownRequest  lid_button_battery;
+    XfpmShutdownRequest  critical_action;
+    
+    gboolean             lock_screen;
+#ifdef HAVE_DPMS
+    gboolean       	 dpms_enabled;
+    
+    guint16        	 dpms_sleep_on_battery;
+    guint16        	 dpms_off_on_battery;
+    guint16        	 dpms_sleep_on_ac;
+    guint16        	 dpms_off_on_ac;
+    
+    gboolean         	 sleep_dpms_mode; /*TRUE = standby FALSE = suspend*/
+#endif
+    gboolean             power_save_on_battery;
+    
+    guint16              brightness_on_ac_timeout;
+    guint16              brightness_on_battery_timeout;
+    
+    XfpmShowIcon     	 show_icon;
+    guint                critical_level;
+};
+
+enum
+{
+    DPMS_SETTINGS_CHANGED,
+    POWER_SAVE_SETTINGS_CHANGED,
+    BRIGHTNESS_SETTINGS_CHANGED,
+    TRAY_ICON_SETTINGS_CHANGED,
+    LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 G_DEFINE_TYPE(XfpmXfconf, xfpm_xfconf, G_TYPE_OBJECT)
 
 static void
+xfpm_xfconf_property_changed_cb (XfconfChannel *channel, gchar *property,
+				 GValue *value, XfpmXfconf *conf)
+{
+    if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
+        return;
+
+    TRACE("Property modified: %s\n", property);
+    
+    if ( xfpm_strequal (property, SLEEP_SWITCH_CFG) )
+    {
+        const gchar *str = g_value_get_string (value);
+	gint val = xfpm_shutdown_string_to_int (str);
+	if ( val == -1 || val == 3 )
+	{
+	    g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
+	    conf->priv->sleep_button = XFPM_DO_NOTHING;
+	}
+	else
+	    conf->priv->sleep_button = val;
+    }
+    else if ( xfpm_strequal (property, LID_SWITCH_ON_AC_CFG) )
+    {
+	const gchar *str = g_value_get_string (value);
+	gint val = xfpm_shutdown_string_to_int (str);
+	if ( val == -1 || val == 3 )
+	{
+	    g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_AC_CFG);
+	    conf->priv->lid_button_ac = XFPM_DO_NOTHING;
+	}
+	else
+	    conf->priv->lid_button_ac = val;
+    }
+    else if ( xfpm_strequal (property, LID_SWITCH_ON_BATTERY_CFG) )
+    {
+	const gchar *str = g_value_get_string (value);
+	gint val = xfpm_shutdown_string_to_int (str);
+	if ( val == -1 || val == 3 )
+	{
+	    g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_BATTERY_CFG);
+	    conf->priv->lid_button_battery = XFPM_DO_NOTHING;
+	}
+	else
+	    conf->priv->lid_button_battery = val;
+    }
+    else if ( xfpm_strequal (property, LOCK_SCREEN_ON_SLEEP ) )
+    {
+	conf->priv->lock_screen = g_value_get_boolean (value);
+    }
+#ifdef HAVE_DPMS
+    if ( xfpm_strequal (property, DPMS_ENABLED_CFG) )
+    {
+	gboolean val = g_value_get_boolean (value);
+	conf->priv->dpms_enabled = val;
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, ON_AC_DPMS_SLEEP) )
+    {
+	guint val = g_value_get_uint (value);
+	conf->priv->dpms_sleep_on_ac = MIN(3600, val * 60);
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, ON_AC_DPMS_OFF) )
+    {
+	guint val = g_value_get_uint (value);
+	conf->priv->dpms_off_on_ac = MIN(3600, val * 60);
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, ON_BATT_DPMS_SLEEP) )
+    {
+	guint val = g_value_get_uint (value);
+	conf->priv->dpms_sleep_on_battery = MIN(3600, val * 60);
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, ON_BATT_DPMS_OFF) )
+    {
+	guint val = g_value_get_uint (value);
+	conf->priv->dpms_off_on_battery = MIN (3600, val * 60);
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, DPMS_SLEEP_MODE) )
+    {
+	const gchar *str = g_value_get_string (value);
+	if ( xfpm_strequal (str, "sleep" ) )
+	{
+	    conf->priv->sleep_dpms_mode = TRUE;
+	}
+	else if ( xfpm_strequal (str, "suspend") )
+	{
+	    conf->priv->sleep_dpms_mode = FALSE;
+	}
+	else
+	{
+	    g_critical("Invalid value %s for property %s\n", str, DPMS_SLEEP_MODE);
+	    conf->priv->sleep_dpms_mode = TRUE;
+	}
+	g_signal_emit (G_OBJECT(conf), signals[DPMS_SETTINGS_CHANGED], 0);
+    }
+#endif /* HAVE_DPMS */
+    else if ( xfpm_strequal(property, POWER_SAVE_ON_BATTERY) )
+    {
+	gboolean val = g_value_get_boolean (value);
+	conf->priv->power_save_on_battery = val;
+	g_signal_emit (G_OBJECT(conf), signals[POWER_SAVE_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, BRIGHTNESS_ON_AC ) )
+    {
+	guint val = g_value_get_uint (value);
+	
+	if ( val > 120 || val < 9)
+	{
+	    g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_AC );
+	}
+	else
+	{
+	    conf->priv->brightness_on_ac_timeout = val;
+	}
+	g_signal_emit (G_OBJECT(conf), signals[BRIGHTNESS_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, BRIGHTNESS_ON_BATTERY ) )
+    {
+	guint val = g_value_get_uint (value);
+	
+	if ( val > 120 || val < 9)
+	{
+	    g_warning ("Value %d for %s is out of range", val, BRIGHTNESS_ON_BATTERY );
+	}
+	else
+	    conf->priv->brightness_on_battery_timeout = val;
+	g_signal_emit (G_OBJECT(conf), signals[POWER_SAVE_SETTINGS_CHANGED], 0);
+    }
+    else if ( xfpm_strequal (property, CRITICAL_BATT_ACTION_CFG) )
+    {
+	const gchar *str = g_value_get_string (value);
+	gint val = xfpm_shutdown_string_to_int (str);
+	if ( val == -1 || val == 3 || val == 1)
+	{
+	    g_warning ("Invalid value %s for property %s, using default\n", str, CRITICAL_BATT_ACTION_CFG);
+	    conf->priv->critical_action = XFPM_DO_NOTHING;
+	}
+	else
+	    conf->priv->critical_action = val;
+    }
+    else if ( xfpm_strequal (property, SHOW_TRAY_ICON_CFG) )
+    {
+	guint val = g_value_get_uint (value);
+	conf->priv->show_icon = val;
+	g_signal_emit (G_OBJECT(conf), signals[TRAY_ICON_SETTINGS_CHANGED], 0 );
+    }
+    else if ( xfpm_strequal( property, CRITICAL_POWER_LEVEL) )
+    {
+	guint val = g_value_get_uint (value);
+	if ( val > 20 )
+	{
+	    g_warning ("Value %d for property %s is out of range \n", val, CRITICAL_POWER_LEVEL);
+	    conf->priv->critical_level = 10;
+	}
+	else 
+	    conf->priv->critical_level = val;
+    }
+}
+
+static void
+xfpm_xfconf_load_configuration (XfpmXfconf *conf)
+{
+    gchar *str;
+    gint val;
+    
+    str = xfconf_channel_get_string (conf->priv->channel, SLEEP_SWITCH_CFG, "Nothing");
+    val = xfpm_shutdown_string_to_int (str);
+    
+    if ( val == -1 || val == 3)
+    {
+	g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
+	conf->priv->sleep_button = XFPM_DO_NOTHING;
+	xfconf_channel_set_string (conf->priv->channel, SLEEP_SWITCH_CFG, "Nothing");
+    }
+    else conf->priv->sleep_button = val;
+    
+    g_free (str);
+    
+    str = xfconf_channel_get_string (conf->priv->channel, LID_SWITCH_ON_AC_CFG, "Nothing");
+    val = xfpm_shutdown_string_to_int (str);
+
+    if ( val == -1 || val == 3)
+    {
+	g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_AC_CFG);
+	conf->priv->lid_button_ac = XFPM_DO_NOTHING;
+	xfconf_channel_set_string (conf->priv->channel, LID_SWITCH_ON_AC_CFG, "Nothing");
+    }
+    else conf->priv->lid_button_ac = val;
+    
+    g_free (str);
+    
+    str = xfconf_channel_get_string (conf->priv->channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
+    val = xfpm_shutdown_string_to_int (str);
+    
+    if ( val == -1 || val == 3)
+    {
+	g_warning ("Invalid value %s for property %s, using default\n", str, LID_SWITCH_ON_BATTERY_CFG);
+	conf->priv->lid_button_battery = XFPM_DO_NOTHING;
+	xfconf_channel_set_string (conf->priv->channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
+    }
+    else conf->priv->lid_button_battery = val;
+    
+    g_free (str);
+    
+    conf->priv->lock_screen = xfconf_channel_get_bool (conf->priv->channel, LOCK_SCREEN_ON_SLEEP, TRUE);
+    
+#ifdef HAVE_DPMS
+    conf->priv->dpms_enabled =
+    	xfconf_channel_get_bool (conf->priv->channel, DPMS_ENABLED_CFG, TRUE);
+    
+    conf->priv->dpms_sleep_on_battery = 
+    	MIN( xfconf_channel_get_uint( conf->priv->channel, ON_BATT_DPMS_SLEEP, 3) * 60, 3600);
+
+    conf->priv->dpms_off_on_battery = 
+    	MIN(xfconf_channel_get_uint( conf->priv->channel, ON_BATT_DPMS_OFF, 5) * 60, 3600);
+	
+    conf->priv->dpms_sleep_on_ac = 
+    	MIN(xfconf_channel_get_uint( conf->priv->channel, ON_AC_DPMS_SLEEP, 10) * 60, 3600);
+    
+    conf->priv->dpms_off_on_ac = 
+    	MIN(xfconf_channel_get_uint( conf->priv->channel, ON_AC_DPMS_OFF, 15) * 60, 3600);
+	
+    str = xfconf_channel_get_string (conf->priv->channel, DPMS_SLEEP_MODE, "sleep");
+    
+    if ( xfpm_strequal (str, "sleep" ) )
+    {
+	conf->priv->sleep_dpms_mode = 0;
+    }
+    else if ( xfpm_strequal (str, "suspend") )
+    {
+	conf->priv->sleep_dpms_mode = 1;
+    }
+    else
+    {
+	g_critical("Invalid value %s for property %s\n", str, DPMS_SLEEP_MODE);
+	conf->priv->sleep_dpms_mode = 0;
+    }
+    g_free (str);
+#endif /* HAVE_DPMS */
+    conf->priv->power_save_on_battery =
+    	xfconf_channel_get_bool (conf->priv->channel, POWER_SAVE_ON_BATTERY, TRUE);
+	
+    conf->priv->brightness_on_ac_timeout =
+	xfconf_channel_get_uint (conf->priv->channel, BRIGHTNESS_ON_AC, 9);
+	
+    if ( conf->priv->brightness_on_ac_timeout > 120 || conf->priv->brightness_on_ac_timeout < 9)
+    {
+	g_warning ("Value %d for %s is out of range", conf->priv->brightness_on_ac_timeout, BRIGHTNESS_ON_AC );
+	conf->priv->brightness_on_ac_timeout = 9;
+    }
+    
+    conf->priv->brightness_on_battery_timeout =
+	xfconf_channel_get_uint (conf->priv->channel, BRIGHTNESS_ON_BATTERY, 10);
+	
+    if ( conf->priv->brightness_on_battery_timeout > 120 || conf->priv->brightness_on_battery_timeout < 9)
+    {
+	g_warning ("Value %d for %s is out of range", conf->priv->brightness_on_battery_timeout, BRIGHTNESS_ON_BATTERY );
+	conf->priv->brightness_on_battery_timeout = 10;
+    }
+    
+    //FIXME: check if valid
+    str = xfconf_channel_get_string (conf->priv->channel, CRITICAL_BATT_ACTION_CFG, "Nothing");
+    conf->priv->critical_action = xfpm_shutdown_string_to_int (str);
+    g_free (str);
+    
+    conf->priv->show_icon =
+    	xfconf_channel_get_uint (conf->priv->channel, SHOW_TRAY_ICON_CFG, SHOW_ICON_WHEN_BATTERY_PRESENT);
+    if ( conf->priv->show_icon < 0 || conf->priv->show_icon > 3 )
+    {
+	g_warning ("Invalid value %d for property %s, using default\n", conf->priv->show_icon, SHOW_TRAY_ICON_CFG);
+	xfconf_channel_set_uint (conf->priv->channel, CRITICAL_BATT_ACTION_CFG, SHOW_ICON_WHEN_BATTERY_PRESENT);
+    }
+    
+    conf->priv->critical_level =
+	xfconf_channel_get_uint (conf->priv->channel, CRITICAL_POWER_LEVEL, 0);
+	
+    if ( conf->priv->critical_level <0 || conf->priv->critical_level > 20 )
+    {
+	g_warning ("Value %d for property %s is out of range \n", conf->priv->critical_level, CRITICAL_POWER_LEVEL);
+	conf->priv->critical_level = 10;
+    }
+}
+
+static void
 xfpm_xfconf_class_init (XfpmXfconfClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
     
+    signals[DPMS_SETTINGS_CHANGED] =
+	    g_signal_new("dpms-settings-changed",
+			 XFPM_TYPE_XFCONF,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmXfconfClass, dpms_settings_changed),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+			 G_TYPE_NONE, 0, G_TYPE_NONE);
+    
+     signals[DPMS_SETTINGS_CHANGED] =
+	    g_signal_new("power-save-settings-changed",
+			 XFPM_TYPE_XFCONF,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmXfconfClass, power_save_settings_changed),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+			 G_TYPE_NONE, 0, G_TYPE_NONE);
+			 
+     signals[BRIGHTNESS_SETTINGS_CHANGED] =
+	    g_signal_new("brightness-settings-changed",
+			 XFPM_TYPE_XFCONF,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmXfconfClass, brightness_settings_changed),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+			 G_TYPE_NONE, 0, G_TYPE_NONE);
+    
+    signals[TRAY_ICON_SETTINGS_CHANGED] =
+	    g_signal_new("tray-icon-settings-changed",
+			 XFPM_TYPE_XFCONF,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmXfconfClass, tray_icon_settings_changed),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+			 G_TYPE_NONE, 0, G_TYPE_NONE);
+    
     object_class->finalize = xfpm_xfconf_finalize;
+    g_type_class_add_private (klass, sizeof(XfpmXfconfPrivate));
 }
 
 static void
-xfpm_xfconf_init (XfpmXfconf *xfconf)
+xfpm_xfconf_init (XfpmXfconf *conf)
 {
-    xfconf->channel = xfconf_channel_new ("xfce4-power-manager");
+    GError *error = NULL;
+      
+    conf->priv = XFPM_XFCONF_GET_PRIVATE (conf);
+    
+    if ( !xfconf_init(&error) )
+    {
+    	g_critical ("xfconf_init failed: %s\n", error->message);
+       	g_error_free (error);
+    }	
+    else
+    {
+    
+	conf->priv->channel = xfconf_channel_new ("xfce4-power-manager");
+
+	g_signal_connect (conf->priv->channel, "property-changed",
+			  G_CALLBACK (xfpm_xfconf_property_changed_cb), conf);
+	xfpm_xfconf_load_configuration (conf);
+    }
+    conf->channel = xfconf_channel_new ("xfce4-power-manager");
 }
 
 static void
 xfpm_xfconf_finalize(GObject *object)
 {
-    XfpmXfconf *xfconf;
-
-    xfconf = XFPM_XFCONF(object);
+    XfpmXfconf *conf;
     
-    if (xfconf->channel )
-	g_object_unref (xfconf->channel);
+    conf = XFPM_XFCONF(object);
     
+    if (conf->priv->channel )
+	g_object_unref (conf->priv->channel);
+    
     G_OBJECT_CLASS(xfpm_xfconf_parent_class)->finalize(object);
 }
 
@@ -76,6 +468,74 @@
 	xfpm_xfconf_object = g_object_new (XFPM_TYPE_XFCONF, NULL);
 	g_object_add_weak_pointer (xfpm_xfconf_object, &xfpm_xfconf_object);
     }
-    
     return XFPM_XFCONF (xfpm_xfconf_object);
 }
+
+gboolean xfpm_xfconf_get_property_bool (XfpmXfconf *conf, const gchar *property)
+{
+    g_return_val_if_fail (XFPM_IS_XFCONF(conf), FALSE);
+    
+    if ( xfpm_strequal (property, LOCK_SCREEN_ON_SLEEP))
+	return conf->priv->lock_screen;
+    else if ( xfpm_strequal (property, POWER_SAVE_ON_BATTERY ) )
+	return conf->priv->power_save_on_battery;
+#ifdef HAVE_DPMS
+    else if ( xfpm_strequal (property, DPMS_SLEEP_MODE ))
+	return conf->priv->sleep_dpms_mode;
+    else if ( xfpm_strequal (property, DPMS_ENABLED_CFG) )
+	return conf->priv->dpms_enabled;
+#endif /* HAVE_DPMS */
+    
+#if GLIB_CHECK_VERSION (2, 16, 0)
+    g_warn_if_reached ();
+#endif
+    return FALSE;
+}
+
+guint8 xfpm_xfconf_get_property_enum (XfpmXfconf *conf, const gchar *property)
+{
+    g_return_val_if_fail (XFPM_IS_XFCONF(conf), 0);
+
+    if ( xfpm_strequal (property, LID_SWITCH_ON_AC_CFG) )
+	return conf->priv->lid_button_ac;
+    else if ( xfpm_strequal (property, LID_SWITCH_ON_BATTERY_CFG) )
+	return conf->priv->lid_button_battery;
+    else if ( xfpm_strequal (property, SLEEP_SWITCH_CFG) )
+	return conf->priv->sleep_button;
+    else if ( xfpm_strequal (property, CRITICAL_BATT_ACTION_CFG) )
+	return conf->priv->critical_action;
+    else if ( xfpm_strequal (property, SHOW_TRAY_ICON_CFG ) )
+	return conf->priv->show_icon;
+    
+#if GLIB_CHECK_VERSION (2, 16, 0)
+    g_warn_if_reached ();
+#endif
+    return 0;
+}
+
+gint xfpm_xfconf_get_property_int (XfpmXfconf *conf, const gchar *property)
+{
+    g_return_val_if_fail (XFPM_IS_XFCONF(conf), 0);
+
+#ifdef HAVE_DPMS
+    if ( xfpm_strequal (property, ON_AC_DPMS_SLEEP))
+	return conf->priv->dpms_sleep_on_ac;
+    else if ( xfpm_strequal (property, ON_BATT_DPMS_SLEEP))
+	return conf->priv->dpms_sleep_on_battery;
+    else if ( xfpm_strequal (property, ON_AC_DPMS_OFF))
+	return conf->priv->dpms_off_on_ac;
+    else if ( xfpm_strequal (property, ON_BATT_DPMS_OFF))
+	return conf->priv->dpms_off_on_battery;
+    else if ( xfpm_strequal (property, BRIGHTNESS_ON_AC ) )
+	return conf->priv->brightness_on_ac_timeout;
+    else if ( xfpm_strequal (property, BRIGHTNESS_ON_BATTERY )) 
+	return conf->priv->brightness_on_battery_timeout;
+    else if ( xfpm_strequal (property, CRITICAL_POWER_LEVEL) )
+	return conf->priv->critical_level;
+#endif /* HAVE_DPMS */
+
+#if GLIB_CHECK_VERSION (2, 16, 0)
+    g_warn_if_reached ();
+#endif
+    return 0;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-xfconf.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-xfconf.h	2009-03-26 19:43:39 UTC (rev 7006)
+++ xfce4-power-manager/trunk/src/xfpm-xfconf.h	2009-03-27 14:37:29 UTC (rev 7007)
@@ -31,11 +31,13 @@
 #define XFPM_XFCONF(o)          (G_TYPE_CHECK_INSTANCE_CAST((o), XFPM_TYPE_XFCONF, XfpmXfconf))
 #define XFPM_IS_XFCONF(o)       (G_TYPE_CHECK_INSTANCE_TYPE((o), XFPM_TYPE_XFCONF))
 
+typedef struct  XfpmXfconfPrivate XfpmXfconfPrivate;
 
 typedef struct
 {
     GObject		  parent;
     XfconfChannel        *channel;
+    XfpmXfconfPrivate    *priv;
     
 } XfpmXfconf;
 
@@ -43,11 +45,27 @@
 {
     GObjectClass	  parent_class;
     
+    void                 (*dpms_settings_changed)		(XfpmXfconf *conf);
+    
+    void                 (*power_save_settings_changed)         (XfpmXfconf *conf);
+    
+    void                 (*brightness_settings_changed)		(XfpmXfconf *conf);
+    
+    void                 (*tray_icon_settings_changed)          (XfpmXfconf *conf);
+    
 } XfpmXfconfClass;
 
-GType        		  xfpm_xfconf_get_type        (void) G_GNUC_CONST;
-XfpmXfconf       	 *xfpm_xfconf_new             (void);
+GType        		  xfpm_xfconf_get_type           	(void) G_GNUC_CONST;
+XfpmXfconf       	 *xfpm_xfconf_new                 	(void);
 
+gboolean                  xfpm_xfconf_get_property_bool 	(XfpmXfconf *conf,
+							         const gchar *property) G_GNUC_PURE;
+								 
+guint8                    xfpm_xfconf_get_property_enum         (XfpmXfconf *conf,
+								 const gchar *property) G_GNUC_PURE;
+								 
+gint                      xfpm_xfconf_get_property_int          (XfpmXfconf *conf,
+								 const gchar *property) G_GNUC_PURE;
 G_END_DECLS
 
 #endif /* __XFPM_XFCONF_H */




More information about the Goodies-commits mailing list