input: change pointer screen crossing behaviour for multiple ScreenRecs
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 4 Oct 2011 01:41:17 +0000 (11:41 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 13 Oct 2011 01:34:43 +0000 (11:34 +1000)
commit401150d7dcad08be7c1f07e076f810cd61e2105c
treef832b93a1a259d457cc864169172518f6c70d72b
parent6bd0eff40fae1e5d8fed28751851eb5b932d131b
input: change pointer screen crossing behaviour for multiple ScreenRecs

miPointerSetPosition traditionally took coordinates on a per-screen basis,
triggering a screen switch when these went out-of-bounds. For absolute
devices, this prevented screen crossing in the negative x/y direction.

This patch changes the event generation patch to handle screen coordinates
in a desktop range (i.e. all screens together). Screen switches are
triggered when these coordinates are not on the current screen.

This unifies the pointer behaviour of single ScreenRec multihead and
multiple ScreenRecs multihead in that the cursor by default moves about the
whole screen rather than be confined to one single screen. The
transformation matrix may then be used to actually confine the cursor to the
screen again.

Note: fill_pointer_events has to deal with several different coordinate
systems. Make sure you read the comment before trying to understand the code.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
dix/devices.c
dix/getevents.c
include/inputstr.h
mi/mipointer.c