Update to xserver 1.14.4
This commit is contained in:
parent
3adb0abb24
commit
511a911dd8
@ -1,3 +1,413 @@
|
||||
commit 4c40d9c4e4e4b39e81097cf6152d9940422fb5ab
|
||||
Author: Matt Dew <marcoz@osource.org>
|
||||
Date: Thu Oct 31 23:09:03 2013 -0600
|
||||
|
||||
bump version from 1.14.3.901, to 1.14.4
|
||||
|
||||
commit ca11bdc890f14fbe2ab4c32fb7a36ae50672b81a
|
||||
Author: Matt Dew <marcoz@osource.org>
|
||||
Date: Sat Oct 26 13:51:05 2013 -0600
|
||||
|
||||
Bump version from 1.14.3 to 1.14.3.901.
|
||||
|
||||
commit 07069f5d71dd0869fe9a6f9ab87c467e7ec75011
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Thu Oct 17 12:02:27 2013 +1000
|
||||
|
||||
sync: split updating and triggering a counter up
|
||||
|
||||
Now that the brackets are always the nearest change points (regardless of
|
||||
transition) we need to update the counters whenever we check for any updates.
|
||||
|
||||
Otherwise we end up with a situation where counter->value is out of date and
|
||||
an alarm doesn't trigger because we're still using the value from last time
|
||||
something actually triggered.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit 2523a445a09a75a8baf642608d099a5e12d5437f)
|
||||
|
||||
commit fa5e4dcfb6236b8be0bf57edd1ff4f59cb2f8f6b
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Oct 16 16:31:15 2013 +1000
|
||||
|
||||
sync: always set the brackets (#59644)
|
||||
|
||||
The current code sets bracket_greater to the first trigger after the current
|
||||
value, and bracket_less to the last trigger before the current value.
|
||||
|
||||
For example, the idle timer with three negative and three positive transitions
|
||||
would set this:
|
||||
|
||||
nt1 nt2 nt3
|
||||
|--------|------|--|------- idle --|---|--|-----> t
|
||||
pt1 pt2 pt3
|
||||
bracket_less == nt2
|
||||
bracket_greater == pt2
|
||||
|
||||
This is an optimization so we can skip code paths in the block/wakeup handlers
|
||||
if the current value doesn't meet any of the trigger requirements. Those
|
||||
handlers largely do a
|
||||
if (bracket_less is less than current value &&
|
||||
bracket_greater is greater than current value)
|
||||
return, nothing to do
|
||||
|
||||
However, unless the bracket values are updated at the correct time, the
|
||||
following may happen:
|
||||
|
||||
nt
|
||||
|--------------|---------- idle ------|--------> t
|
||||
pt
|
||||
|
||||
In this case, neither bracket is set, we're past the pos transition and not
|
||||
yet at the neg transition. idle may now go past nt, but the brackets are not
|
||||
updated. If idle is then reset to 0, no alarm is triggered for nt. Likewise,
|
||||
idle may now go past pt and no alarm is triggered.
|
||||
|
||||
Changing an alarm or triggering an alarm will re-calculate the brackets, so
|
||||
this bug is somewhat random. If any other client triggers an alarm when the
|
||||
brackets are wrongly NULL, the recalculation will set them this bug may not
|
||||
appear.
|
||||
|
||||
This patch changes the behavior, so that the brackets are always the nearest
|
||||
positive or negative transitions to the current counter value. In the example
|
||||
above, nt will trigger a wakeup and a re-calculation of the brackets, so that
|
||||
going past it in the negative direction will then cause the proper alarm
|
||||
triggers.
|
||||
|
||||
Or, in Keith's words:
|
||||
|
||||
Timer currently past a positive trigger
|
||||
No bracket values, because no trigger in range
|
||||
|
||||
Timer moves backwards before the positive trigger
|
||||
Brackets not reset, even though there is now a trigger in range
|
||||
|
||||
Timer moves forward past the positive trigger
|
||||
Trigger doesn't fire because brackets not set
|
||||
|
||||
Setting the LT bracket in this case will cause everything to get
|
||||
re-evaluated when the sync value moves backwards before the trigger
|
||||
value.
|
||||
|
||||
X.Org Bug 59644 <http://bugs.freedesktop.org/show_bug.cgi?id=59644>
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit e57ec99b03b2ad840c384a97ab2766ce9da0f5cc)
|
||||
|
||||
commit 7b7753e97f0dfadfdcf28ce18b17a759b57f6be1
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Oct 16 10:08:46 2013 +1000
|
||||
|
||||
sync: if the idle time was reset, force alarms to trigger (#70476)
|
||||
|
||||
The time between the idle reset and the IdleTimeWakeupHandler to be called is
|
||||
indeterminate. Clients with an PositiveTransition or NegativeTransition alarm
|
||||
on a low threshold may miss an alarm.
|
||||
|
||||
Work around this by keeping a reset flag for each device. When the
|
||||
WakeupHandler triggers and the reset flag is set, we force a re-calculation of
|
||||
everything and pretend the current idle time is zero. Immediately after is the
|
||||
next calculation with the real idle time.
|
||||
|
||||
Relatively reproducible test case: Set up a XSyncNegativeTransition alarm for
|
||||
a threshold of 1 ms. May trigger, may not.
|
||||
|
||||
X.Org Bug 70476 <http://bugs.freedesktop.org/show_bug.cgi?id=70476>
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit 06b87aa528d7a739ba20101a1f83b1a428691a01)
|
||||
|
||||
commit 3866624a45074ba37a2e605d00df602c0222cd85
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Oct 16 09:36:01 2013 +1000
|
||||
|
||||
dix: provide accessor methods for the last device event time
|
||||
|
||||
And now that we have the accessors, localize it. No functional changes, just
|
||||
preparing for a future change.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit efc1035ca958f2c9d266338a308518a0834b1773)
|
||||
|
||||
commit 47e30b3649fc15efbc8cf06c604254d84652ede0
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Oct 16 09:21:47 2013 +1000
|
||||
|
||||
sync: supply the counter from IdleTimeBlockHandler
|
||||
|
||||
The main idletime counter has an initialized deviceid, might as well be
|
||||
supplying it properly. Without this, we'd only ever check the XIAllDevices
|
||||
counter, so the wait would never be adjusted for the device-specific triggers.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit b7c9bd9cf276e92a73be57ff2ed32b47a80f13fb)
|
||||
|
||||
commit b47c02f21660bd99a5af5aa374294a22813d6679
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Oct 16 13:01:01 2013 +1000
|
||||
|
||||
sync: always call BracketValues when recalculating upper/lower brackets
|
||||
|
||||
Both ServertimeBracketValues and IdleTimeBracketValues copy the value into
|
||||
there SysCounter privates. Call it for a NULL set as well, so we don't end up
|
||||
with stale pointers and we can remove the block/wakeup handlers.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit 2efe49c1029f959fe80879bcf50df42e8b80451d)
|
||||
|
||||
commit 0033e969f4de84aa08ae321bc268a1461e12824b
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Tue Oct 15 10:11:20 2013 +1000
|
||||
|
||||
sync: compress two if statements
|
||||
|
||||
No functional changes, just merges a > and == condition into a >= condition.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit 5c7cfd4c6978834551848e1be62af240102e39b5)
|
||||
|
||||
commit 0c809f459c9997f743961081bc089fd2999fdcdb
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Sep 4 15:34:29 2013 +1000
|
||||
|
||||
dix: only deliver for the current grab type
|
||||
|
||||
Use the grabtype to determine which type of event to send - all other events
|
||||
are pointless and may result in erroneous events being delivered.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 7cf1b595c8c8f9776a39559d2878cf90af3f2859)
|
||||
|
||||
commit acb447ef69bdfcae4fe7de4eef880c3bae0f7d4c
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Sep 4 15:34:28 2013 +1000
|
||||
|
||||
dix: don't attempt to deliver an event for a different grabtype
|
||||
|
||||
For an active grab, grab->eventMask can be either the core or the XI1 mask.
|
||||
With the overlap of event filters, calling DeliverOneGrabbedEvent(XI1) for a
|
||||
ProximityOut event will trigger if the client has selected for enter events -
|
||||
the filter is the same for both.
|
||||
|
||||
Thus, we end up delivering a proximity event to a client not expecting one.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 78944d62ffc7fec6f75b6f514ab7a139ba9bc77b)
|
||||
|
||||
commit f5b22ee8ba829aa095df3d091ec0a74e0aa42778
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Sep 4 15:34:27 2013 +1000
|
||||
|
||||
include: change grabtypes to start at 1
|
||||
|
||||
Avoid erroneous detection of an unset grabtype as CORE
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 6159811a1aaf848016dbfa7bde68df097027870c)
|
||||
|
||||
commit d409cc884c53e7f66ee9266c85cdb7c100365c8f
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed Sep 4 15:34:26 2013 +1000
|
||||
|
||||
dix: only allow button and key events to freeze a sync'd pointer
|
||||
|
||||
If a client calls XAllowEvents(SyncPointer) it expects events as normal until
|
||||
the next button press or release event - that freezes the device. An e.g.
|
||||
proximity event must thus not freeze the pointer.
|
||||
|
||||
As per the spec, only button and key events may do so, so narrow it to these
|
||||
cases.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit be6ea80b79b3d6eb97106ea142e01acbdf059995)
|
||||
|
||||
commit 551dbf744b38a3da3d39b9154cb30d1197297eb1
|
||||
Author: Egbert Eich <eich@freedesktop.org>
|
||||
Date: Fri Aug 16 19:52:16 2013 +0200
|
||||
|
||||
DIX/Xi: Pass correct client to CheckDeviceGrabAndHintWindow()
|
||||
|
||||
If we have a client which has registered for a DeviceButton grab
|
||||
be sure to pass this to CheckDeviceGrabAndHintWindow(). Since the
|
||||
order of clients is arbitrary there is no guarantee that the last
|
||||
client in the list is the one that belongs to this class.
|
||||
|
||||
Signed-off-by: Egbert Eich <eich@freedesktop.org>
|
||||
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 05ea6307fa4f0bee3d3bf536396059f3906791a0)
|
||||
|
||||
commit cc7084af0d61e88ec0a62e14d6eef10c0b2b8b38
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Mon Aug 26 15:51:46 2013 +1000
|
||||
|
||||
Xi: allow for XIAllowEvent requests larger than XI < 2.2 size (#68554)
|
||||
|
||||
XIAllowEvents changed length in XI 2.2 (for the touchid). A bug in libXi
|
||||
causes libXi to always use the new request length if the server supports
|
||||
2.2, regardless of the client's XIQueryVersion request.
|
||||
|
||||
The server takes the client's XIQueryVersion request into account though,
|
||||
resulting in a BadLength error if a 2.[0,1] client calls XIAllowEvents on a
|
||||
XI 2.2+ server.
|
||||
|
||||
Can't fix this in libXi, so work around this in the server.
|
||||
|
||||
X.Org Bug 68554 <http://bugs.freedesktop.org/show_bug.cgi?id=68554>
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
(cherry picked from commit 94d4e29aedc69431fa9b299ca1b67947173d7a24)
|
||||
|
||||
commit 2ac257d845e7f52975123741292056b3df02f908
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Fri Aug 16 15:30:59 2013 +1000
|
||||
|
||||
dix: check for grab type before checking XI2 mask
|
||||
|
||||
if the grab type isn't XI2, grab->xi2mask is random. That random data may
|
||||
have the enter/leave mask set, leading to events sent to the client that the
|
||||
client can't handler.
|
||||
|
||||
Source of these errors:
|
||||
_xgeWireToEvent: Unknown extension 131, this should never happen.
|
||||
|
||||
Simplest reproducer:
|
||||
Start Xephyr, press button inside window, move out. As the pointer leaves
|
||||
the Xephyr window, the errors appear.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||
(cherry picked from commit 82939e02392cbb880313fe92957091ff89ce2f2b)
|
||||
|
||||
commit 3ac50dca8b4b9b6b3a7e16c5855ca246a70c9232
|
||||
Author: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Fri Aug 23 09:04:01 2013 +1000
|
||||
|
||||
test: fix the gcc diagnostics pragma
|
||||
|
||||
pop without push restores the commandline options. The proper way is to
|
||||
push, then ignore, then pop.
|
||||
|
||||
And while we're at it, change the pop argument to a comment - pop ignores
|
||||
the argument, but be proper about it.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit d803f296c616ccf55711cf0af9e7d3eae2edda16)
|
||||
|
||||
commit ec6de521161d5c45885c8751c250d3fabcbc2194
|
||||
Merge: 1427621 a1985e8
|
||||
Author: Matt Dew <marcoz@osource.org>
|
||||
Date: Mon Oct 21 21:03:29 2013 -0600
|
||||
|
||||
Merge commit 'a1985e892f5b5f0959235a631d8bcf676b78bfbc' into server-1.14-branch
|
||||
|
||||
commit 14276213ac4d59316d5745ccb9a2fb23eb10cf99
|
||||
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Date: Mon Aug 5 20:46:45 2013 -0700
|
||||
|
||||
Allow disabling XFree86-DGA, DRI, VidModeExtension extensions
|
||||
|
||||
Code to recognize these in extension enable/disable options was wrapped
|
||||
in #ifdef XorgLoader, but that's not defined when building miinitext.c
|
||||
since the great module merge of 1.13. Change to an #ifdef that is defined.
|
||||
|
||||
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Reviewed-by: Robert Hooker <robert.hooker@canonical.com>
|
||||
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
|
||||
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||
|
||||
commit 296057914570bd319bce9b718e6b90f46e6cc661
|
||||
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Date: Mon Sep 16 21:47:16 2013 -0700
|
||||
|
||||
Avoid use-after-free in dix/dixfonts.c: doImageText() [CVE-2013-4396]
|
||||
|
||||
Save a pointer to the passed in closure structure before copying it
|
||||
and overwriting the *c pointer to point to our copy instead of the
|
||||
original. If we hit an error, once we free(c), reset c to point to
|
||||
the original structure before jumping to the cleanup code that
|
||||
references *c.
|
||||
|
||||
Since one of the errors being checked for is whether the server was
|
||||
able to malloc(c->nChars * itemSize), the client can potentially pass
|
||||
a number of characters chosen to cause the malloc to fail and the
|
||||
error path to be taken, resulting in the read from freed memory.
|
||||
|
||||
Since the memory is accessed almost immediately afterwards, and the
|
||||
X server is mostly single threaded, the odds of the free memory having
|
||||
invalid contents are low with most malloc implementations when not using
|
||||
memory debugging features, but some allocators will definitely overwrite
|
||||
the memory there, leading to a likely crash.
|
||||
|
||||
Reported-by: Pedro Ribeiro <pedrib@gmail.com>
|
||||
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Reviewed-by: Julien Cristau <jcristau@debian.org>
|
||||
|
||||
commit a1985e892f5b5f0959235a631d8bcf676b78bfbc
|
||||
Author: Julien Cristau <jcristau@debian.org>
|
||||
Date: Sat Jul 27 12:09:07 2013 +0200
|
||||
|
||||
dix: add missing include for DeleteWindowFromAnySelections
|
||||
|
||||
Fixes build error with XACE disabled:
|
||||
window.c:886:5: error: implicit declaration of function 'DeleteWindowFromAnySelections' [-Werror=implicit-function-declaration]
|
||||
DeleteWindowFromAnySelections(pWin);
|
||||
^
|
||||
|
||||
Debian bug#701372
|
||||
|
||||
Reported-by: Matthias Klose <doko@debian.org>
|
||||
Signed-off-by: Julien Cristau <jcristau@debian.org>
|
||||
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||
(cherry picked from commit fe7463b8ce0de301c2f82b108c93963424f77219)
|
||||
|
||||
commit 19c2d516c2b5182e8b45649485aa3123b229b66a
|
||||
Author: Julien Cristau <jcristau@debian.org>
|
||||
Date: Fri Aug 2 20:07:36 2013 +0200
|
||||
|
||||
xfree86: improve check for posix saved ids
|
||||
|
||||
Replace hardcoded SVR4 || linux || CSRG_BASED with an autoconf check and
|
||||
the _POSIX_SAVED_IDS macro.
|
||||
|
||||
Suggested-by: Mark Kettenis <mark.kettenis@xs4all.nl>
|
||||
Signed-off-by: Julien Cristau <jcristau@debian.org>
|
||||
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Reviewed-by: Mark Kettenis <kettenis@openbsd.org>.
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit c218ba8423a73a7a643cb17789db8a1dd0901ca6)
|
||||
|
||||
commit b39a6ab645815a6012d9b2feaa049336ea09aa76
|
||||
Author: Julien Cristau <jcristau@debian.org>
|
||||
Date: Fri Aug 2 23:46:00 2013 +0200
|
||||
|
||||
test: include dix-config.h in hashtabletest.c
|
||||
|
||||
Missing _XSERVER64 define caused inconsistent sizeof(XID) between the
|
||||
test and hashtable code, leading to test failures on 64bit big endian
|
||||
archs like s390x or ppc64.
|
||||
|
||||
Signed-off-by: Julien Cristau <jcristau@debian.org>
|
||||
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 930c6ff15d437dfb0f897e8cb4253abba70819cc)
|
||||
|
||||
commit 9acb64f54ee9dd2fe41afda159b919280850ad8e
|
||||
Author: Matt Dew <marcoz@osource.org>
|
||||
Date: Thu Sep 12 21:17:40 2013 -0600
|
||||
|
@ -392,9 +392,7 @@ ScreenSaverFreeSuspend(pointer value, XID id)
|
||||
DeviceIntPtr dev;
|
||||
UpdateCurrentTimeIf();
|
||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||
NoticeTime(dev, currentTime);
|
||||
SetScreenSaverTimer();
|
||||
}
|
||||
}
|
||||
@ -681,7 +679,7 @@ ProcScreenSaverQueryInfo(ClientPtr client)
|
||||
pPriv = GetScreenPrivate(pDraw->pScreen);
|
||||
|
||||
UpdateCurrentTime();
|
||||
lastInput = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds;
|
||||
lastInput = GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds;
|
||||
|
||||
rep = (xScreenSaverQueryInfoReply) {
|
||||
.type = X_Reply,
|
||||
|
@ -699,6 +699,14 @@ SyncAwaitTriggerFired(SyncTrigger * pTrigger)
|
||||
FreeResource(pAwaitUnion->header.delete_id, RT_NONE);
|
||||
}
|
||||
|
||||
static CARD64
|
||||
SyncUpdateCounter(SyncCounter *pCounter, CARD64 newval)
|
||||
{
|
||||
CARD64 oldval = pCounter->value;
|
||||
pCounter->value = newval;
|
||||
return oldval;
|
||||
}
|
||||
|
||||
/* This function should always be used to change a counter's value so that
|
||||
* any triggers depending on the counter will be checked.
|
||||
*/
|
||||
@ -708,8 +716,7 @@ SyncChangeCounter(SyncCounter * pCounter, CARD64 newval)
|
||||
SyncTriggerList *ptl, *pnext;
|
||||
CARD64 oldval;
|
||||
|
||||
oldval = pCounter->value;
|
||||
pCounter->value = newval;
|
||||
oldval = SyncUpdateCounter(pCounter, newval);
|
||||
|
||||
/* run through triggers to see if any become true */
|
||||
for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) {
|
||||
@ -1019,6 +1026,11 @@ SyncComputeBracketValues(SyncCounter * pCounter)
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
}
|
||||
else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
}
|
||||
}
|
||||
else if (pTrigger->test_type == XSyncNegativeComparison &&
|
||||
ct != XSyncCounterNeverDecreases) {
|
||||
@ -1028,52 +1040,53 @@ SyncComputeBracketValues(SyncCounter * pCounter)
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
}
|
||||
else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
}
|
||||
}
|
||||
else if (pTrigger->test_type == XSyncNegativeTransition &&
|
||||
ct != XSyncCounterNeverIncreases) {
|
||||
if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less))
|
||||
{
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
if (XSyncValueGreaterOrEqual(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
|
||||
/*
|
||||
* If the value is exactly equal to our threshold, we want one
|
||||
* more event in the negative direction to ensure we pick up
|
||||
* when the value is less than this threshold.
|
||||
*/
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
}
|
||||
else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueGreaterThan(pTrigger->test_value,
|
||||
psci->bracket_less)) {
|
||||
/*
|
||||
* The value is exactly equal to our threshold. We want one
|
||||
* more event in the negative direction to ensure we pick up
|
||||
* when the value is less than this threshold.
|
||||
*/
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
}
|
||||
}
|
||||
else if (pTrigger->test_type == XSyncPositiveTransition &&
|
||||
ct != XSyncCounterNeverDecreases) {
|
||||
if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater))
|
||||
{
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
if (XSyncValueLessOrEqual(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) {
|
||||
/*
|
||||
* If the value is exactly equal to our threshold, we
|
||||
* want one more event in the positive direction to
|
||||
* ensure we pick up when the value *exceeds* this
|
||||
* threshold.
|
||||
*/
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
}
|
||||
else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueLessThan(pTrigger->test_value,
|
||||
psci->bracket_greater)) {
|
||||
/*
|
||||
* The value is exactly equal to our threshold. We want one
|
||||
* more event in the positive direction to ensure we pick up
|
||||
* when the value *exceeds* this threshold.
|
||||
*/
|
||||
psci->bracket_greater = pTrigger->test_value;
|
||||
pnewgtval = &psci->bracket_greater;
|
||||
else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
|
||||
XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) {
|
||||
psci->bracket_less = pTrigger->test_value;
|
||||
pnewltval = &psci->bracket_less;
|
||||
}
|
||||
}
|
||||
} /* end for each trigger */
|
||||
|
||||
if (pnewgtval || pnewltval) {
|
||||
(*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval);
|
||||
}
|
||||
(*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2619,7 +2632,7 @@ IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return)
|
||||
}
|
||||
else
|
||||
deviceid = XIAllDevices;
|
||||
idle = GetTimeInMillis() - lastDeviceEventTime[deviceid].milliseconds;
|
||||
idle = GetTimeInMillis() - LastEventTime(deviceid).milliseconds;
|
||||
XSyncIntsToValue(pValue_return, idle, 0);
|
||||
}
|
||||
|
||||
@ -2638,7 +2651,7 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
|
||||
return;
|
||||
|
||||
old_idle = counter->value;
|
||||
IdleTimeQueryValue(NULL, &idle);
|
||||
IdleTimeQueryValue(counter, &idle);
|
||||
counter->value = idle; /* push, so CheckTrigger works */
|
||||
|
||||
if (less && XSyncValueLessOrEqual(idle, *less)) {
|
||||
@ -2699,6 +2712,17 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
|
||||
counter->value = old_idle; /* pop */
|
||||
}
|
||||
|
||||
static void
|
||||
IdleTimeCheckBrackets(SyncCounter *counter, XSyncValue idle, XSyncValue *less, XSyncValue *greater)
|
||||
{
|
||||
if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) ||
|
||||
(less && XSyncValueLessOrEqual(idle, *less))) {
|
||||
SyncChangeCounter(counter, idle);
|
||||
}
|
||||
else
|
||||
SyncUpdateCounter(counter, idle);
|
||||
}
|
||||
|
||||
static void
|
||||
IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask)
|
||||
{
|
||||
@ -2713,10 +2737,24 @@ IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask)
|
||||
|
||||
IdleTimeQueryValue(pCounter, &idle);
|
||||
|
||||
if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) ||
|
||||
(less && XSyncValueLessOrEqual(idle, *less))) {
|
||||
SyncChangeCounter(counter, idle);
|
||||
/*
|
||||
There is no guarantee for the WakeupHandler to be called within a specific
|
||||
timeframe. Idletime may go to 0, but by the time we get here, it may be
|
||||
non-zero and alarms for a pos. transition on 0 won't get triggered.
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=70476
|
||||
*/
|
||||
if (LastEventTimeWasReset(priv->deviceid)) {
|
||||
LastEventTimeToggleResetFlag(priv->deviceid, FALSE);
|
||||
if (!XSyncValueIsZero(idle)) {
|
||||
XSyncValue zero;
|
||||
XSyncIntsToValue(&zero, 0, 0);
|
||||
IdleTimeCheckBrackets(counter, zero, less, greater);
|
||||
less = priv->value_less;
|
||||
greater = priv->value_greater;
|
||||
}
|
||||
}
|
||||
|
||||
IdleTimeCheckBrackets(counter, idle, less, greater);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2734,6 +2772,9 @@ IdleTimeBracketValues(pointer pCounter, CARD64 * pbracket_less,
|
||||
IdleTimeWakeupHandler, pCounter);
|
||||
}
|
||||
else if (!registered && (pbracket_less || pbracket_greater)) {
|
||||
/* Reset flag must be zero so we don't force a idle timer reset on
|
||||
the first wakeup */
|
||||
LastEventTimeToggleResetAll(FALSE);
|
||||
RegisterBlockAndWakeupHandlers(IdleTimeBlockHandler,
|
||||
IdleTimeWakeupHandler, pCounter);
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ ProcXIAllowEvents(ClientPtr client)
|
||||
have_xi22 = TRUE;
|
||||
}
|
||||
else {
|
||||
REQUEST_SIZE_MATCH(xXIAllowEventsReq);
|
||||
REQUEST_AT_LEAST_SIZE(xXIAllowEventsReq);
|
||||
}
|
||||
|
||||
ret = dixLookupDevice(&dev, stuff->deviceid, client, DixGetAttrAccess);
|
||||
|
26
xserver/configure
vendored
26
xserver/configure
vendored
@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for xorg-server 1.14.3.
|
||||
# Generated by GNU Autoconf 2.69 for xorg-server 1.14.4.
|
||||
#
|
||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
||||
#
|
||||
@ -651,8 +651,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='xorg-server'
|
||||
PACKAGE_TARNAME='xorg-server'
|
||||
PACKAGE_VERSION='1.14.3'
|
||||
PACKAGE_STRING='xorg-server 1.14.3'
|
||||
PACKAGE_VERSION='1.14.4'
|
||||
PACKAGE_STRING='xorg-server 1.14.4'
|
||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
||||
PACKAGE_URL=''
|
||||
|
||||
@ -1992,7 +1992,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures xorg-server 1.14.3 to adapt to many kinds of systems.
|
||||
\`configure' configures xorg-server 1.14.4 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@ -2062,7 +2062,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of xorg-server 1.14.3:";;
|
||||
short | recursive ) echo "Configuration of xorg-server 1.14.4:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@ -2463,7 +2463,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
xorg-server configure 1.14.3
|
||||
xorg-server configure 1.14.4
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@ -3172,7 +3172,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by xorg-server $as_me 1.14.3, which was
|
||||
It was created by xorg-server $as_me 1.14.4, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@ -3520,8 +3520,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
RELEASE_DATE="2013-09-12"
|
||||
RELEASE_NAME="September Rain"
|
||||
RELEASE_DATE="2013-10-31"
|
||||
RELEASE_NAME="October Flood"
|
||||
|
||||
am__api_version='1.12'
|
||||
|
||||
@ -3999,7 +3999,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='xorg-server'
|
||||
VERSION='1.14.3'
|
||||
VERSION='1.14.4'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@ -21710,7 +21710,7 @@ fi
|
||||
|
||||
for ac_func in backtrace ffs geteuid getuid issetugid getresuid \
|
||||
getdtablesize getifaddrs getpeereid getpeerucred getzoneid \
|
||||
mmap shmctl64 strncasecmp vasprintf vsnprintf walkcontext
|
||||
mmap seteuid shmctl64 strncasecmp vasprintf vsnprintf walkcontext
|
||||
do :
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||
@ -31181,7 +31181,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by xorg-server $as_me 1.14.3, which was
|
||||
This file was extended by xorg-server $as_me 1.14.4, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@ -31247,7 +31247,7 @@ _ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
xorg-server config.status 1.14.3
|
||||
xorg-server config.status 1.14.4
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
@ -26,9 +26,9 @@ dnl
|
||||
dnl Process this file with autoconf to create configure.
|
||||
|
||||
AC_PREREQ(2.60)
|
||||
AC_INIT([xorg-server], 1.14.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
||||
RELEASE_DATE="2013-09-12"
|
||||
RELEASE_NAME="September Rain"
|
||||
AC_INIT([xorg-server], 1.14.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
|
||||
RELEASE_DATE="2013-10-31"
|
||||
RELEASE_NAME="October Flood"
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
AM_INIT_AUTOMAKE([foreign dist-bzip2])
|
||||
|
||||
@ -215,7 +215,7 @@ AC_SUBST(DLOPEN_LIBS)
|
||||
dnl Checks for library functions.
|
||||
AC_CHECK_FUNCS([backtrace ffs geteuid getuid issetugid getresuid \
|
||||
getdtablesize getifaddrs getpeereid getpeerucred getzoneid \
|
||||
mmap shmctl64 strncasecmp vasprintf vsnprintf walkcontext])
|
||||
mmap seteuid shmctl64 strncasecmp vasprintf vsnprintf walkcontext])
|
||||
AC_REPLACE_FUNCS([strcasecmp strcasestr strlcat strlcpy strndup])
|
||||
|
||||
dnl Find the math libary, then check for cbrt function in it.
|
||||
|
@ -262,6 +262,11 @@ InputInfo inputInfo;
|
||||
|
||||
EventSyncInfoRec syncEvents;
|
||||
|
||||
static struct DeviceEventTime {
|
||||
Bool reset;
|
||||
TimeStamp time;
|
||||
} lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
/**
|
||||
* The root window the given device is currently on.
|
||||
*/
|
||||
@ -1043,33 +1048,73 @@ XineramaGetCursorScreen(DeviceIntPtr pDev)
|
||||
#define TIMESLOP (5 * 60 * 1000) /* 5 minutes */
|
||||
|
||||
static void
|
||||
MonthChangedOrBadTime(InternalEvent *ev)
|
||||
MonthChangedOrBadTime(CARD32 *ms)
|
||||
{
|
||||
/* If the ddx/OS is careless about not processing timestamped events from
|
||||
* different sources in sorted order, then it's possible for time to go
|
||||
* backwards when it should not. Here we ensure a decent time.
|
||||
*/
|
||||
if ((currentTime.milliseconds - ev->any.time) > TIMESLOP)
|
||||
if ((currentTime.milliseconds - *ms) > TIMESLOP)
|
||||
currentTime.months++;
|
||||
else
|
||||
ev->any.time = currentTime.milliseconds;
|
||||
*ms = currentTime.milliseconds;
|
||||
}
|
||||
|
||||
void
|
||||
NoticeTime(const DeviceIntPtr dev, TimeStamp time)
|
||||
{
|
||||
lastDeviceEventTime[XIAllDevices].time = currentTime;
|
||||
lastDeviceEventTime[dev->id].time = currentTime;
|
||||
|
||||
LastEventTimeToggleResetFlag(dev->id, TRUE);
|
||||
LastEventTimeToggleResetFlag(XIAllDevices, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
NoticeTime(InternalEvent *ev, DeviceIntPtr dev)
|
||||
NoticeTimeMillis(const DeviceIntPtr dev, CARD32 *ms)
|
||||
{
|
||||
if (ev->any.time < currentTime.milliseconds)
|
||||
MonthChangedOrBadTime(ev);
|
||||
currentTime.milliseconds = ev->any.time;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
TimeStamp time;
|
||||
if (*ms < currentTime.milliseconds)
|
||||
MonthChangedOrBadTime(ms);
|
||||
time.months = currentTime.months;
|
||||
time.milliseconds = *ms;
|
||||
NoticeTime(dev, time);
|
||||
}
|
||||
|
||||
void
|
||||
NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev)
|
||||
{
|
||||
if (!syncEvents.playingEvents)
|
||||
NoticeTime(ev, dev);
|
||||
NoticeTimeMillis(dev, &ev->any.time);
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
LastEventTime(int deviceid)
|
||||
{
|
||||
return lastDeviceEventTime[deviceid].time;
|
||||
}
|
||||
|
||||
Bool
|
||||
LastEventTimeWasReset(int deviceid)
|
||||
{
|
||||
return lastDeviceEventTime[deviceid].reset;
|
||||
}
|
||||
|
||||
void
|
||||
LastEventTimeToggleResetFlag(int deviceid, Bool state)
|
||||
{
|
||||
lastDeviceEventTime[deviceid].reset = state;
|
||||
}
|
||||
|
||||
void
|
||||
LastEventTimeToggleResetAll(Bool state)
|
||||
{
|
||||
DeviceIntPtr dev;
|
||||
nt_list_for_each_entry(dev, inputInfo.devices, next) {
|
||||
LastEventTimeToggleResetFlag(dev->id, FALSE);
|
||||
}
|
||||
LastEventTimeToggleResetFlag(XIAllDevices, FALSE);
|
||||
LastEventTimeToggleResetFlag(XIAllMasterDevices, FALSE);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@ -1093,7 +1138,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
|
||||
if (!xorg_list_is_empty(&syncEvents.pending))
|
||||
tail = xorg_list_last_entry(&syncEvents.pending, QdEventRec, next);
|
||||
|
||||
NoticeTime((InternalEvent *)event, device);
|
||||
NoticeTimeMillis(device, &ev->any.time);
|
||||
|
||||
/* Fix for key repeating bug. */
|
||||
if (device->key != NULL && device->key->xkbInfo != NULL &&
|
||||
@ -2102,6 +2147,7 @@ DeliverEventToInputClients(DeviceIntPtr dev, InputClients * inputclients,
|
||||
{
|
||||
int attempt;
|
||||
enum EventDeliveryState rc = EVENT_NOT_DELIVERED;
|
||||
Bool have_device_button_grab_class_client = FALSE;
|
||||
|
||||
for (; inputclients; inputclients = inputclients->next) {
|
||||
Mask mask;
|
||||
@ -2121,13 +2167,21 @@ DeliverEventToInputClients(DeviceIntPtr dev, InputClients * inputclients,
|
||||
events, count,
|
||||
mask, filter, grab))) {
|
||||
if (attempt > 0) {
|
||||
rc = EVENT_DELIVERED;
|
||||
*client_return = client;
|
||||
*mask_return = mask;
|
||||
/* Success overrides non-success, so if we've been
|
||||
* successful on one client, return that */
|
||||
}
|
||||
else if (rc == EVENT_NOT_DELIVERED)
|
||||
/*
|
||||
* The order of clients is arbitrary therefore if one
|
||||
* client belongs to DeviceButtonGrabClass make sure to
|
||||
* catch it.
|
||||
*/
|
||||
if (!have_device_button_grab_class_client) {
|
||||
rc = EVENT_DELIVERED;
|
||||
*client_return = client;
|
||||
*mask_return = mask;
|
||||
/* Success overrides non-success, so if we've been
|
||||
* successful on one client, return that */
|
||||
if (mask & DeviceButtonGrabMask)
|
||||
have_device_button_grab_class_client = TRUE;
|
||||
}
|
||||
} else if (rc == EVENT_NOT_DELIVERED)
|
||||
rc = EVENT_REJECTED;
|
||||
}
|
||||
}
|
||||
@ -4130,6 +4184,9 @@ DeliverOneGrabbedEvent(InternalEvent *event, DeviceIntPtr dev,
|
||||
GrabPtr grab = grabinfo->grab;
|
||||
Mask filter;
|
||||
|
||||
if (grab->grabtype != level)
|
||||
return 0;
|
||||
|
||||
switch (level) {
|
||||
case XI2:
|
||||
rc = EventToXI2(event, &xE);
|
||||
@ -4241,22 +4298,17 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
|
||||
|
||||
sendCore = (IsMaster(thisDev) && thisDev->coreEvents);
|
||||
/* try core event */
|
||||
if (sendCore && grab->grabtype == CORE) {
|
||||
deliveries = DeliverOneGrabbedEvent(event, thisDev, CORE);
|
||||
}
|
||||
|
||||
if (!deliveries) {
|
||||
deliveries = DeliverOneGrabbedEvent(event, thisDev, XI2);
|
||||
}
|
||||
|
||||
if (!deliveries) {
|
||||
deliveries = DeliverOneGrabbedEvent(event, thisDev, XI);
|
||||
}
|
||||
if ((sendCore && grab->grabtype == CORE) || grab->grabtype != CORE)
|
||||
deliveries = DeliverOneGrabbedEvent(event, thisDev, grab->grabtype);
|
||||
|
||||
if (deliveries && (event->any.type == ET_Motion))
|
||||
thisDev->valuator->motionHintWindow = grab->window;
|
||||
}
|
||||
if (deliveries && !deactivateGrab && event->any.type != ET_Motion) {
|
||||
if (deliveries && !deactivateGrab &&
|
||||
(event->any.type == ET_KeyPress ||
|
||||
event->any.type == ET_KeyRelease ||
|
||||
event->any.type == ET_ButtonPress ||
|
||||
event->any.type == ET_ButtonRelease)) {
|
||||
switch (grabinfo->sync.state) {
|
||||
case FREEZE_BOTH_NEXT_EVENT:
|
||||
dev = GetPairedDevice(thisDev);
|
||||
@ -4641,7 +4693,7 @@ DeviceEnterLeaveEvent(DeviceIntPtr mouse,
|
||||
|
||||
filter = GetEventFilter(mouse, (xEvent *) event);
|
||||
|
||||
if (grab) {
|
||||
if (grab && grab->type == XI2) {
|
||||
Mask mask;
|
||||
|
||||
mask = xi2mask_isset(grab->xi2mask, mouse, type);
|
||||
@ -5266,8 +5318,12 @@ InitEvents(void)
|
||||
inputInfo.pointer = (DeviceIntPtr) NULL;
|
||||
|
||||
for (i = 0; i < MAXDEVICES; i++) {
|
||||
DeviceIntRec dummy;
|
||||
memcpy(&event_filters[i], default_filter, sizeof(default_filter));
|
||||
lastDeviceEventTime[i] = currentTime;
|
||||
|
||||
dummy.id = i;
|
||||
NoticeTime(&dummy, currentTime);
|
||||
LastEventTimeToggleResetFlag(i, FALSE);
|
||||
}
|
||||
|
||||
syncEvents.replayDev = (DeviceIntPtr) NULL;
|
||||
|
@ -126,7 +126,6 @@ Bool party_like_its_1989 = TRUE;
|
||||
Bool whiteRoot = FALSE;
|
||||
|
||||
TimeStamp currentTime;
|
||||
TimeStamp lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
int defaultColorVisualClass = -1;
|
||||
int monitorResolution = 0;
|
||||
|
@ -126,6 +126,7 @@ Equipment Corporation.
|
||||
#ifdef COMPOSITE
|
||||
#include "compint.h"
|
||||
#endif
|
||||
#include "selection.h"
|
||||
|
||||
#include "privates.h"
|
||||
#include "xace.h"
|
||||
@ -3092,9 +3093,7 @@ dixSaveScreens(ClientPtr client, int on, int mode)
|
||||
DeviceIntPtr dev;
|
||||
UpdateCurrentTimeIf();
|
||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||
lastDeviceEventTime[dev->id] = currentTime;
|
||||
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||
NoticeTime(dev, currentTime);
|
||||
}
|
||||
SetScreenSaverTimer();
|
||||
}
|
||||
|
@ -55,6 +55,7 @@
|
||||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
||||
#include "os.h"
|
||||
#include "xf86Parser.h"
|
||||
#include "xf86tokens.h"
|
||||
#include "Configint.h"
|
||||
@ -65,7 +66,7 @@
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
#if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED)
|
||||
#if defined(HAVE_SETEUID) && defined(_POSIX_SAVED_IDS) && _POSIX_SAVED_IDS > 0
|
||||
#define HAS_SAVED_IDS_AND_SETEUID
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
|
@ -314,9 +314,20 @@ GetCurrentRootWindow(DeviceIntPtr pDev);
|
||||
extern _X_EXPORT WindowPtr
|
||||
GetSpriteWindow(DeviceIntPtr pDev);
|
||||
|
||||
extern _X_EXPORT void
|
||||
NoticeTime(const DeviceIntPtr dev,
|
||||
TimeStamp time);
|
||||
extern _X_EXPORT void
|
||||
NoticeEventTime(InternalEvent *ev,
|
||||
DeviceIntPtr dev);
|
||||
extern _X_EXPORT TimeStamp
|
||||
LastEventTime(int deviceid);
|
||||
extern _X_EXPORT Bool
|
||||
LastEventTimeWasReset(int deviceid);
|
||||
extern _X_EXPORT void
|
||||
LastEventTimeToggleResetFlag(int deviceid, Bool state);
|
||||
extern _X_EXPORT void
|
||||
LastEventTimeToggleResetAll(Bool state);
|
||||
|
||||
extern void
|
||||
EnqueueEvent(InternalEvent * /* ev */ ,
|
||||
|
@ -155,7 +155,6 @@ typedef struct _WorkQueue {
|
||||
} WorkQueueRec;
|
||||
|
||||
extern _X_EXPORT TimeStamp currentTime;
|
||||
extern _X_EXPORT TimeStamp lastDeviceEventTime[MAXDEVICES];
|
||||
|
||||
extern _X_EXPORT int
|
||||
CompareTimeStamps(TimeStamp /*a */ ,
|
||||
|
@ -247,6 +247,9 @@
|
||||
/* Define to 1 if you have the <rpcsvc/dbm.h> header file. */
|
||||
#undef HAVE_RPCSVC_DBM_H
|
||||
|
||||
/* Define to 1 if you have the `seteuid' function. */
|
||||
#undef HAVE_SETEUID
|
||||
|
||||
/* Use CommonCrypto SHA1 functions */
|
||||
#undef HAVE_SHA1_IN_COMMONCRYPTO
|
||||
|
||||
|
@ -113,9 +113,9 @@ SOFTWARE.
|
||||
#endif
|
||||
|
||||
enum InputLevel {
|
||||
CORE,
|
||||
XI,
|
||||
XI2,
|
||||
CORE = 1,
|
||||
XI = 2,
|
||||
XI2 = 3,
|
||||
};
|
||||
|
||||
typedef unsigned long Leds;
|
||||
|
@ -139,6 +139,9 @@
|
||||
/* Have X server platform bus support */
|
||||
#undef XSERVER_PLATFORM_BUS
|
||||
|
||||
/* Define to 1 if you have the `seteuid' function. */
|
||||
#undef HAVE_SETEUID
|
||||
|
||||
/* Use X server privilege separation */
|
||||
#undef X_PRIVSEP
|
||||
|
||||
|
@ -157,7 +157,7 @@ static ExtensionToggle ExtensionToggleList[] = {
|
||||
#ifdef XF86BIGFONT
|
||||
{"XFree86-Bigfont", &noXFree86BigfontExtension},
|
||||
#endif
|
||||
#ifdef XorgLoader
|
||||
#ifdef XORGSERVER
|
||||
#ifdef XFreeXDGA
|
||||
{"XFree86-DGA", &noXFree86DGAExtension},
|
||||
#endif
|
||||
|
@ -561,7 +561,7 @@ NextDPMSTimeout(INT32 timeout)
|
||||
static CARD32
|
||||
ScreenSaverTimeoutExpire(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||
{
|
||||
INT32 timeout = now - lastDeviceEventTime[XIAllDevices].milliseconds;
|
||||
INT32 timeout = now - LastEventTime(XIAllDevices).milliseconds;
|
||||
CARD32 nextTimeout = 0;
|
||||
|
||||
#ifdef DPMSExtension
|
||||
|
@ -1391,7 +1391,7 @@ recv_alive_msg(unsigned length)
|
||||
if (SessionRunning && AliveSessionID == SessionID) {
|
||||
/* backoff dormancy period */
|
||||
state = XDM_RUN_SESSION;
|
||||
if ((GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds) >
|
||||
if ((GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds) >
|
||||
keepaliveDormancy * 1000) {
|
||||
keepaliveDormancy <<= 1;
|
||||
if (keepaliveDormancy > XDM_MAX_DORMANCY)
|
||||
|
@ -1,3 +1,7 @@
|
||||
#ifdef HAVE_DIX_CONFIG_H
|
||||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#include <misc.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -150,6 +150,7 @@ number_formatting(void)
|
||||
assert(check_float_format_test(float_tests[i]));
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wformat-security"
|
||||
static void logging_format(void)
|
||||
{
|
||||
@ -378,7 +379,7 @@ static void logging_format(void)
|
||||
|
||||
#undef read_log_msg
|
||||
}
|
||||
#pragma GCC diagnostic pop "-Wformat-security"
|
||||
#pragma GCC diagnostic pop /* "-Wformat-security" */
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
|
Loading…
Reference in New Issue
Block a user