XLibre Xserver
Go to file
Peter Hutterer 69ac909878 xkb: merge lockedPtrButtons state from all attached SDs.
Problem:
lockedPtrButtons keeps the state of the buttons locked by a PointerKeys button
press. Unconditionally clearing the bits may cause stuck buttons in this
sequence of events:

1. type Shift + NumLock to enable PointerKeys
2. type 0/Ins on keypad to emulate Button 1 press
        → button1 press event to client
3. press and release button 1 on physical mouse
        → button1 release event to client

Button 1 on the MD is now stuck and cannot be released.

Cause:
XKB PointerKeys button events are posted through the XTEST pointer device.
Once a press is generated, the XTEST device's button is down. The DIX merges
the button state of all attached SDs, hence the MD will have a button down
while the XTEST device has a button down.

PointerKey button events are only generated on the master device to avoid
duplicate events (see XkbFakeDeviceButton()). If the MD has the
lockedPtrButtons bit cleared by a release event on a physical device, no
such event is generated when a keyboard device triggers the PointerKey
ButtonRelease trigger. Since the event - if generated - is posted through
the XTEST pointer device, lack of a generated ButtonRelease event on the
XTEST pointer device means the button is never released, resulting in the
stuck button observed above.

Solution:
This patch merges the MD's lockedPtrButtons with the one of all attached
slave devices on release events. Thus, as long as one attached keyboard has
a lockedPtrButtons bit set, this bit is kept in the MD. Once a PointerKey
button is released on all keyboards, the matching release event is emulated
from the MD through the XTEST pointer device, thus also releasing the button
in the DIX.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2010-07-01 14:05:39 +10:00
Xext xv: Don't send port notify when SetPortAttribute fails 2010-06-21 19:03:20 -07:00
Xi Merge remote branch 'whot/for-keith' 2010-06-10 18:39:10 -07:00
composite composite: fix freeing of old pixmap until after move/resize/cbw (bug 28345) 2010-06-22 11:41:20 -07:00
config config: Replace xstrdup with strdup in add_option() 2010-06-11 19:05:46 +07:00
damageext Clean up after removal of screen parameters from region macros. 2010-06-05 22:07:21 -07:00
dbe Remove unnecessary parentheses around return values in functions 2010-06-10 06:42:42 -07:00
dix dix: fix up erroneous error message. 2010-07-01 14:05:18 +10:00
doc Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
exa Merge remote branch 'dottedmag/for-keithp' 2010-06-11 10:08:13 -07:00
fb Record some additional library dependencies in xf86 modules 2010-06-10 19:01:22 -07:00
glx dri2: avoid crash with old dri drivers. 2010-06-22 11:40:15 -07:00
hw Revert "mi: Remove unused overlay support" 2010-06-22 12:11:20 -07:00
include xkb: merge lockedPtrButtons state from all attached SDs. 2010-07-01 14:05:39 +10:00
m4 dolt: add Cygwin to supported platforms 2009-10-13 20:30:22 -07:00
mi Revert "mi: Remove unused overlay support" 2010-06-22 12:11:20 -07:00
miext Fix a couple more possible errors with input-only windows 2010-06-10 19:15:28 -07:00
os Don't crash when asked if a client that has disconnected was local 2010-06-22 11:42:33 -07:00
randr rotation: fix cursor and overlap of one pixel. 2010-06-22 11:38:30 -07:00
record record: Prevent a crash on recording client disconnect. 2010-06-22 11:43:36 -07:00
render Remove unnecessary parentheses around return values in functions 2010-06-10 06:42:42 -07:00
test xfree86: Match devices based on USB ID 2010-06-11 09:30:33 +10:00
xfixes Remove unnecessary parentheses around return values in functions 2010-06-10 06:42:42 -07:00
xkb xkb: merge lockedPtrButtons state from all attached SDs. 2010-07-01 14:05:39 +10:00
.gitignore .gitignore: use common defaults with custom section #24239 2009-11-11 21:40:20 -08:00
COPYING Update Sun license notices to current X.Org standard form 2009-12-16 17:11:35 -08:00
Makefile.am Fix relink targets for silent rules 2010-03-22 00:45:52 -05:00
README packaging: provide a default README file #24206 2010-01-27 14:00:17 -08:00
autogen.sh autogen.sh: Pass --force to autoreconf 2008-07-22 16:55:26 +03:00
configure.ac configure: don't check xfont always for each server 2010-06-24 13:55:42 -07:00
cpprules.in xfree86: Set a saner search path for xorg.conf.d 2010-04-08 15:21:01 +10:00
fix-miregion Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-miregion-private Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-patch-whitespace Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
fix-region Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
xorg-server.m4 macros: use PKG_CONFIG variable rather than executable name 2010-01-07 12:57:23 -08:00
xorg-server.pc.in config: declare xserver private dependencies in xorg-server.pc 2010-06-22 11:34:47 -07:00

					X Server

The X server accepts requests from client applications to create windows,
which are (normally rectangular) "virtual screens" that the client program
can draw into.

Windows are then composed on the actual screen by the X server
(or by a separate composite manager) as directed by the window manager,
which usually communicates with the user via graphical controls such as buttons
and draggable titlebars and borders.

For a comprehensive overview of X Server and X Window System, consult the
following article:
http://en.wikipedia.org/wiki/X_server

All questions regarding this software should be directed at the
Xorg mailing list:

        http://lists.freedesktop.org/mailman/listinfo/xorg

Please submit bug reports to the Xorg bugzilla:

        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg

The master development code repository can be found at:

        git://anongit.freedesktop.org/git/xorg/xserver

        http://cgit.freedesktop.org/xorg/xserver

For patch submission instructions, see:

	http://www.x.org/wiki/Development/Documentation/SubmittingPatches

For more information on the git code manager, see:

        http://wiki.x.org/wiki/GitPage