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

Ali Abdallah aliov at xfce.org
Fri Oct 10 10:05:20 CEST 2008


Author: aliov
Date: 2008-10-10 08:05:20 +0000 (Fri, 10 Oct 2008)
New Revision: 5553

Modified:
   xfce4-power-manager/trunk/src/xfpm-driver.c
   xfce4-power-manager/trunk/src/xfpm-hal.c
   xfce4-power-manager/trunk/src/xfpm-hal.h
   xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
   xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h
   xfce4-power-manager/trunk/src/xfpm-settings.c
Log:
Added lcd brightness control

Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c	2008-10-10 08:05:20 UTC (rev 5553)
@@ -226,6 +226,7 @@
     g_object_set(G_OBJECT(priv->cpu),"on-ac-adapter",priv->ac_adapter_present,NULL);
 
     g_object_set(G_OBJECT(priv->batt),"on-ac-adapter",priv->ac_adapter_present,NULL);
+    g_object_set(G_OBJECT(priv->lcd),"on-ac-adapter",priv->ac_adapter_present,NULL);
 }                                                    
 
 static void
@@ -323,6 +324,12 @@
     }
 #endif    
 
+    if ( !strcmp(property,LCD_BRIGHTNESS_CFG) )
+    {
+        gboolean val = g_value_get_boolean(value);
+        g_object_set(G_OBJECT(priv->lcd),"brightness-enabled",val,NULL);
+        return;
+    }
 #ifdef HAVE_DPMS
     if ( !strcmp(property,DPMS_ENABLE_CFG) ) 
     {
@@ -455,7 +462,7 @@
 #else
     with_dpms = FALSE;
 #endif
-            
+
     dialog = xfpm_settings_new(channel,
                                priv->formfactor == SYSTEM_LAPTOP ? TRUE : FALSE,
                                priv->can_hibernate,

Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c	2008-10-10 08:05:20 UTC (rev 5553)
@@ -658,14 +658,14 @@
     return TRUE;
 }	
 
-gboolean
+void
 xfpm_hal_set_brightness (XfpmHal *xfpm_hal,
                          const gchar *interface,
                          gint32 level,
                          GError **gerror)
                                                             
 {
-    g_return_val_if_fail(XFPM_IS_HAL(xfpm_hal),FALSE);
+    g_return_if_fail(XFPM_IS_HAL(xfpm_hal));
     
     XfpmHalPrivate *priv;
     priv = XFPM_HAL_GET_PRIVATE(xfpm_hal);
@@ -680,7 +680,7 @@
 	if (!mess) 
 	{
 	    g_set_error(gerror,0,0,_("Out of memmory"));
-		return FALSE;
+		return;
 	}	
     
     dbus_message_append_args(mess,DBUS_TYPE_INT32,&level,DBUS_TYPE_INVALID);
@@ -694,18 +694,18 @@
          dbus_set_g_error(gerror,&error);
          dbus_error_free(&error);
          dbus_message_unref(mess);
-         return FALSE;
+         return;
     }
         
     if ( !reply ) 
     {
         g_set_error(gerror,0,0,_("No reply from HAL daemon"));
         dbus_message_unref(mess);
-        return FALSE;
+        return;
     }
     
     dbus_message_unref(reply);
-    return TRUE;
+    return;
 }
 
 gint32

Modified: xfce4-power-manager/trunk/src/xfpm-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-hal.h	2008-10-10 08:05:20 UTC (rev 5553)
@@ -116,7 +116,7 @@
 gboolean             xfpm_hal_suspend                      (XfpmHal *xfpm_hal,
                                                             GError **gerror,
                                                             guint8 *critical);
-gboolean             xfpm_hal_set_brightness               (XfpmHal *xfpm_hal,
+void                 xfpm_hal_set_brightness               (XfpmHal *xfpm_hal,
                                                             const gchar *interface,
                                                             gint level32,
                                                             GError **gerror);

Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c	2008-10-10 08:05:20 UTC (rev 5553)
@@ -55,21 +55,68 @@
 static void xfpm_lcd_brightness_class_init(XfpmLcdBrightnessClass *klass);
 static void xfpm_lcd_brightness_finalize(GObject *object);
 
+static void xfpm_lcd_brightness_set_property(GObject *object,
+                                             guint prop_id,
+                                             const GValue *value,
+                                             GParamSpec *pspec);
+static void xfpm_lcd_brightness_get_property(GObject *object,
+                                             guint prop_id,
+                                             GValue *value,
+                                             GParamSpec *pspec);
+
+static void xfpm_lcd_brightness_set_level(XfpmLcdBrightness *lcd);
+
 static void xfpm_lcd_brightness_load_config(XfpmLcdBrightness *lcd);
 
+static void xfpm_lcd_brightness_get_device(XfpmLcdBrightness *lcd);
+
+static void xfpm_lcd_brightness_notify_cb(GObject *object,
+                                          GParamSpec *arg1,
+                                          gpointer data);
+
 struct XfpmLcdBrightnessPrivate
 {
+    
     XfpmHal *hal;
+    gboolean device_exists;
+    gchar *udi;
+    gint max_brightness;
 
 };
 
 G_DEFINE_TYPE(XfpmLcdBrightness,xfpm_lcd_brightness,G_TYPE_OBJECT)
 
+enum
+{
+    PROP_0,
+    PROP_AC_ADAPTER,
+    PROP_BRIGHTNESS
+};
+
 static void xfpm_lcd_brightness_class_init(XfpmLcdBrightnessClass *klass)
 {
     GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
     gobject_class->finalize = xfpm_lcd_brightness_finalize;
+    gobject_class->set_property = xfpm_lcd_brightness_set_property;
+    gobject_class->get_property = xfpm_lcd_brightness_get_property;
     
+    g_object_class_install_property(gobject_class,
+                                    PROP_AC_ADAPTER,
+                                    g_param_spec_boolean("on-ac-adapter",
+                                                         "On ac adapter",
+                                                         "On Ac power",
+                                                         TRUE,
+                                                         G_PARAM_READWRITE));
+                                                         
+    g_object_class_install_property(gobject_class,
+                                    PROP_BRIGHTNESS,
+                                    g_param_spec_boolean("brightness-enabled",
+                                                         "brightness enabled",
+                                                         "brightness settings",
+                                                         TRUE,
+                                                         G_PARAM_READWRITE));
+    
     g_type_class_add_private(klass,sizeof(XfpmLcdBrightnessPrivate));
 
 }
@@ -80,8 +127,19 @@
     priv = XFPM_LCD_BRIGHTNESS_GET_PRIVATE(lcd);
     
     priv->hal = xfpm_hal_new();
+    priv->device_exists = FALSE;
+    priv->udi = NULL;
+    priv->max_brightness = -1;
+    
     xfpm_lcd_brightness_load_config(lcd);
+    xfpm_lcd_brightness_get_device(lcd);
     
+    if ( priv->device_exists )
+    {
+        g_signal_connect(G_OBJECT(lcd),"notify",
+                         G_CALLBACK(xfpm_lcd_brightness_notify_cb),NULL);
+    }
+    
 }
 
 static void xfpm_lcd_brightness_finalize(GObject *object)
@@ -94,10 +152,115 @@
     {
         g_object_unref(lcd->priv->hal);
     }
+    if ( lcd->priv->udi )
+    {
+        g_free(lcd->priv->udi);
+    }
     
     G_OBJECT_CLASS(xfpm_lcd_brightness_parent_class)->finalize(object);
 }
 
+static void 
+xfpm_lcd_brightness_set_property(GObject *object,
+                                 guint prop_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
+{
+#ifdef DEBUG
+    gchar *content;
+    content = g_strdup_value_contents(value);
+    XFPM_DEBUG("param:%s value contents:%s\n",pspec->name,content);
+    g_free(content);
+#endif      
+    XfpmLcdBrightness *lcd;
+    lcd = XFPM_LCD_BRIGHTNESS(object);
+    
+    switch (prop_id)
+    {
+    case PROP_AC_ADAPTER:
+        lcd->ac_adapter_present = g_value_get_boolean(value);
+        break;   
+    case PROP_BRIGHTNESS:
+        lcd->brightness_control_enabled = g_value_get_boolean(value);
+        break;    
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+        break;
+    }
+
+}
+
+static void 
+xfpm_lcd_brightness_get_property(GObject *object,
+                                 guint prop_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
+{
+    XfpmLcdBrightness *lcd;
+    lcd = XFPM_LCD_BRIGHTNESS(object);
+        
+    switch (prop_id)
+    {
+    case PROP_AC_ADAPTER:
+        g_value_set_boolean(value,lcd->ac_adapter_present);
+        break;   
+    case PROP_BRIGHTNESS:
+        g_value_set_boolean(value,lcd->brightness_control_enabled);
+        break;    
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+        break;
+    }                         
+    
+#ifdef DEBUG
+    gchar *content;
+    content = g_strdup_value_contents(value);
+    XFPM_DEBUG("param:%s value contents:%s\n",pspec->name,content);
+    g_free(content);
+#endif  
+    
+}                                 
+
+static void
+xfpm_lcd_brightness_set_level(XfpmLcdBrightness *lcd)
+{
+    XfpmLcdBrightnessPrivate *priv;
+    priv = XFPM_LCD_BRIGHTNESS_GET_PRIVATE(lcd);
+    
+    GError *error = NULL;
+    gint32 level =
+        xfpm_hal_get_brightness(priv->hal,priv->udi,&error);
+        
+    if ( error )
+    {
+        XFPM_DEBUG("Get brightness failed: %s\n",error->message);
+        g_error_free(error);
+        return;
+    }
+    
+    if ( lcd->ac_adapter_present )
+    {
+        if ( level != priv->max_brightness -1 )
+        {
+            xfpm_hal_set_brightness(priv->hal,priv->udi,priv->max_brightness -1,&error);
+            if ( error )
+            {
+                XFPM_DEBUG("Error setting brigthness level: %s\n",error->message);
+                return;
+            }
+        }
+    }
+    else 
+    {
+        xfpm_hal_set_brightness(priv->hal,priv->udi, 1,&error);
+        if ( error )
+        {
+            XFPM_DEBUG("Error setting brigthness level: %s\n",error->message);
+            return;
+        }
+    }
+}
+
 static void xfpm_lcd_brightness_load_config(XfpmLcdBrightness *lcd)
 {
     XFPM_DEBUG("Loading configuration\n");
@@ -107,19 +270,80 @@
         g_critical("xfconf init failed: %s\n",g_error->message);
         XFPM_DEBUG("Using default values\n");
         g_error_free(g_error);
-        lcd->brightness_control_enabled = FALSE;
+        lcd->brightness_control_enabled = TRUE;
         return;
     }
     
     XfconfChannel *channel;
     channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
 
-    lcd->brightness_control_enabled = xfconf_channel_get_bool(channel,LCD_BRIGHTNESS_CFG,FALSE);
+    lcd->brightness_control_enabled = xfconf_channel_get_bool(channel,LCD_BRIGHTNESS_CFG,TRUE);
     
     g_object_unref(channel);
     xfconf_shutdown();    
 }
 
+static void
+xfpm_lcd_brightness_get_device(XfpmLcdBrightness *lcd)
+{
+    XfpmLcdBrightnessPrivate *priv;
+    priv = XFPM_LCD_BRIGHTNESS_GET_PRIVATE(lcd);
+    
+    gchar **udi;
+    gint num;
+    GError *error = NULL;
+    udi = xfpm_hal_get_device_udi_by_capability(priv->hal,"laptop_panel",&num,&error);
+    
+    if ( error ) 
+    {
+        XFPM_DEBUG("%s: \n",error->message);
+        g_error_free(error);
+        return;
+    }
+    
+    if ( !udi )
+    {
+        XFPM_DEBUG("No device with laptop_panel capability\n");
+        return;
+    }
+    
+    /* Only one device should be in HAL */
+    g_return_if_fail(num == 1);        
+    
+    priv->udi = g_strdup(udi[0]);
+    XFPM_DEBUG("Found laptop panel device: %s\n",udi[0]);
+    libhal_free_string_array(udi);
+    
+    if ( xfpm_hal_device_have_key(priv->hal,priv->udi,"laptop_panel.num_levels") )
+    {
+        priv->max_brightness = xfpm_hal_get_int_info(priv->hal,priv->udi,"laptop_panel.num_levels",&error);
+        if ( error )
+        {
+            XFPM_DEBUG("error getting max brigthness level: %s\n",error->message);
+            g_error_free(error);
+            return;
+        }
+        priv->device_exists = TRUE;
+    }
+}
+
+static void
+xfpm_lcd_brightness_notify_cb(GObject *object,GParamSpec *arg1,gpointer data)
+{
+    XfpmLcdBrightness *lcd;
+    
+    lcd = XFPM_LCD_BRIGHTNESS(object);
+    
+    XFPM_DEBUG("brightness callback\n");
+    
+    if ( !lcd->brightness_control_enabled )
+    {
+        return;
+    }
+    
+    xfpm_lcd_brightness_set_level(lcd);    
+}
+
 XfpmLcdBrightness *
 xfpm_lcd_brightness_new(void)
 {

Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.h	2008-10-10 08:05:20 UTC (rev 5553)
@@ -37,6 +37,7 @@
     XfpmLcdBrightnessPrivate *priv;
     
     gboolean brightness_control_enabled;
+    gboolean ac_adapter_present;
     
 } XfpmLcdBrightness;
 

Modified: xfce4-power-manager/trunk/src/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-10 07:34:54 UTC (rev 5552)
+++ xfce4-power-manager/trunk/src/xfpm-settings.c	2008-10-10 08:05:20 UTC (rev 5553)
@@ -153,6 +153,17 @@
 } 
 #endif
 
+static void
+set_lcd_brightness_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+    gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    
+    if(!xfconf_channel_set_bool(channel,LCD_BRIGHTNESS_CFG,value))
+    {
+        g_critical("Cannot set value %s\n",LCD_BRIGHTNESS_CFG);
+    }
+}
+
 #ifdef HAVE_DPMS
 static void
 set_dpms_cb(GtkWidget *widget,XfconfChannel *channel)
@@ -417,7 +428,7 @@
     notify_bt = gtk_check_button_new();
     gtk_widget_show(notify_bt);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(notify_bt),
-                                 xfconf_channel_get_bool(channel,BATT_STATE_NOTIFICATION_CFG,TRUE));                    
+                                 xfconf_channel_get_bool(channel,BATT_STATE_NOTIFICATION_CFG,TRUE)); 
     g_signal_connect(notify_bt,"toggled",G_CALLBACK(set_battery_state_notification_cb),channel); 
     gtk_table_attach(GTK_TABLE(table),notify_bt,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);                             
 #endif        
@@ -636,6 +647,32 @@
     return hbox;
 }
 
+static GtkWidget *
+xfpm_settings_lcd_brightness(XfconfChannel *channel,gboolean laptop)
+{
+    GtkWidget *hbox;
+    hbox = gtk_hbox_new(FALSE,2);
+
+    if ( laptop ) 
+    {
+        GtkWidget *label;
+        label = gtk_label_new(_("Enable lcd brigthness control"));
+        gtk_widget_show(label);
+        gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
+        
+        GtkWidget *brg;
+        brg = gtk_check_button_new();
+        gtk_widget_show(brg);
+        gtk_box_pack_start(GTK_BOX(hbox),brg,FALSE,FALSE,0);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(brg),
+                                    xfconf_channel_get_bool(channel,LCD_BRIGHTNESS_CFG,TRUE));
+        g_signal_connect(brg,"toggled",G_CALLBACK(set_lcd_brightness_cb),channel);
+        gtk_widget_show(hbox);
+    }
+    
+    return hbox;
+}
+
 #ifdef HAVE_DPMS
 static GtkWidget *
 xfpm_settings_dpms_on_battery(XfconfChannel *channel)
@@ -674,6 +711,7 @@
     return frame;
     
 }
+#endif
 
 static GtkWidget *
 xfpm_settings_dpms_on_ac_adapter(XfconfChannel *channel,const gchar *label)
@@ -719,28 +757,29 @@
     GtkWidget *hbox;
     hbox = gtk_hbox_new(FALSE,2);
     gtk_widget_show(hbox);
+    GtkWidget *vbox;
+    vbox = gtk_vbox_new(FALSE,0);
     
+    gtk_widget_show(vbox);
+#ifdef HAVE_DPMS
     GtkWidget *frame;
     frame = xfpm_settings_dpms_on_ac_adapter(channel,
                                             laptop ? _("Monitor settings on AC power") : _("Monitor settings"));
     gtk_box_pack_start(GTK_BOX(hbox),frame,FALSE,FALSE,0);
-    
+    gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,0);
+
     if ( laptop )
     {
         frame = xfpm_settings_dpms_on_battery(channel);
         gtk_box_pack_start(GTK_BOX(hbox),frame,FALSE,FALSE,0);
     }
-    
+
     if (! dpms_capable ) 
     {
         GtkWidget *label;
         label = gtk_label_new(_("Your monitor doesn't support DPMS settings"));
         gtk_widget_show(label);
-        GtkWidget *vbox;
-        vbox = gtk_vbox_new(FALSE,2);
-        gtk_widget_show(vbox);
-        gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-        gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+        gtk_box_pack_start(GTK_BOX(vbox),label,TRUE,TRUE,0);
         gtk_widget_set_sensitive(dpms_op,FALSE);
         xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_ac_dpms),FALSE); 
     
@@ -748,12 +787,14 @@
         {
             xfpm_dpms_spins_set_active(XFPM_DPMS_SPINS(on_batt_dpms),FALSE); 
         }
-        return vbox;
     }
-    return hbox;
+#endif    
+    GtkWidget *lcd_box = xfpm_settings_lcd_brightness(channel,laptop);
+    gtk_box_pack_start(GTK_BOX(vbox),lcd_box,TRUE,TRUE,0);
+    return vbox;
 }
-#endif
 
+
 static GtkWidget *
 xfpm_settings_keys(XfconfChannel *channel,gboolean can_hibernate,
                    gboolean can_suspend,gboolean laptop)
@@ -1033,11 +1074,9 @@
     box = xfpm_settings_keys(channel,can_hibernate,can_suspend,is_laptop);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL); 
     
-    /// Dpms settings
-#ifdef HAVE_DPMS 
+    /// Dpms settings && LCD brightness settings
     box = xfpm_settings_dpms(channel,is_laptop,dpms_capable);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
-#endif 
     
     return Dialog;
 }




More information about the Goodies-commits mailing list