summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-10-15 11:23:19 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2013-10-15 11:31:29 +0100
commit41b6b792d8e9c84c0a71a4bd7600e1c42e86b5bd (patch)
tree21bc00a6733b54d92100fad5f7ddbe7ac9a45d13
parent0345cbec97d2848fe5e41043d8ddf4cf5e888c72 (diff)
sna: Preserve the user backlight value for get_property calls
When querying the current backlight value, be sure not to overwrite the last user set value by the call to RRChangeOutputProperty. RRChangeOutputProperty calls into set_backlight_property, tricking us into believing that the user has set a new backlight value. The result is that we end up believing that the user chooses a 0 backlight if she should happen to query the property whilst the output is disabled. Reported-by: reztho@archlinux.us Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70406 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna_display.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index ad5b5cd3..31d1ceb6 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2455,18 +2455,28 @@ sna_output_get_property(xf86OutputPtr output, Atom property)
int err;
if (property == backlight_atom || property == backlight_deprecated_atom) {
+ int old_backlight;
INT32 val;
- if (! sna_output->backlight_iface)
+ if (!sna_output->backlight_iface)
return FALSE;
val = sna_output_backlight_get(output);
if (val < 0)
return FALSE;
+ /* Preserve our value of the current user backlight level so that we
+ * avoid mixing in automatic resetting of the backlight across DPMS
+ * events. The property query should ideally always be idempotent.
+ */
+ old_backlight = sna_output->backlight_active_level;
+
err = RRChangeOutputProperty(output->randr_output, property,
XA_INTEGER, 32, PropModeReplace, 1, &val,
FALSE, TRUE);
+
+ sna_output->backlight_active_level = old_backlight;
+
if (err != 0) {
xf86DrvMsg(output->scrn->scrnIndex, X_ERROR,
"RRChangeOutputProperty error, %d\n", err);