2009/8/17 Peter Hutterer <[email protected]>:
> On Fri, Aug 14, 2009 at 12:07:28PM +0100, Richard Hughes wrote:
>> When we change the DPMS mode, don't play games with the last event
>> time as this breaks applications using IDLETIME to turn the backlight
>> off after a preset time.
>>
>> This patch fixes gnome-power-manager and xfce-power-manager.
>> Previously gnome-power-manager was working around the idletime reset
>> by setting a 1ms second timer and ignoring the first if there was a
>> DPMS action in the last few ms. This was racey as hell, and it's
>> probably best just to fix the X bug once and for all.
>>
>> The comment for TimeSinceLastInputEvent even says "Function used for
>> screensaver purposes by the os module. Returns the time in
>> milliseconds since there last was any input." so it's clearly for use
>> for screensavers and power managers rather than "what's the last time
>> of any action in the server".
>>
>> Patch attached. Please review.
>
> Tested, seems to work fine.
> Pushed as c1d901d723c3bee523736eacc15b44a7dff484fe, thanks for the patch!
> (btw. next time please send patches to [email protected])

Will do, thanks. With the patch the explicit lastDeviceEventTime does
not happen (good), although dixSaveScreens still resets this on DPMS
change (not good). You can still see this if you using
http://people.freedesktop.org/~hughsient/temp/idlecounter-demo.c and
then do:

sleep 10 && xset dpms force off && sleep 1 && xset dpms force on

You'll see that the DPMS setting off /still/ resets the idletime.

The attached patch removes the reset of lastDeviceEventTime when we do
dixSaveScreens to turn on the screensaver, when the screen is turned
off. I can now remove all the bodges working around X bugs with the
previous and this patch added to Fedora 11.

Please review,

Richard.
From 9c5fcee00d247c5bcf8a9af3a2e332ea4416f7e8 Mon Sep 17 00:00:00 2001
From: Richard Hughes <[email protected]>
Date: Mon, 17 Aug 2009 09:15:32 +0100
Subject: [PATCH 2/2] Do not reset lastDeviceEventTime when we do dixSaveScreens

When we turn off DPMS with DPMSModeOff and do dixSaveScreens, don't reset the
event time else session clients using IDLETIME will be reset.
---
 dix/window.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/dix/window.c b/dix/window.c
index 32e26d9..1a645f6 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3128,8 +3128,6 @@ dixSaveScreens(ClientPtr client, int on, int mode)
 
     if (on == SCREEN_SAVER_FORCER)
     {
-	UpdateCurrentTimeIf();
-	lastDeviceEventTime = currentTime;
 	if (mode == ScreenSaverReset)
 	    what = SCREEN_SAVER_OFF;
 	else
-- 
1.6.2.5

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to