Go to file
Peter Hutterer 9f462ff908 dix: Clip only into axis ranges if we're in absolute mode. (#26543)
An absolute device in relative mode may provide valuators outside of the
axis range. Clipping back into the range prevents screen crossings in a
multi-screen (Xinerama) setup as the required screen edge for crossing is
never met: miPointerSetPosition crosses the screen conditional to the X
coordinate being equal to the screen width or _less than_ 0. While the
former can be met when clipping into the coordinate range and scaling, the
latter cannot, resulting in a mouse pointer that gets stuck on the rightmost
screen.

This patch only applies axis clipping for valuators in mode Absolute. If
relative, we allow the values to get above/below the axis ranges. Doesn't
matter, miPointerSetPosition will reset the values to the allowed range even
if no screen was crossed.
This leads to interesting values provided to clients, the valuator range of
the device resets once a screen is crossed and essentially reflects
the position of the cursor on the screen - scaled into the valuator range.
The values themselves are valid given the range though.

In theory, the XI1 specs require that a relative device has a min/max range
of 0/0. This doesn't really go well with devices that actually can switch
mode between relative and absolute since they would have to reset their axis
range when switching. If multiple XI clients are in use, we have no method
of notifying them about the changes, so other clients may continue to use
the wrong axis ranges (note: XI1 wasn't really designed to have multiple
clients use a device). Expecting all relative devices to have this min/max
of 0 is unrealistic at this point.

So pick what is possibly the lesser of all evils, pass the beer and despair.

X.Org Bug 26543 <http://bugs.freedesktop.org/show_bug.cgi?id=26543>

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2010-03-10 09:30:19 +10:00
composite os: Prevent core dump from being truncated. 2010-02-17 23:20:52 -08:00
config udev: Don't filter subsystem "input" 2010-02-15 15:27:42 +10:00
damageext Add type name argument to CreateNewResourceType 2009-12-18 17:44:12 -08:00
dbe Add type name argument to CreateNewResourceType 2009-12-18 17:44:12 -08:00
dix dix: Clip only into axis ranges if we're in absolute mode. (#26543) 2010-03-10 09:30:19 +10:00
doc doc: finish the removal of SecurityPolicy file man pages 2010-01-27 14:17:17 -08:00
exa EXA/mixed: Clean up exaPrepareAccessReg_mixed() a little. 2010-02-17 23:22:36 -08:00
fb Fix source pictures getting random transforms after 2d6a8f6683. 2010-01-27 14:03:03 -08:00
glx glx: Compile fix to let server compile with new and old mesa 2010-02-24 09:16:46 -08:00
hw Replace assembly with generic unaligned access code 2010-03-03 20:02:49 -08:00
include libselinux now has a pkgconfig file. Use it. 2010-02-22 17:03:50 -05:00
m4 dolt: add Cygwin to supported platforms 2009-10-13 20:30:22 -07:00
mi Add type name argument to CreateNewResourceType 2009-12-18 17:44:12 -08:00
miext os: Prevent core dump from being truncated. 2010-02-17 23:20:52 -08:00
os os: Prevent core dump from being truncated. 2010-02-17 23:20:52 -08:00
randr Don't double-swap the RandR PropertyNotify event 2010-02-12 14:55:19 -08:00
record Re-enable RECORD extension. 2010-02-22 12:04:28 +10:00
render RENDER: Fix gradient and solid fill pictures with Xinerama, and misc cleanup 2010-01-29 21:38:50 -08:00
test dix: EventToCore needs to copy the root window too. 2010-01-27 14:38:16 -08:00
Xext xselinux: Bump extension minor version. 2010-02-22 17:05:01 -05:00
xfixes Add type name argument to CreateNewResourceType 2009-12-18 17:44:12 -08:00
Xi Xi: assume BadMode for non-BadMatch errors returned from SetDeviceMode. 2010-02-22 12:04:36 +10:00
xkb xkb: sed True -> TRUE and False -> FALSE 2010-02-02 10:03:30 +10:00
.gitignore .gitignore: use common defaults with custom section #24239 2009-11-11 21:40:20 -08:00
autogen.sh autogen.sh: Pass --force to autoreconf 2008-07-22 16:55:26 +03:00
configure.ac configure: move SELINUX_LIBS to XSERVER_SYS_LIBS 2010-03-03 20:01:45 -08:00
COPYING Update Sun license notices to current X.Org standard form 2009-12-16 17:11:35 -08:00
cpprules.in man: add missing __datadir__ for Xserver XWin man pages 2010-01-27 14:16:25 -08:00
Makefile.am INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206 2009-11-11 21:44:24 -08:00
README packaging: provide a default README file #24206 2010-01-27 14:00:17 -08: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 Since font modules are dead, don't mention them in xorg-server.pc 2009-07-09 17:21:07 -04: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