Re: [gpm] Changing Backlight



On Wed, 2008-04-09 at 14:42 +0100, Richard Hughes wrote:
> On Fri, 2008-03-14 at 20:51 -0700, Ted Gould wrote:
> > Update with this change.
> 
> I've now got a laptop that has backlight brightness support... So i'll
> be looking at these patches this afternoon.

Here is an update of the patch.  It was needlessly using the AC GConf
key which caused problems for some people who had previous values.  It
also had a cut-and-paste error where it was using on_ac for idle
evaluation.

		--Ted

diff -ur gnome-power-manager-2.22.1/src/gpm-backlight.c gnome-power-manager-ted/src/gpm-backlight.c
--- gnome-power-manager-2.22.1/src/gpm-backlight.c	2008-03-10 14:49:46.000000000 -0700
+++ gnome-power-manager-ted/src/gpm-backlight.c	2008-04-09 11:42:38.000000000 -0700
@@ -81,6 +81,8 @@
 	GTimer			*idle_timer;
 	gfloat			 ambient_sensor_value;
 	guint			 idle_dim_timeout;
+	gboolean		 old_system_is_idle;
+	gboolean		 old_on_ac;
 };
 
 enum {
@@ -315,9 +317,8 @@
 		return FALSE;
 	}
 
-	/* just set the AC brightness for now, don't try to be clever */
-	gpm_conf_set_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, brightness);
-#if 0
+	/* gpm_conf_set_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, brightness); */
+#if 1
 	gboolean ret;
 	/* sets the current policy brightness */
 	ret = gpm_brightness_lcd_set_std (backlight->priv->brightness, brightness);
@@ -357,6 +358,7 @@
 	gboolean enable_action;
 	gboolean battery_reduce;
 	guint value;
+	guint value_ac;
 	guint old_value;
 
 	if (backlight->priv->can_dim == FALSE) {
@@ -370,24 +372,46 @@
 		return FALSE;
 	}
 
-	/* get the 'main' brightness */
-	gpm_conf_get_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, &value);
+	/* get the current brightness */
+	gpm_brightness_lcd_get (backlight->priv->brightness, &value);
 	brightness = value / 100.0f;
-	gpm_debug ("1. main brightness %f", brightness);
+	gpm_debug ("1. currently set brightness %f", brightness);
 
 	/* get AC status */
 	on_ac = gpm_ac_adapter_is_present (backlight->priv->ac_adapter);
 
 	/* reduce if on battery power if we should */
 	gpm_conf_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_BATTERY_REDUCE, &battery_reduce);
-	if (on_ac == FALSE && battery_reduce == TRUE) {
+	if (battery_reduce == TRUE && on_ac != backlight->priv->old_on_ac) {
 		gpm_conf_get_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_BATT, &value);
-		scale = (100 - value) / 100.0f;
-		brightness *= scale;
-	} else {
-		scale = 1.0f;
+
+		value = 100 - value;
+		scale = value / 100.0f;
+
+		if (scale > 0.0f && scale < 1.0f) {
+			if (!on_ac) {
+				scale = -scale;
+			}
+		} else {
+			scale = 0.0f;
+		}
+
+		/* Never let going on battery turn off the display */
+		if (brightness + scale < 0.0f) {
+			scale = 0.0f - brightness;
+			if (scale > 0.0f) {
+				scale = 0.0f;
+			}
+		}
+		/* Never go over 100% -- it goes to 11! */
+		if (brightness + scale > 1.0f) {
+			scale = 1.0f - brightness;
+		}
+
+		brightness += scale;
 	}
-	gpm_debug ("2. battery scale %f, brightness %f", scale, brightness);
+	backlight->priv->old_on_ac = on_ac;
+	gpm_debug ("2. battery change by %f, brightness %f", scale, brightness);
 
 	/* reduce if system is momentarily idle */
 	if (on_ac == TRUE) {
@@ -395,14 +419,36 @@
 	} else {
 		gpm_conf_get_bool (backlight->priv->conf, GPM_CONF_BACKLIGHT_IDLE_DIM_BATT, &enable_action);
 	}
-	if (enable_action == TRUE && backlight->priv->system_is_idle == TRUE) {
+	if (enable_action == TRUE && backlight->priv->system_is_idle != backlight->priv->old_system_is_idle) {
 		gpm_conf_get_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_IDLE_BRIGHTNESS, &value);
+
+		value = 100 - value;
 		scale = value / 100.0f;
-		brightness *= scale;
-	} else {
-		scale = 1.0f;
+
+		if (scale > 0.0f && scale < 1.0f) {
+			if (!backlight->priv->system_is_idle) {
+				scale = -scale;
+			}
+		} else {
+			scale = 0.0f;
+		}
+
+		/* Never let idle turn off the display */
+		if (brightness + scale < 0.0f) {
+			scale = 0.0f - brightness;
+			if (scale > 0.0f) {
+				scale = 0.0f;
+			}
+		}
+		/* Never go over 100% -- it goes to 11! */
+		if (brightness + scale > 1.0f) {
+			scale = 1.0f - brightness;
+		}
+
+		brightness += scale;
 	}
-	gpm_debug ("3. idle scale %f, brightness %f", scale, brightness);
+	backlight->priv->old_system_is_idle = backlight->priv->system_is_idle;
+	gpm_debug ("3. idle change by %f, brightness %f", scale, brightness);
 
 	/* reduce if ambient is low */
 	gpm_conf_get_bool (backlight->priv->conf, GPM_CONF_AMBIENT_ENABLE, &enable_action);
@@ -872,9 +918,11 @@
 	backlight->priv->ac_adapter = gpm_ac_adapter_new ();
 	g_signal_connect (backlight->priv->ac_adapter, "ac-adapter-changed",
 			  G_CALLBACK (ac_adapter_changed_cb), backlight);
+	backlight->priv->old_on_ac = gpm_ac_adapter_is_present (backlight->priv->ac_adapter);
 
 	/* assumption */
 	backlight->priv->system_is_idle = FALSE;
+	backlight->priv->old_system_is_idle = FALSE;
 	gpm_conf_get_uint (backlight->priv->conf,
 			   GPM_CONF_BACKLIGHT_IDLE_DIM_TIME,
 			   &backlight->priv->idle_dim_timeout);
diff -ur gnome-power-manager-2.22.1/src/gpm-prefs-core.c gnome-power-manager-ted/src/gpm-prefs-core.c
--- gnome-power-manager-2.22.1/src/gpm-prefs-core.c	2008-03-26 01:54:53.000000000 -0700
+++ gnome-power-manager-ted/src/gpm-prefs-core.c	2008-04-09 09:48:21.000000000 -0700
@@ -954,9 +954,9 @@
 		widget = glade_xml_get_widget (prefs->priv->glade_xml, "hbox_ac_cpu");
 		gtk_widget_hide_all (widget);
 	}
-	if (prefs->priv->has_lcd == FALSE) {
 		widget = glade_xml_get_widget (prefs->priv->glade_xml, "hbox_ac_brightness");
 		gtk_widget_hide_all (widget);
+	if (prefs->priv->has_lcd == FALSE) {
 		widget = glade_xml_get_widget (prefs->priv->glade_xml, "checkbutton_ac_display_dim");
 		gtk_widget_hide_all (widget);
 	}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]