[xserver] kdrive: Grab evdev mouse/keyboard devices when X server is active
Peter Hutterer
peter.hutterer at who-t.net
Wed Oct 28 17:30:55 PDT 2009
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 <dottedmag at dottedmag.net>
> ---
> 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 <peter.hutterer at who-t.net>
Cheers,
Peter
More information about the xorg-devel
mailing list