[Goodies-commits] r6903 - in xfce4-power-manager/trunk: . libxfpm settings src

Ali Abdallah aliov at xfce.org
Sat Mar 14 16:40:09 CET 2009


Author: aliov
Date: 2009-03-14 15:40:09 +0000 (Sat, 14 Mar 2009)
New Revision: 6903

Added:
   xfce4-power-manager/trunk/src/xfpm-idle.c
   xfce4-power-manager/trunk/src/xfpm-idle.h
Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/libxfpm/hal-device.c
   xfce4-power-manager/trunk/libxfpm/hal-power.c
   xfce4-power-manager/trunk/settings/xfpm-settings.c
   xfce4-power-manager/trunk/settings/xfpm-settings.glade
   xfce4-power-manager/trunk/src/Makefile.am
   xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
   xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
   xfce4-power-manager/trunk/src/xfpm-config.h
   xfce4-power-manager/trunk/src/xfpm-cpu.c
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-supply.c
Log:
Idle function to reduce screen luminosity after a certain time+fix a bug in the adapter code

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/ChangeLog	2009-03-14 15:40:09 UTC (rev 6903)
@@ -1,4 +1,7 @@
 
+2009-03-14 16:40 Ali aliov at xfce.org 
+	 * : Idle function to reduce screen luminosity after a certain time+fix a bug in the adapter code
+
 2009-03-13 16:31 Ali aliov at xfce.org 
 	 * : Move common code to hal-device+ fix issue with the apater of the previous revision
 

Modified: xfce4-power-manager/trunk/libxfpm/hal-device.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-device.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/libxfpm/hal-device.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -222,7 +222,7 @@
 gboolean
 hal_device_watch (HalDevice *device)
 {
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+    g_return_val_if_fail (device->priv->udi != NULL, FALSE);
     hal_device_add_watch(device);
 
     return device->priv->watch_added;
@@ -231,7 +231,7 @@
 gboolean hal_device_get_property_bool (HalDevice *device, const gchar *property)
 {
     g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+    g_return_val_if_fail (device->priv->udi != NULL, FALSE);
     
     gboolean value = FALSE;
     GError *error = NULL;
@@ -254,7 +254,7 @@
 gint hal_device_get_property_int (HalDevice *device, const gchar *property)
 {
     g_return_val_if_fail (HAL_IS_DEVICE(device), 0);
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), 0);
+    g_return_val_if_fail (device->priv->udi != NULL, 0);
     
     gint value = 0;
     GError *error = NULL;
@@ -277,7 +277,7 @@
 gchar *hal_device_get_property_string  (HalDevice *device, const gchar *property)
 {
     g_return_val_if_fail (HAL_IS_DEVICE(device), NULL);
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), NULL);
+    g_return_val_if_fail (device->priv->udi != NULL, NULL);
     
     gchar *value = NULL;
     GError *error = NULL;
@@ -300,7 +300,7 @@
 gboolean hal_device_has_key (HalDevice *device, const gchar *key)
 {
     g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+    g_return_val_if_fail (device->priv->udi != NULL, FALSE);
     
     gboolean value = FALSE;
     GError *error = NULL;
@@ -324,7 +324,7 @@
 gboolean hal_device_has_capability (HalDevice *device, const gchar *capability)
 {
     g_return_val_if_fail (HAL_IS_DEVICE(device), FALSE);
-    g_return_val_if_fail (HAL_IS_DEVICE(device->priv->udi != NULL), FALSE);
+    g_return_val_if_fail (device->priv->udi != NULL, FALSE);
     
     gboolean value = FALSE;
     GError *error = NULL;

Modified: xfce4-power-manager/trunk/libxfpm/hal-power.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -152,14 +152,13 @@
     }
     else if ( power->priv->adapter_found )
     {
-	gchar *adapter_udi = NULL;
-	g_object_get (G_OBJECT(power->priv->adapter), "udi", &adapter_udi, NULL);
+	const gchar *adapter_udi;
+	adapter_udi = hal_device_get_udi (power->priv->adapter );
+	
 	if (adapter_udi)
 	{
 	    if ( xfpm_strequal (udi, adapter_udi ) )
 		hal_power_remove_adapter (power);
-		
-	    g_free (adapter_udi);
 	}
     }
 }
@@ -295,6 +294,9 @@
     
     if ( power->priv->manager )
     	g_object_unref(power->priv->manager);
+	
+    if ( power->priv->adapter )
+	g_object_unref (power->priv->adapter);
     
     G_OBJECT_CLASS(hal_power_parent_class)->finalize(object);
 }

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -284,8 +284,42 @@
         
     return g_strdup_printf ("%d %s", (int)value, _("Minutes"));
 }
-#endif
+#endif /* HAVE_DPMS */
 
+/*
+ * Format value of GtkRange used with Brightness
+ */
+static gchar *
+format_brightness_value_cb (GtkScale *scale, gdouble value)
+{
+    if ( (int)value == 9 )
+    	return g_strdup _("Never");
+        
+    return g_strdup_printf ("%d %s", (int)value, _("Seconds"));
+}
+
+static void
+brightness_on_battery_value_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+    gint value    = (gint)gtk_range_get_value (GTK_RANGE(w));
+    
+    if (!xfconf_channel_set_uint (channel, BRIGHTNESS_ON_BATTERY, value))
+    {
+	g_critical ("Cannot set value for property %s\n", BRIGHTNESS_ON_BATTERY);
+    }
+}
+
+static void
+brightness_on_ac_value_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+    gint value    = (gint)gtk_range_get_value (GTK_RANGE(w));
+    
+    if (!xfconf_channel_set_uint (channel, BRIGHTNESS_ON_AC, value))
+    {
+	g_critical ("Cannot set value for property %s\n", BRIGHTNESS_ON_AC);
+    }
+}
+
 static gboolean
 critical_spin_output_cb (GtkSpinButton *w, gpointer data)
 {
@@ -477,6 +511,22 @@
 	
     g_free (str);
     
+    /*
+     * 
+     * Brightness on battery power
+     */
+    GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-battery");
+    
+    val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
+    
+    gtk_range_set_value (GTK_RANGE(brg), val);
+    
+    g_signal_connect (brg, "value-changed",
+		      G_CALLBACK(brightness_on_battery_value_changed_cb), channel);
+		      
+    g_signal_connect (brg, "format-value", 
+		      G_CALLBACK(format_brightness_value_cb), NULL);
+    
 }
 
 static void
@@ -547,6 +597,23 @@
 	gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
 	
     g_free (str);
+    
+    
+    /*
+     * 
+     * Brightness on AC power
+     */
+    GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-ac");
+    
+    val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_AC, 9);
+    
+    gtk_range_set_value (GTK_RANGE(brg), val);
+    
+    g_signal_connect (brg, "value-changed",
+		      G_CALLBACK(brightness_on_ac_value_changed_cb), channel);
+		      
+    g_signal_connect (brg, "format-value", 
+		      G_CALLBACK(format_brightness_value_cb), NULL);
 }
 
 static void

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.glade
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-14 15:40:09 UTC (rev 6903)
@@ -310,7 +310,7 @@
                                           <widget class="GtkHScale" id="sleep-dpms-on-ac">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <property name="adjustment">0 0 100 1 10 10</property>
+                                            <property name="adjustment">10 0 60 1 0 0</property>
                                             <property name="show_fill_level">True</property>
                                             <property name="digits">0</property>
                                             <property name="value_pos">bottom</property>
@@ -341,7 +341,7 @@
                                           <widget class="GtkHScale" id="off-dpms-on-ac">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <property name="adjustment">0 0 100 1 10 10</property>
+                                            <property name="adjustment">15 0 60 1 0 10</property>
                                             <property name="show_fill_level">True</property>
                                             <property name="digits">0</property>
                                             <property name="value_pos">bottom</property>
@@ -399,10 +399,10 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <widget class="GtkHScale" id="hscale3">
+                                      <widget class="GtkHScale" id="brg-on-ac">
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
-                                        <property name="adjustment">0 0 100 1 10 10</property>
+                                        <property name="adjustment">10 9 120 1 0 0</property>
                                         <property name="digits">0</property>
                                         <property name="value_pos">bottom</property>
                                       </widget>
@@ -628,7 +628,7 @@
                                               <widget class="GtkHScale" id="sleep-dpms-on-battery">
                                                 <property name="visible">True</property>
                                                 <property name="can_focus">True</property>
-                                                <property name="adjustment">0 0 60 1 10 10</property>
+                                                <property name="adjustment">5 0 60 1 0 0</property>
                                                 <property name="show_fill_level">True</property>
                                                 <property name="digits">0</property>
                                                 <property name="value_pos">bottom</property>
@@ -659,7 +659,7 @@
                                               <widget class="GtkHScale" id="off-dpms-on-battery">
                                                 <property name="visible">True</property>
                                                 <property name="can_focus">True</property>
-                                                <property name="adjustment">0 0 60 1 10 10</property>
+                                                <property name="adjustment">5 0 60 1 0 0</property>
                                                 <property name="show_fill_level">True</property>
                                                 <property name="digits">0</property>
                                                 <property name="value_pos">bottom</property>
@@ -717,10 +717,10 @@
                                           </packing>
                                         </child>
                                         <child>
-                                          <widget class="GtkHScale" id="hscale4">
+                                          <widget class="GtkHScale" id="brg-on-battery">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <property name="adjustment">0 0 100 1 10 10</property>
+                                            <property name="adjustment">10 9 120 1 0 0</property>
                                             <property name="digits">0</property>
                                             <property name="value_pos">bottom</property>
                                           </widget>

Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/Makefile.am	2009-03-14 15:40:09 UTC (rev 6903)
@@ -30,6 +30,8 @@
 	xfpm-lid-hal.h				\
 	xfpm-brightness-hal.c			\
 	xfpm-brightness-hal.h			\
+	xfpm-idle.c				\
+	xfpm-idle.h				\
 	xfpm-tray-icon.c			\
 	xfpm-tray-icon.h			\
 	xfpm-notify.c				\

Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -36,10 +36,17 @@
 #include <errno.h>
 #endif
 
+#include <dbus/dbus-glib.h>
+
 #include <libxfce4util/libxfce4util.h>
+#include <xfconf/xfconf.h>
 
+#include "libxfpm/hal-manager.h"
+#include "libxfpm/hal-device.h"
 #include "libxfpm/xfpm-string.h"
 
+#include "xfpm-idle.h"
+#include "xfpm-config.h"
 #include "xfpm-brightness-hal.h"
 
 /* Init */
@@ -52,10 +59,27 @@
 
 struct XfpmBrightnessHalPrivate
 {
-    //HalCtx   *ctx;
-    gboolean  hw_found;
+    HalManager   *manager;
+    HalDevice    *device;
+    DBusGProxy   *proxy;
+    
+    XfpmIdle     *idle;
+    
+    gint          max_level;
+    guint         on_battery_timeout;
+    guint 	  on_ac_timeout;
+    gboolean      hw_found;
+    
+    gboolean      on_battery;
 };
 
+enum
+{
+    TIMEOUT_INPUT,
+    TIMEOUT_ON_AC_ID,
+    TIMEOUT_ON_BATTERY_ID
+};
+
 G_DEFINE_TYPE(XfpmBrightnessHal, xfpm_brightness_hal, G_TYPE_OBJECT)
 
 static void
@@ -65,7 +89,6 @@
 
     object_class->finalize = xfpm_brightness_hal_finalize;
 
-
     g_type_class_add_private(klass,sizeof(XfpmBrightnessHalPrivate));
 }
 
@@ -74,8 +97,13 @@
 {
     brg->priv = XFPM_BRIGHTNESS_HAL_GET_PRIVATE(brg);
     
-    //brg->priv->ctx 	= NULL;
-    brg->priv->hw_found = FALSE;
+    brg->priv->manager 		= NULL;
+    brg->priv->device           = NULL;
+    brg->priv->proxy    	= NULL;
+    brg->priv->idle             = NULL;
+    brg->priv->hw_found 	= FALSE;
+    brg->priv->on_battery       = FALSE;
+    brg->priv->max_level        = 0;
 }
 
 static void
@@ -85,62 +113,286 @@
 
     brg = XFPM_BRIGHTNESS_HAL(object);
     
+    if ( brg->priv->manager )
+	g_object_unref (brg->priv->manager);
+	
+    if ( brg->priv->proxy )
+	g_object_unref (brg->priv->proxy);
+    
+    if ( brg->priv->idle )
+	g_object_unref (brg->priv->idle);
+	
+    if ( brg->priv->device )
+	g_object_unref (brg->priv->device);
+	
     G_OBJECT_CLASS(xfpm_brightness_hal_parent_class)->finalize(object);
 }
 
-/*
+static gint 
+xfpm_brightness_hal_get_level (XfpmBrightnessHal *brg)
+{
+    GError *error = NULL;
+    gint level = 0;
+    gboolean ret = FALSE;
+    
+    ret = dbus_g_proxy_call (brg->priv->proxy, "GetBrightness", &error,
+	 		     G_TYPE_INVALID,
+			     G_TYPE_INT, &level,
+			     G_TYPE_INVALID);
+
+    if ( error )
+    {
+	g_critical ("Error getting brightness level: %s\n", error->message);
+	g_error_free (error);
+    }
+		       
+    if (!ret)
+    {
+	g_warning("GetBrightness failed\n");
+    }
+    return level;
+}
+G_GNUC_UNUSED
+static gboolean
+xfpm_brightness_hal_set_level (XfpmBrightnessHal *brg, gint level)
+{
+    GError *error = NULL;
+    gboolean ret = FALSE;
+    gint dummy;
+    
+    ret = dbus_g_proxy_call (brg->priv->proxy, "SetBrightness", &error,
+			     G_TYPE_INT, level,
+			     G_TYPE_INVALID,
+			     G_TYPE_INT, &dummy, /* Just to avoid a warning! */
+			     G_TYPE_INVALID );
+		       
+    if ( error )
+    {
+	g_critical ("Error setting brightness level: %s\n", error->message);
+	g_error_free (error);
+	return FALSE;
+    }
+    
+    if (!ret)
+    {
+	g_warning("SetBrightness failed\n");
+    }
+    
+    return TRUE;
+}
+
 static void
-xfpm_brightness_hal_property_modified_cb (LibHalContext *ctx,
-					  const gchar *udi,
-					  const gchar *key, 
-					  dbus_bool_t is_removed,
-					  dbus_bool_t is_added)
+xfpm_brightness_hal_device_changed_cb (HalDevice *device,
+				       const gchar *udi,
+				       const gchar *key, 
+				       gboolean is_removed,
+				       gboolean is_added,
+				       XfpmBrightnessHal *brg)
 {
-    g_print("BRIGHTNESS: udi=%s key=%s is_removed=%s is_added=%s\n", 
-	    udi, key, xfpm_bool_to_string(is_removed), xfpm_bool_to_string(is_added) );
+    g_print("YALLA key=%s\n", key);
+    if ( xfpm_strequal (key, "laptop_panel.num_levels") )
+    {
+	gint level = hal_device_get_property_int (device, "laptop_panel.num_levels");
+	TRACE("Brigthness num_levels=%d\n", level);
+    }
+}
+
+static void
+xfpm_brightness_hal_get_device (XfpmBrightnessHal *brg, const gchar *udi)
+{
+    DBusGConnection *bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
     
+    brg->priv->hw_found = TRUE;
+    hal_device_watch (brg->priv->device);
+    
+    g_signal_connect (brg->priv->device, "device-changed",
+		      G_CALLBACK(xfpm_brightness_hal_device_changed_cb), brg);
+		      
+    brg->priv->proxy = dbus_g_proxy_new_for_name (bus,
+		   			          "org.freedesktop.Hal",
+						  udi,
+					          "org.freedesktop.Hal.Device.LaptopPanel");
+    
+    if ( !brg->priv->proxy )
+	g_warning ("Unable to get proxy for device %s\n", udi);
+	
+    brg->priv->max_level = 
+	hal_device_get_property_int (brg->priv->device, "laptop_panel.num_levels");
+	
+    TRACE ("laptop_panel.num_levels=%d\n", brg->priv->max_level);
 }
 
 static gboolean
 xfpm_brightness_hal_setup (XfpmBrightnessHal *brg)
 {
-    brg->priv->ctx = hal_ctx_new ();
-    
-    if ( !hal_ctx_connect(brg->priv->ctx) )
-    	return FALSE;
+    gchar **udi = NULL;
 
-    gchar **udi = NULL;
-    gint num = 0;
+    brg->priv->manager = hal_manager_new ();
+    brg->priv->device = hal_device_new ();
     
-    udi = hal_ctx_get_device_by_capability (brg->priv->ctx, "laptop_panel", &num );
+    udi = hal_manager_find_device_by_capability (brg->priv->manager, "laptop_panel");
     
     if ( !udi )
     	return FALSE;
 	
-    g_return_val_if_fail (num == 1, FALSE);
+    hal_device_set_udi (brg->priv->device, udi[0]);
+	
+    if ( hal_device_has_key (brg->priv->device, "laptop_panel.num_levels") )
+    {
+	TRACE ("Found laptop_panel with udi=%s\n", udi[0]);
+	xfpm_brightness_hal_get_device (brg, udi[0]);
+    }
+    else
+    {
+	g_object_unref (brg->priv->device);
+    }
+
+    hal_manager_free_string_array (udi);
+    return TRUE;
+}
+
+static void
+xfpm_brightness_hal_reset_cb (XfpmIdle *idle, XfpmBrightnessHal *brg)
+{
+    gint level = xfpm_brightness_hal_get_level(brg);
+     
+    if ( level != brg->priv->max_level -1 )
+	    xfpm_brightness_hal_set_level(brg, brg->priv->max_level -1 );
+}
+
+static void
+xfpm_brightness_hal_alarm_timeout_cb (XfpmIdle *idle, guint id, XfpmBrightnessHal *brg)
+{
+    gint level = xfpm_brightness_hal_get_level(brg);
     
-    hal_ctx_set_device_property_callback (brg->priv->ctx, xfpm_brightness_hal_property_modified_cb);
-    hal_ctx_set_user_data (brg->priv->ctx, brg);
+    if ( id == TIMEOUT_ON_AC_ID && brg->priv->on_ac_timeout != 9)
+    {
+	if ( brg->priv->on_battery )
+	    return;
+	    
+	if ( level != 1 )
+	{
+	    TRACE ("Reducing brightness, on AC power\n");
+	    xfpm_brightness_hal_set_level(brg, 1);
+	}
+    }
+    else if ( id == TIMEOUT_ON_BATTERY_ID && brg->priv->on_battery_timeout != 9)
+    {
+	if ( !brg->priv->on_battery )
+	    return;
+	
+	if ( level != 1 )
+	{
+	    xfpm_brightness_hal_set_level(brg, 1);
+	    TRACE ("Reducing brightness, on battery power\n");
+	}
+    }
+}
+
+static void
+xfpm_brightness_hal_load_config (XfpmBrightnessHal *brg, XfconfChannel *channel)
+{
+    brg->priv->on_ac_timeout =
+	xfconf_channel_get_uint (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;
+    }
     
-    if ( hal_ctx_device_has_key (brg->priv->ctx, udi[0], "laptop_panel.num_levels") )
+    brg->priv->on_battery_timeout =
+	xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
+	
+    if ( brg->priv->on_battery_timeout > 120 || brg->priv->on_battery_timeout < 9)
     {
-	TRACE ("Found laptop_panel with udi=%s\n", udi[0]);
-	brg->priv->hw_found = TRUE;
-	hal_ctx_watch_device (brg->priv->ctx, udi[0] );
+	g_warning ("Value %d for %s is out of range", brg->priv->on_battery_timeout, BRIGHTNESS_ON_BATTERY );
+	brg->priv->on_battery_timeout = 10;
     }
-		    
-    libhal_free_string_array (udi);
+}
+
+static void
+xfpm_brightness_hal_set_timeouts (XfpmBrightnessHal *brg )
+{
+    xfpm_idle_new_alarm (brg->priv->idle, TIMEOUT_ON_AC_ID, brg->priv->on_ac_timeout * 1000);
+    xfpm_idle_new_alarm (brg->priv->idle, TIMEOUT_ON_BATTERY_ID, brg->priv->on_battery_timeout * 1000);
     
-    return TRUE;
+    xfpm_idle_alarm_reset_all (brg->priv->idle);
 }
-*/
+
+static void
+xfpm_brightness_hal_property_changed_cb (XfconfChannel *channel, gchar *property, 
+				         GValue *value, 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);
+    
+}
+
 XfpmBrightnessHal *
-xfpm_brightness_hal_new(void)
+xfpm_brightness_hal_new (XfconfChannel *channel)
 {
     XfpmBrightnessHal *brg = NULL;
     brg = g_object_new (XFPM_TYPE_BRIGHTNESS_HAL, NULL);
     
-    //xfpm_brightness_hal_setup (brg);
+    xfpm_brightness_hal_setup (brg);
+
+    if ( brg->priv->hw_found || brg->priv->max_level != 0 )
+    {
+	brg->priv->idle     = xfpm_idle_new ();
+	
+	g_signal_connect (brg->priv->idle, "alarm-timeout",
+			  G_CALLBACK(xfpm_brightness_hal_alarm_timeout_cb), brg);
+			  
+	g_signal_connect (brg->priv->idle, "reset",
+			  G_CALLBACK(xfpm_brightness_hal_reset_cb), brg);
+			  
+	xfpm_brightness_hal_load_config (brg, channel);
+	
+	g_signal_connect (channel, "property-changed", 
+			  G_CALLBACK(xfpm_brightness_hal_property_changed_cb), brg);
+			  
+	xfpm_brightness_hal_set_timeouts (brg);
+    }
     
     return brg;
 }
+
+void
+xfpm_brightness_hal_set_on_battery (XfpmBrightnessHal *brg, gboolean on_battery)
+{
+    g_return_if_fail (XFPM_IS_BRIGHTNESS_HAL(brg));
+    
+    brg->priv->on_battery = on_battery;
+}
+

Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.h	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.h	2009-03-14 15:40:09 UTC (rev 6903)
@@ -45,8 +45,10 @@
 } XfpmBrightnessHalClass;
 
 GType        				xfpm_brightness_hal_get_type        (void) G_GNUC_CONST;
-XfpmBrightnessHal      		       *xfpm_brightness_hal_new             (void);
+XfpmBrightnessHal      		       *xfpm_brightness_hal_new             (XfconfChannel *channel);
 
+void                                    xfpm_brightness_hal_set_on_battery  (XfpmBrightnessHal *brg,
+									     gboolean on_battery);
 G_END_DECLS
 
 #endif /* __XFPM_BRIGHTNESS_HAL_H */

Modified: xfce4-power-manager/trunk/src/xfpm-config.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-config.h	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-config.h	2009-03-14 15:40:09 UTC (rev 6903)
@@ -38,6 +38,9 @@
 #define         LOCK_SCREEN_ON_SLEEP        "/xfce4-power-manager/lock-screen-suspend-hibernate"
 
 #define 	LCD_BRIGHTNESS_CFG          "/xfce4-power-manager/lcd-brightness"
+#define         BRIGHTNESS_ON_AC            "/xfce4-power-manager/brightness-on-ac"
+#define         BRIGHTNESS_ON_BATTERY       "/xfce4-power-manager/brightness-on-battery"
+
 #define 	LID_SWITCH_ON_AC_CFG        "/xfce4-power-manager/lid-action-on-ac"
 #define 	LID_SWITCH_ON_BATTERY_CFG   "/xfce4-power-manager/lid-action-on-battery"
 #define 	SLEEP_SWITCH_CFG            "/xfce4-power-manager/sleep-switch-action"

Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -38,8 +38,6 @@
 
 #include <libxfce4util/libxfce4util.h>
 
-#include <hal/libhal.h>
-
 #include "libxfpm/dbus-hal.h"
 #include "libxfpm/xfpm-string.h"
 
@@ -152,7 +150,6 @@
 	return;
     }
 
-    libhal_free_string (current_governor);
 }
 
 static void

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -198,6 +198,7 @@
     xfpm_dpms_set_on_battery (engine->priv->dpms, on_battery);
 #endif
     xfpm_cpu_set_on_battery (engine->priv->cpu, on_battery);
+    xfpm_brightness_hal_set_on_battery (engine->priv->brg_hal, on_battery);
 }
 
 static void
@@ -296,7 +297,7 @@
     /*
      * Brightness HAL
      */
-    engine->priv->brg_hal = xfpm_brightness_hal_new ();
+    engine->priv->brg_hal = xfpm_brightness_hal_new (engine->priv->channel);
     
 }
 

Added: xfce4-power-manager/trunk/src/xfpm-idle.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-idle.c	                        (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-idle.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -0,0 +1,345 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/*
+ * Modified version of libidletime from gpm version 2.24.2
+ * Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/sync.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdk.h>
+
+#include "xfpm-idle.h"
+
+/* Init */
+static void xfpm_idle_class_init (XfpmIdleClass *klass);
+static void xfpm_idle_init       (XfpmIdle *idle);
+static void xfpm_idle_finalize   (GObject *object);
+
+#define XFPM_IDLE_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE((o), XFPM_TYPE_IDLE, XfpmIdlePrivate))
+
+struct XfpmIdlePrivate
+{
+    int 		sync_event;
+    XSyncCounter	idle_counter;
+    GPtrArray          *array;
+};
+
+typedef struct
+{
+    guint	id;
+    XSyncValue  timeout;
+    XSyncAlarm  xalarm;
+    
+} IdleAlarm;
+
+enum
+{
+    RESET,
+    ALARM_TIMEOUT,
+    LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE(XfpmIdle, xfpm_idle, G_TYPE_OBJECT)
+
+static void
+xfpm_idle_class_init(XfpmIdleClass *klass)
+{
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+     signals[RESET] =
+	    g_signal_new("reset",
+			 XFPM_TYPE_IDLE,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmIdleClass, reset),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__VOID,
+			 G_TYPE_NONE, 0, G_TYPE_NONE);
+
+    signals[ALARM_TIMEOUT] =
+	    g_signal_new("alarm-timeout",
+			 XFPM_TYPE_IDLE,
+			 G_SIGNAL_RUN_LAST,
+			 G_STRUCT_OFFSET(XfpmIdleClass, alarm_timeout),
+			 NULL, NULL,
+			 g_cclosure_marshal_VOID__INT,
+			 G_TYPE_NONE, 1, G_TYPE_INT);
+			 
+    object_class->finalize = xfpm_idle_finalize;
+
+    g_type_class_add_private(klass,sizeof(XfpmIdlePrivate));
+}
+
+static IdleAlarm *
+xfpm_idle_find_alarm (XfpmIdle *idle, guint id)
+{
+    int i;
+    IdleAlarm *alarm;
+    for (i = 0; i<idle->priv->array->len; i++) 
+    {
+	alarm = g_ptr_array_index (idle->priv->array, i);
+	if (alarm->id == id)
+	{
+	    return alarm;
+	}
+    }
+    return NULL;
+}
+
+static void
+xfpm_idle_xsync_alarm_set (XfpmIdle *idle, IdleAlarm *alarm, gboolean positive)
+{
+    XSyncAlarmAttributes attr;
+    XSyncValue delta;
+    unsigned int flags;
+    XSyncTestType test;
+
+    if (positive) 
+	test = XSyncPositiveComparison;
+    else 
+	test = XSyncNegativeComparison;
+
+    XSyncIntToValue (&delta, 0);
+
+    attr.trigger.counter = idle->priv->idle_counter;
+    attr.trigger.value_type = XSyncAbsolute;
+    attr.trigger.test_type = test;
+    attr.trigger.wait_value = alarm->timeout;
+    attr.delta = delta;
+
+    flags = XSyncCACounter | XSyncCAValueType | XSyncCATestType | XSyncCAValue | XSyncCADelta;
+
+    if ( alarm->xalarm ) 
+	XSyncChangeAlarm ( GDK_DISPLAY (), alarm->xalarm, flags, &attr);
+    else 
+	alarm->xalarm = XSyncCreateAlarm (GDK_DISPLAY (), flags, &attr);
+}
+
+static void
+xfpm_idle_xsync_value_add_one (XSyncValue *from, XSyncValue *to)
+{
+    int overflow;
+    XSyncValue add;
+    XSyncIntToValue (&add, -1);
+    XSyncValueAdd (to, *from, add, &overflow);
+}
+
+static void
+xfpm_idle_x_set_reset (XfpmIdle *idle, XSyncAlarmNotifyEvent *alarm_event)
+{
+    IdleAlarm *alarm;
+    
+    alarm = xfpm_idle_find_alarm (idle, 0);
+    xfpm_idle_xsync_value_add_one (&alarm_event->counter_value, &alarm->timeout);
+    xfpm_idle_xsync_alarm_set (idle, alarm, FALSE);
+}
+
+static IdleAlarm *
+xfpm_idle_alarm_find_event (XfpmIdle *idle, XSyncAlarmNotifyEvent *alarm_event)
+{
+    guint i;
+    IdleAlarm *alarm;
+    
+    for (i=0; i<idle->priv->array->len; i++) 
+    {
+	alarm = g_ptr_array_index (idle->priv->array, i);
+	if (alarm_event->alarm == alarm->xalarm) 
+	{
+	    return alarm;
+	}
+    }
+    return NULL;
+}
+
+void
+xfpm_idle_alarm_reset_all (XfpmIdle *idle)
+{
+    guint i;
+    IdleAlarm *alarm;
+
+    for ( i=1; i<idle->priv->array->len; i++) 
+    {
+	alarm = g_ptr_array_index (idle->priv->array, i);
+	xfpm_idle_xsync_alarm_set (idle, alarm, TRUE);
+    }
+	
+    g_signal_emit (G_OBJECT(idle), signals[RESET], 0 );
+}
+
+static GdkFilterReturn
+xfpm_idle_x_event_filter (GdkXEvent *gdkxevent, GdkEvent *event, gpointer data)
+{
+    IdleAlarm *alarm;
+    XfpmIdle *idle = (XfpmIdle *) data;
+    XEvent *xevent = ( XEvent *) gdkxevent;
+    XSyncAlarmNotifyEvent *alarm_event;
+    
+    if ( xevent->type != idle->priv->sync_event + XSyncAlarmNotify )
+        return GDK_FILTER_CONTINUE;
+    
+    alarm_event = (XSyncAlarmNotifyEvent *) xevent;
+    
+    alarm = xfpm_idle_alarm_find_event (idle, alarm_event);
+    
+    if ( alarm )
+    {
+	g_print("Alarm id=%d\n",alarm->id);
+	if (alarm->id != 0 )
+	{
+	    g_signal_emit (G_OBJECT(idle), signals[ALARM_TIMEOUT], 0, alarm->id );
+	    xfpm_idle_x_set_reset (idle, alarm_event);
+	    return GDK_FILTER_CONTINUE;
+	}
+	xfpm_idle_alarm_reset_all (idle);
+    }
+    
+    return GDK_FILTER_CONTINUE;
+}
+
+static IdleAlarm *
+xfpm_idle_new_alarm_internal (XfpmIdle *idle, guint id)
+{
+    IdleAlarm *alarm;
+    alarm = g_new0 (IdleAlarm, 1);
+    alarm->id = id;
+    g_ptr_array_add (idle->priv->array, alarm);
+    
+    return alarm;
+}
+
+static void
+xfpm_idle_init (XfpmIdle *idle)
+{
+    IdleAlarm *alarm;
+    int sync_error = 0;
+    int ncounters;
+    XSyncSystemCounter *counters;
+    int i;
+    
+    idle->priv = XFPM_IDLE_GET_PRIVATE(idle);
+    
+    idle->priv->array = g_ptr_array_new ();
+    idle->priv->sync_event = 0;
+    
+    if (!XSyncQueryExtension (GDK_DISPLAY (), &idle->priv->sync_event, &sync_error) )
+    {
+	g_warning ("No Sync extension.");
+	return;
+    }
+    
+    counters = XSyncListSystemCounters (GDK_DISPLAY (), &ncounters);
+    
+    for ( i = 0; i < ncounters && !idle->priv->idle_counter; i++)
+    {
+	if (!strcmp(counters[i].name, "IDLETIME"))
+	    idle->priv->idle_counter = counters[i].counter;
+    }
+    
+    if ( !idle->priv->idle_counter )
+    {
+	g_warning ("No idle counter.");
+	return;
+    }
+    
+    gdk_error_trap_push ();
+    XSelectInput (GDK_DISPLAY (), GDK_ROOT_WINDOW (), XSyncAlarmNotifyMask);
+    
+    if ( gdk_error_trap_pop () )
+	g_warning ("XSelect Input failed");
+
+    gdk_window_add_filter (NULL, xfpm_idle_x_event_filter, idle);
+    
+    alarm = xfpm_idle_new_alarm_internal (idle, 0);
+}
+
+static void
+xfpm_idle_free_alarm (XfpmIdle *idle, IdleAlarm *alarm)
+{
+    XSyncDestroyAlarm (GDK_DISPLAY(), alarm->xalarm);
+    g_free(alarm);
+    g_ptr_array_remove (idle->priv->array, alarm);
+}
+
+static void
+xfpm_idle_finalize(GObject *object)
+{
+    int i;
+    XfpmIdle *idle;
+    IdleAlarm *alarm;
+    
+    idle = XFPM_IDLE(object);
+    
+    for ( i = 0; i<idle->priv->array->len; i++) 
+    {
+	alarm = g_ptr_array_index (idle->priv->array, i);
+	xfpm_idle_free_alarm (idle, alarm);
+    }
+    g_ptr_array_free (idle->priv->array, TRUE);
+
+    G_OBJECT_CLASS(xfpm_idle_parent_class)->finalize(object);
+}
+
+XfpmIdle *
+xfpm_idle_new(void)
+{
+    XfpmIdle *idle = NULL;
+    idle = g_object_new (XFPM_TYPE_IDLE,NULL);
+    return idle;
+}
+
+gboolean 
+xfpm_idle_new_alarm (XfpmIdle *idle, guint id, guint timeout)
+{
+    IdleAlarm *alarm;
+    
+    g_return_val_if_fail (XFPM_IS_IDLE (idle), FALSE);
+    
+    if ( id == 0 )
+	return FALSE;
+	
+    if ( timeout == 0 )
+	return FALSE;
+    
+    alarm = xfpm_idle_find_alarm (idle, id);
+    
+    if ( !alarm )
+    {
+	alarm = xfpm_idle_new_alarm_internal (idle, id);
+	XSyncIntToValue (&alarm->timeout, timeout);
+	xfpm_idle_xsync_alarm_set (idle, alarm, TRUE);
+    }
+    return TRUE;
+}
+

Added: xfce4-power-manager/trunk/src/xfpm-idle.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-idle.h	                        (rev 0)
+++ xfce4-power-manager/trunk/src/xfpm-idle.h	2009-03-14 15:40:09 UTC (rev 6903)
@@ -0,0 +1,62 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __XFPM_IDLE_H
+#define __XFPM_IDLE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define XFPM_TYPE_IDLE        (xfpm_idle_get_type () )
+#define XFPM_IDLE(o)          (G_TYPE_CHECK_INSTANCE_CAST((o), XFPM_TYPE_IDLE, XfpmIdle))
+#define XFPM_IS_IDLE(o)       (G_TYPE_CHECK_INSTANCE_TYPE((o), XFPM_TYPE_IDLE))
+
+typedef struct XfpmIdlePrivate XfpmIdlePrivate;
+
+typedef struct
+{
+    GObject		  parent;
+    XfpmIdlePrivate	 *priv;
+    
+} XfpmIdle;
+
+typedef struct
+{
+    GObjectClass 	  parent_class;
+    
+    void                 (*alarm_timeout)	    (XfpmIdle *idle,
+						     guint id);
+						     
+    void		 (*reset)		    (XfpmIdle *idle);
+    
+} XfpmIdleClass;
+
+GType        		  xfpm_idle_get_type        (void) G_GNUC_CONST;
+XfpmIdle       		 *xfpm_idle_new             (void);
+
+gboolean                  xfpm_idle_new_alarm       (XfpmIdle *idle,
+						     guint id,
+						     guint timeout);
+						     
+void                      xfpm_idle_alarm_reset_all (XfpmIdle *idle);
+G_END_DECLS
+
+#endif /* __XFPM_IDLE_H */

Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-14 15:26:30 UTC (rev 6902)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-14 15:40:09 UTC (rev 6903)
@@ -65,6 +65,7 @@
     
     gboolean 	   adapter_found;
     gboolean       adapter_present;
+
     guint8         critical_level;
     guint8         power_management;
 };
@@ -687,8 +688,8 @@
 static void
 xfpm_supply_add_adapter (XfpmSupply *supply, const HalDevice *device)
 {
-    supply->priv->adapter_present = TRUE;
-
+    supply->priv->adapter_found = TRUE;
+    
     supply->priv->adapter = xfpm_adapter_new (device);
 	g_signal_connect (supply->priv->adapter, "adapter-changed", 
 			  G_CALLBACK(xfpm_supply_adapter_changed_cb), supply);
@@ -719,7 +720,7 @@
 }
 
 static void
-xfpm_supply_removed_adapter (XfpmSupply *supply)
+xfpm_supply_remove_adapter (XfpmSupply *supply)
 {
     supply->priv->adapter_found = FALSE;
     g_object_unref (supply->priv->adapter);
@@ -738,7 +739,7 @@
 xfpm_supply_adapter_removed_cb (HalPower *power, XfpmSupply *supply)
 {
     if ( supply->priv->adapter_found )
-	xfpm_supply_removed_adapter (supply);
+	xfpm_supply_remove_adapter (supply);
 }
 
 static void




More information about the Goodies-commits mailing list