On Thu, Oct 29, 2009 at 12:40:48AM +0600, Mikhail Gusarov wrote: > Input events are directed to both vt and input devices by default. > Unless input devices are grabbed, keyboard events fill it vt buffers > and cause spontaneous wakeups in kernel tty layer when buffers are full. > > Signed-off-by: Mikhail Gusarov <[email protected]> > --- > hw/kdrive/linux/evdev.c | 15 ++++++++++++++- > 1 files changed, 14 insertions(+), 1 deletions(-) > > diff --git a/hw/kdrive/linux/evdev.c b/hw/kdrive/linux/evdev.c > index f6017ba..096a2dd 100644 > --- a/hw/kdrive/linux/evdev.c > +++ b/hw/kdrive/linux/evdev.c > @@ -243,7 +243,9 @@ EvdevPtrEnable (KdPointerInfo *pi) > if (fd < 0) > return BadMatch; > > - > + if (ioctl (fd, EVIOCGRAB, 1) < 0) > + perror ("Grabbing evdev mouse device failed"); > + > if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) > { > perror ("EVIOCGBIT 0"); > @@ -335,6 +337,10 @@ EvdevPtrDisable (KdPointerInfo *pi) > return; > > KdUnregisterFd (pi, ke->fd, TRUE); > + > + if (ioctl (ke->fd, EVIOCGRAB, 0) < 0) > + perror ("Ungrabbing evdev mouse device failed"); > + > xfree (ke); > pi->driverPrivate = 0; > } > @@ -425,6 +431,9 @@ EvdevKbdEnable (KdKeyboardInfo *ki) > if (fd < 0) > return BadMatch; > > + if (ioctl (fd, EVIOCGRAB, 1) < 0) > + perror ("Grabbing evdev keyboard device failed"); > + > if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) { > perror ("EVIOCGBIT 0"); > close (fd); > @@ -496,6 +505,10 @@ EvdevKbdDisable (KdKeyboardInfo *ki) > return; > > KdUnregisterFd (ki, ke->fd, TRUE); > + > + if (ioctl (ke->fd, EVIOCGRAB, 0) < 0) > + perror ("Ungrabbing evdev keyboard device failed"); > + > xfree (ke); > ki->driverPrivate = 0; > } > -- > 1.6.5
Reviewed-by: Peter Hutterer <[email protected]> Cheers, Peter _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
