development kernel tree: Changes to 'andy'
git at git.openmoko.org
git at git.openmoko.org
Wed Aug 13 13:21:15 CEST 2008
Rebased ref, commits from common ancestor:
commit 6c8cac7aff344b545ddcb89f8365473b39044064
Author: Andy Green <andy at openmoko.com>
Date: Wed Aug 13 12:21:00 2008 +0100
fix-eviocgrab-switch-type.patch
Signed-off-by: Andy Green <andy at openmoko.com>
commit d4ed36d017e38d09266ced9224e836a15a2334ef
Author: Neil Brown <neilb at suse.de>
Date: Wed Aug 13 12:21:00 2008 +0100
fix-EVIOCGRAB-redone.patch
On Wednesday August 13, mickey at openmoko.org wrote:
> Am Mittwoch 13 August 2008 09:13:43 schrieb Neil Brown:
> > Hi I just spent some time trying to figure out why the EVIOCGRAB ioctl
> > wasn't behaving was I expected and I finally stumbled on to this
> > patch, which substantially changes the behaviour of EVIOCGRAB.
> >
> > Would it be possible to find out what the purpose of this patch is (it
> > unfortunately contains no documentation)?
>
> See http://lkml.org/lkml/2006/8/12/64
Thanks for the pointer! Interesting reading.
So this is a 2 year old issue (almost to the day!) which does not
appear to have been properly resolved yet. Sad.
An input device (e.g. touch pad, key board) can be attached to
multiple handlers (/dev/mouseX, console, etc) one of which can be
evdev which provides the /dev/input/event* files.
evdev can support multiple clients on a single device, as multiple
processes can open /dev/input/eventX. The each get to see all the
events.
EVIOCGRAB is an ioctl on an evdev device which causes all events to go
to that handler, and that client, exclusively.
It is being used for two distinct purposes.
1/ Stop events going to other handlers, so that e.g. absolute touchpad
events don't get mapped to relative mouse events. Keyboard events
processed by X server don't get processed by console and control-C
kills the X server.
2/ Stop events going to any other client, so they can e.g. be mapped
and fed back into a uinput device,
So there are three levels of grab that are required:
0/ no grab : all events go to all handlers and all clients
1/ evdev grab: events only go to evdev, but can then go to any
client of evdev
2/ total grab: events only go to the specific evdev client that
requested the grab.
0 is the default
mainline allows you to select 2 but not 1.
this patch allows you to select 1, but not 2.
It seems that the "obvious" thing to do is to interpret the argument
to EVIOCGRAB to select between these options.
We cannot use 0, 1, 2 as above - despite the fact that it makes sense
- because that would be a regression: working programs would break.
Maybe it's best to use 0, 2, 1 and document it clearly. The chance of
anyone using 2 already has got to be very close to zero.
We would then need to change the drivers in the X server to use '2'
rather than '1', and (I think) everyone would be happy.
Below is my proposed patch which provides the functionality of
the patch in question without causing any regressions.
It also fixes two minor buglets in the original.
If anyone would like to comment, I'd appreciate it. If I hear nothing
bad I'll propose it to Dimitry Torokhov on some appropriate list.
Thanks,
NeilBrown
More information about the commitlog
mailing list