forked from pool/xorg-x11-server
- Added xorg-xserver-e89edec497ba.patch to fix incompatible pointer type error with GCC 14. If the request is OK, please forward it to Factory soon too so that we can switch the default compiler. Thanks! OBS-URL: https://build.opensuse.org/request/show/1189636 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=891
59 lines
2.2 KiB
Diff
59 lines
2.2 KiB
Diff
Index: xorg-server-1.12.1/Xext/sync.c
|
|
===================================================================
|
|
--- xorg-server-1.12.1.orig/Xext/sync.c
|
|
+++ xorg-server-1.12.1/Xext/sync.c
|
|
@@ -2615,9 +2615,43 @@ static XSyncValue *pIdleTimeValueGreater
|
|
static void
|
|
IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return)
|
|
{
|
|
- CARD32 idle = GetTimeInMillis() - lastDeviceEventTime.milliseconds;
|
|
+ static CARD32 previousLastDeviceEventTimeMilliseconds = 0;
|
|
+ CARD32 now = GetTimeInMillis();
|
|
+ CARD32 idle = now - lastDeviceEventTime.milliseconds;
|
|
+ CARD32 previousIdle = now - previousLastDeviceEventTimeMilliseconds;
|
|
+ SyncCounter *pIdleTimeCounter = (SyncCounter*)pCounter;
|
|
|
|
XSyncIntsToValue(pValue_return, idle, 0);
|
|
+ if (pCounter == NULL)
|
|
+ {
|
|
+ return;
|
|
+ }
|
|
+ if (previousLastDeviceEventTimeMilliseconds == 0)
|
|
+ {
|
|
+ /* initialize static var when this function is invoked the first time. */
|
|
+ previousLastDeviceEventTimeMilliseconds = lastDeviceEventTime.milliseconds;
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (previousLastDeviceEventTimeMilliseconds == lastDeviceEventTime.milliseconds)
|
|
+ {
|
|
+ /* no new user event, no need to change idle counter. */
|
|
+ return;
|
|
+ }
|
|
+ previousLastDeviceEventTimeMilliseconds = lastDeviceEventTime.milliseconds;
|
|
+
|
|
+ /*
|
|
+ * Some user event occured; now update idle counter with previous
|
|
+ * event time, so idle counter has the most up-to-date value with
|
|
+ * respect to previous user event (we need old and new counter
|
|
+ * value to compute if a transition occured). Recompute bracket
|
|
+ * values if this is system counter.
|
|
+ */
|
|
+
|
|
+ XSyncIntsToValue (&pIdleTimeCounter->value, previousIdle, 0);
|
|
+ if (IsSystemCounter(pIdleTimeCounter)) {
|
|
+ SyncComputeBracketValues(pIdleTimeCounter);
|
|
+ }
|
|
}
|
|
|
|
static void
|
|
@@ -2700,7 +2734,7 @@ IdleTimeWakeupHandler(pointer env, int r
|
|
if (!pIdleTimeValueLess && !pIdleTimeValueGreater)
|
|
return;
|
|
|
|
- IdleTimeQueryValue(NULL, &idle);
|
|
+ IdleTimeQueryValue(IdleTimeCounter, &idle);
|
|
|
|
if ((pIdleTimeValueGreater &&
|
|
XSyncValueGreaterOrEqual(idle, *pIdleTimeValueGreater)) ||
|