gnome-power-manager r2768 - in trunk: . src



Author: rhughes
Date: Wed Apr  9 23:22:22 2008
New Revision: 2768
URL: http://svn.gnome.org/viewvc/gnome-power-manager?rev=2768&view=rev

Log:
2008-04-09  Richard Hughes  <richard hughsie com>

* src/gpm-backlight.c: (gpm_backlight_get_brightness),
(gpm_backlight_set_brightness),
(gpm_backlight_brightness_evaluate_and_set), (conf_key_changed_cb),
(gpm_backlight_button_pressed_cb), (idle_changed_cb),
(gpm_backlight_init):
* src/gpm-brightness.c: (gpm_brightness_set), (gpm_brightness_get),
(gpm_brightness_up), (gpm_brightness_down):
Make the backlight do what the user expects rather than what the policy says.
This should fix the bug where auto-dimming returns the level to the policy value
rather than the value the user just set using the brightness applet or brightness keys.


Modified:
   trunk/ChangeLog
   trunk/src/gpm-backlight.c
   trunk/src/gpm-brightness.c

Modified: trunk/src/gpm-backlight.c
==============================================================================
--- trunk/src/gpm-backlight.c	(original)
+++ trunk/src/gpm-backlight.c	Wed Apr  9 23:22:22 2008
@@ -81,6 +81,7 @@
 	GTimer			*idle_timer;
 	gfloat			 ambient_sensor_value;
 	guint			 idle_dim_timeout;
+	guint			 master_percentage;
 };
 
 enum {
@@ -266,9 +267,7 @@
  * gpm_backlight_get_brightness:
  **/
 gboolean
-gpm_backlight_get_brightness (GpmBacklight *backlight,
-			      guint	   *brightness,
-			      GError	  **error)
+gpm_backlight_get_brightness (GpmBacklight *backlight, guint *brightness, GError **error)
 {
 	guint level;
 	gboolean ret;
@@ -300,10 +299,10 @@
  * gpm_backlight_set_brightness:
  **/
 gboolean
-gpm_backlight_set_brightness (GpmBacklight *backlight,
-			      guint	    brightness,
-			      GError	   **error)
+gpm_backlight_set_brightness (GpmBacklight *backlight, guint brightness, GError **error)
 {
+	gboolean ret;
+
 	g_return_val_if_fail (backlight != NULL, FALSE);
 	g_return_val_if_fail (GPM_IS_BACKLIGHT (backlight), FALSE);
 
@@ -316,9 +315,8 @@
 	}
 
 	/* 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
-	gboolean ret;
+	backlight->priv->master_percentage = brightness;
+
 	/* sets the current policy brightness */
 	ret = gpm_brightness_set (backlight->priv->brightness, brightness);
 	if (ret == FALSE) {
@@ -326,9 +324,7 @@
 				      GPM_BACKLIGHT_ERROR_GENERAL,
 				      "Cannot set policy brightness");
 	}
-#endif
-
-	return TRUE;
+	return ret;
 }
 
 /**
@@ -370,9 +366,8 @@
 		return FALSE;
 	}
 
-	/* get the 'main' brightness */
-	gpm_conf_get_uint (backlight->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC, &value);
-	brightness = value / 100.0f;
+	/* get the last set brightness */
+	brightness = backlight->priv->master_percentage / 100.0f;
 	gpm_debug ("1. main brightness %f", brightness);
 
 	/* get AC status */
@@ -436,6 +431,7 @@
 
 	/* only show dialog if interactive */
 	if (interactive == TRUE) {
+		gpm_warning ("moo %f", brightness);
 		gpm_feedback_display_value (backlight->priv->feedback, (float) brightness);
 	}
 
@@ -453,17 +449,18 @@
  * We might have to do things when the gconf keys change; do them here.
  **/
 static void
-conf_key_changed_cb (GpmConf      *conf,
-		     const gchar  *key,
-		     GpmBacklight *backlight)
+conf_key_changed_cb (GpmConf *conf, const gchar *key, GpmBacklight *backlight)
 {
 	gboolean on_ac;
 	on_ac = gpm_ac_adapter_is_present (backlight->priv->ac_adapter);
 
-	if (strcmp (key, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC) == 0) {
+	if (on_ac && strcmp (key, GPM_CONF_BACKLIGHT_BRIGHTNESS_AC) == 0) {
+		gpm_conf_get_uint (backlight->priv->conf,
+				   GPM_CONF_BACKLIGHT_BRIGHTNESS_AC,
+				   &backlight->priv->master_percentage);
 		gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
 
-	} else if (strcmp (key, GPM_CONF_BACKLIGHT_BRIGHTNESS_BATT) == 0) {
+	} else if (!on_ac && strcmp (key, GPM_CONF_BACKLIGHT_BRIGHTNESS_BATT) == 0) {
 		gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
 	}
 
@@ -501,23 +498,37 @@
 }
 
 /**
- * button_pressed_cb:
+ * gpm_backlight_button_pressed_cb:
  * @power: The power class instance
  * @type: The button type, e.g. "power"
  * @state: The state, where TRUE is depressed or closed
  * @brightness: This class instance
  **/
 static void
-button_pressed_cb (GpmButton    *button,
-		   const gchar  *type,
-		   GpmBacklight *backlight)
+gpm_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmBacklight *backlight)
 {
+	guint percentage;
 	gpm_debug ("Button press event type=%s", type);
 
 	if (strcmp (type, GPM_BUTTON_BRIGHT_UP) == 0) {
+		/* go up one step */
 		gpm_brightness_up (backlight->priv->brightness);
+
+		/* get the new value */
+		gpm_brightness_get (backlight->priv->brightness, &percentage);
+		gpm_feedback_display_value (backlight->priv->feedback, (float) percentage/100.0f);
+		/* save the new percentage */
+		backlight->priv->master_percentage = percentage;
 	} else if (strcmp (type, GPM_BUTTON_BRIGHT_DOWN) == 0) {
+		/* go up down step */
 		gpm_brightness_down (backlight->priv->brightness);
+
+		/* get the new value */
+		gpm_brightness_get (backlight->priv->brightness, &percentage);
+		gpm_feedback_display_value (backlight->priv->feedback, (float) percentage/100.0f);
+
+		/* save the new percentage */
+		backlight->priv->master_percentage = percentage;
 	} else if (strcmp (type, GPM_BUTTON_LID_OPEN) == 0) {
 		/* make sure we undim when we lift the lid */
 		gpm_backlight_brightness_evaluate_and_set (backlight, FALSE);
@@ -604,7 +615,6 @@
 	}
 
 	if (mode == GPM_IDLE_MODE_NORMAL) {
-
 		/* deactivate display power management */
 		if (backlight->priv->can_dpms == TRUE) {
 			error = NULL;
@@ -623,7 +633,6 @@
 		gpm_backlight_sync_policy (backlight);
 
 	} else if (mode == GPM_IDLE_MODE_SESSION) {
-
 		/* activate display power management */
 		if (backlight->priv->can_dpms == TRUE) {
 			error = NULL;
@@ -859,10 +868,16 @@
 			   GPM_CONF_GNOME_SS_PM_DELAY,
 			   backlight->priv->idle_dim_timeout);
 
+	/* set the main brightness, this is designed to be updated if the user changes the
+	 * brightness so we can undim to the 'correct' value */
+	gpm_conf_get_uint (backlight->priv->conf,
+			   GPM_CONF_BACKLIGHT_BRIGHTNESS_AC,
+			   &backlight->priv->master_percentage);
+
 	/* watch for brightness up and down buttons and also check lid state */
 	backlight->priv->button = gpm_button_new ();
 	g_signal_connect (backlight->priv->button, "button-pressed",
-			  G_CALLBACK (button_pressed_cb), backlight);
+			  G_CALLBACK (gpm_backlight_button_pressed_cb), backlight);
 
 	/* we use ac_adapter for the ac-adapter-changed signal */
 	backlight->priv->ac_adapter = gpm_ac_adapter_new ();

Modified: trunk/src/gpm-brightness.c
==============================================================================
--- trunk/src/gpm-brightness.c	(original)
+++ trunk/src/gpm-brightness.c	Wed Apr  9 23:22:22 2008
@@ -73,6 +73,7 @@
 	g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE);
 	if (brightness->priv->use_xrandr) {
 		ret = gpm_brightness_xrandr_set (brightness->priv->xrandr, percentage);
+		return ret;
 	}
 	if (brightness->priv->use_hal) {
 		ret = gpm_brightness_hal_set (brightness->priv->hal, percentage);
@@ -95,6 +96,7 @@
 	g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE);
 	if (brightness->priv->use_xrandr) {
 		ret = gpm_brightness_xrandr_get (brightness->priv->xrandr, percentage);
+		return ret;
 	}
 	if (brightness->priv->use_hal) {
 		ret = gpm_brightness_hal_get (brightness->priv->hal, percentage);
@@ -115,6 +117,7 @@
 	g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE);
 	if (brightness->priv->use_xrandr) {
 		ret = gpm_brightness_xrandr_up (brightness->priv->xrandr);
+		return ret;
 	}
 	if (brightness->priv->use_hal) {
 		ret = gpm_brightness_hal_up (brightness->priv->hal);
@@ -135,6 +138,7 @@
 	g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE);
 	if (brightness->priv->use_xrandr) {
 		ret = gpm_brightness_xrandr_down (brightness->priv->xrandr);
+		return ret;
 	}
 	if (brightness->priv->use_hal) {
 		ret = gpm_brightness_hal_down (brightness->priv->hal);



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