[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