Description: Add support for brightness_in_hardware GConf option which is useful for laptops with hardware controls for LCD brightness Author: Darwin Bautista Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/527157 --- a/applets/brightness/gpm-common.h +++ b/applets/brightness/gpm-common.h @@ -70,6 +70,7 @@ #define GPM_CONF_BACKLIGHT_IDLE_DIM_TIME GPM_CONF_DIR "/backlight/idle_dim_time" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_AC GPM_CONF_DIR "/backlight/brightness_ac" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT GPM_CONF_DIR "/backlight/brightness_dim_battery" +#define GPM_CONF_BACKLIGHT_BRIGHTNESS_IN_HW GPM_CONF_DIR "/backlight/brightness_in_hardware" /* buttons */ #define GPM_CONF_BUTTON_LID_AC GPM_CONF_DIR "/buttons/lid_ac" --- a/applets/inhibit/gpm-common.h +++ b/applets/inhibit/gpm-common.h @@ -70,6 +70,7 @@ #define GPM_CONF_BACKLIGHT_IDLE_DIM_TIME GPM_CONF_DIR "/backlight/idle_dim_time" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_AC GPM_CONF_DIR "/backlight/brightness_ac" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT GPM_CONF_DIR "/backlight/brightness_dim_battery" +#define GPM_CONF_BACKLIGHT_BRIGHTNESS_IN_HW GPM_CONF_DIR "/backlight/brightness_in_hardware" /* buttons */ #define GPM_CONF_BUTTON_LID_AC GPM_CONF_DIR "/buttons/lid_ac" --- a/data/gnome-power-manager.schemas.in +++ b/data/gnome-power-manager.schemas.in @@ -185,6 +185,17 @@ + /schemas/apps/gnome-power-manager/backlight/brightness_in_hardware + /apps/gnome-power-manager/backlight/brightness_in_hardware + bool + true + + LCD brightness controlled in hardware + If LCD brightness is controlled in hardware, e.g. via laptop Fn keys. + + + + /schemas/apps/gnome-power-manager/buttons/suspend /apps/gnome-power-manager/buttons/suspend string --- a/src/gpm-common.h +++ b/src/gpm-common.h @@ -65,6 +65,7 @@ #define GPM_CONF_BACKLIGHT_IDLE_DIM_TIME GPM_CONF_DIR "/backlight/idle_dim_time" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_AC GPM_CONF_DIR "/backlight/brightness_ac" #define GPM_CONF_BACKLIGHT_BRIGHTNESS_DIM_BATT GPM_CONF_DIR "/backlight/brightness_dim_battery" +#define GPM_CONF_BACKLIGHT_BRIGHTNESS_IN_HW GPM_CONF_DIR "/backlight/brightness_in_hardware" /* buttons */ #define GPM_CONF_BUTTON_LID_AC GPM_CONF_DIR "/buttons/lid_ac" --- a/src/gpm-brightness.c +++ b/src/gpm-brightness.c @@ -35,6 +35,8 @@ #include #endif /* HAVE_UNISTD_H */ +#include + #include "gpm-brightness.h" #ifdef HAVE_HAL #include "gpm-brightness-hal.h" @@ -56,6 +58,7 @@ gboolean has_changed_events; gboolean cache_trusted; guint cache_percentage; + GConfClient *conf; #ifdef HAVE_HAL GpmBrightnessHal *hal; #endif @@ -234,11 +237,19 @@ gboolean gpm_brightness_up (GpmBrightness *brightness, gboolean *hw_changed) { - gboolean ret = FALSE; - gboolean hw_changed_local = FALSE; + gboolean ret = TRUE; + gboolean hw_changed_local = TRUE; + gboolean brightness_in_hw; g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE); + /* brightness controlled in hardware? */ + brightness_in_hw = gconf_client_get_bool (brightness->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_IN_HW, NULL); + if (brightness_in_hw) { + egg_warning ("brightness_in_hardware is TRUE, no action"); + goto out; + } + if (brightness->priv->use_xrandr) { ret = gpm_brightness_xrandr_up (brightness->priv->xrandr, &hw_changed_local); if (ret) @@ -278,11 +289,19 @@ gboolean gpm_brightness_down (GpmBrightness *brightness, gboolean *hw_changed) { - gboolean ret = FALSE; - gboolean hw_changed_local = FALSE; + gboolean ret = TRUE; + gboolean hw_changed_local = TRUE; + gboolean brightness_in_hw; g_return_val_if_fail (GPM_IS_BRIGHTNESS (brightness), FALSE); + /* brightness controlled in hardware? */ + brightness_in_hw = gconf_client_get_bool (brightness->priv->conf, GPM_CONF_BACKLIGHT_BRIGHTNESS_IN_HW, NULL); + if (brightness_in_hw) { + egg_warning ("brightness_in_hardware is TRUE, no action"); + goto out; + } + if (brightness->priv->use_xrandr) { ret = gpm_brightness_xrandr_down (brightness->priv->xrandr, &hw_changed_local); if (ret) @@ -335,6 +354,7 @@ g_return_if_fail (object != NULL); g_return_if_fail (GPM_IS_BRIGHTNESS (object)); brightness = GPM_BRIGHTNESS (object); + g_object_unref (brightness->priv->conf); #ifdef HAVE_HAL g_object_unref (brightness->priv->hal); #endif @@ -430,6 +450,7 @@ brightness->priv->cache_trusted = FALSE; brightness->priv->has_changed_events = FALSE; brightness->priv->cache_percentage = 0; + brightness->priv->conf = gconf_client_get_default (); brightness->priv->xrandr = gpm_brightness_xrandr_new (); if (gpm_brightness_xrandr_has_hw (brightness->priv->xrandr)) {