diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gpm-backlight.c | 65 | ||||
| -rw-r--r-- | src/gpm-common.h | 1 | ||||
| -rw-r--r-- | src/gpm-kbd-backlight.c | 25 |
3 files changed, 62 insertions, 29 deletions
diff --git a/src/gpm-backlight.c b/src/gpm-backlight.c index c4e95ab..6f4ea7c 100644 --- a/src/gpm-backlight.c +++ b/src/gpm-backlight.c @@ -405,6 +405,52 @@ gpm_backlight_client_changed_cb (UpClient *client, GParamSpec *pspec, GpmBacklig } /** + * gpm_backlight_save_settings: + * @backlight: This class instance + * @percentage: Current brightess in percent + **/ +static void +gpm_backlight_save_settings (GpmBacklight *backlight, guint percentage) +{ + gint battery_reduce; + gfloat brightness_ac; + gboolean on_battery; + + backlight->priv->master_percentage = percentage; + g_object_get (backlight->priv->client, "on-battery", &on_battery, NULL); + if (on_battery) { + /* If using battery, saving settings needs a bit of trickery. + * IMHO this shows that using two factors for setting + * brightness level is a crooked idea to begin with, but + * this is still less random than only saving changes when + * running on AC. + */ + brightness_ac = g_settings_get_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC); + if (brightness_ac) { + battery_reduce = 100 - (gint) (percentage * 100.0f / brightness_ac); + } else { + /* Any negative number indicates we surpassed brightness_ac. 0 indicates nothing changed. */ + battery_reduce = - (gint) percentage; + } + if (battery_reduce < 0) { + /* Brightness set higher than brightness_ac - we have to adjust that value. */ + g_settings_set_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC, + percentage * 1.0); + battery_reduce = 0; + g_debug ("saving brightness for ac supply: %u", percentage); + } + g_debug ("saving brightness for battery - master percent: %u; ac supply: %f; dim battery: %u", + percentage, brightness_ac, battery_reduce); + g_settings_set_uint (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_DIM_BATT, (guint) battery_reduce); + } else { + /* if using AC power supply, save the new brightness settings */ + g_debug ("saving brightness for ac supply: %u", percentage); + g_settings_set_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC, + percentage * 1.0); + } +} + +/** * gpm_backlight_button_pressed_cb: * @power: The power class instance * @type: The button type, e.g. "power" @@ -418,7 +464,6 @@ gpm_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmBackli GError *error = NULL; guint percentage; gboolean hw_changed; - gboolean on_battery; g_debug ("Button press event type=%s", type); if (g_strcmp0 (type, GPM_BUTTON_BRIGHT_UP) == 0) { @@ -433,14 +478,7 @@ gpm_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmBackli percentage); gpm_backlight_dialog_show (backlight); /* save the new percentage */ - backlight->priv->master_percentage = percentage; - /* if using AC power supply, save the new brightness settings */ - g_object_get (backlight->priv->client, "on-battery", &on_battery, NULL); - if (!on_battery) { - g_debug ("saving brightness for ac supply: %u", percentage); - g_settings_set_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC, - percentage*1.0); - } + gpm_backlight_save_settings (backlight, percentage); } /* we emit a signal for the brightness applet */ if (ret && hw_changed) { @@ -459,14 +497,7 @@ gpm_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmBackli percentage); gpm_backlight_dialog_show (backlight); /* save the new percentage */ - backlight->priv->master_percentage = percentage; - /* if using AC power supply, save the new brightness settings */ - g_object_get (backlight->priv->client, "on-battery", &on_battery, NULL); - if (!on_battery) { - g_debug ("saving brightness for ac supply: %u", percentage); - g_settings_set_double (backlight->priv->settings, GPM_SETTINGS_BRIGHTNESS_AC, - percentage*1.0); - } + gpm_backlight_save_settings (backlight, percentage); } /* we emit a signal for the brightness applet */ if (ret && hw_changed) { diff --git a/src/gpm-common.h b/src/gpm-common.h index e4a3a2b..f165918 100644 --- a/src/gpm-common.h +++ b/src/gpm-common.h @@ -68,6 +68,7 @@ G_BEGIN_DECLS #define GPM_SETTINGS_BRIGHTNESS_DIM_BATT "brightness-dim-battery" /* keyboard backlight */ +#define GPM_SETTINGS_KBD_BACKLIGHT_ENABLE "kbd-backlight-enable" #define GPM_SETTINGS_KBD_BACKLIGHT_BATT_REDUCE "kbd-backlight-battery-reduce" #define GPM_SETTINGS_KBD_BRIGHTNESS_ON_AC "kbd-brightness-on-ac" #define GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_BATT "kbd-brightness-dim-by-on-battery" diff --git a/src/gpm-kbd-backlight.c b/src/gpm-kbd-backlight.c index 7adf0a8..bb7e9c0 100644 --- a/src/gpm-kbd-backlight.c +++ b/src/gpm-kbd-backlight.c @@ -383,6 +383,11 @@ gpm_kbd_backlight_evaluate_power_source_and_set (GpmKbdBacklight *backlight) guint value; guint dim_by = 0; + if (g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_KBD_BACKLIGHT_ENABLE) == FALSE) { + g_debug ("policy is no dimming"); + return TRUE; + } + if (up_client_get_on_battery (backlight->priv->client) && g_settings_get_boolean (backlight->priv->settings, GPM_SETTINGS_KBD_BACKLIGHT_BATT_REDUCE)) { dim_by = g_settings_get_int (backlight->priv->settings, GPM_SETTINGS_KBD_BRIGHTNESS_DIM_BY_ON_BATT); @@ -440,19 +445,9 @@ gpm_kbd_backlight_button_pressed_cb (GpmButton *button, const gchar *type, GpmKbdBacklight *backlight) { - static guint saved_brightness = ~0u; + static guint saved_brightness; gboolean ret; - if (saved_brightness == ~0u) { - saved_brightness = backlight->priv->brightness_percent; - /* If the initial value is 0, which probably means we saved on_ac=0, we - * try and restore some arbitrary value for the toggle not to seem - * broken */ - if (saved_brightness == 0) { - saved_brightness = 100u; - } - } - if (g_strcmp0 (type, GPM_BUTTON_KBD_BRIGHT_UP) == 0) { ret = gpm_kbd_backlight_brightness_up (backlight); @@ -475,7 +470,13 @@ gpm_kbd_backlight_button_pressed_cb (GpmButton *button, } else if (g_strcmp0 (type, GPM_BUTTON_KBD_BRIGHT_TOGGLE) == 0) { if (backlight->priv->brightness_percent == 0) { - /* backlight is off turn it back on */ + /* backlight is off turn it back on. + * If the initial value is 0, which probably means we saved on_ac=0, we + * try and restore some arbitrary value for the toggle not to seem + * broken. */ + if (saved_brightness == 0) { + saved_brightness = 100u; + } gpm_kbd_backlight_set (backlight, saved_brightness, TRUE); } else { /* backlight is on, turn it off and save current value */ |
