On Wed, May 20, 2009 at 02:46:17PM +0200, Matthias Hopf wrote:
> Some users get F7 delivered to apps when switching from console to X.
> After some debugging I found the culprit, but am unsure whether I'm
> doing something stupid with this patch.
> 
> Given the popularity of the xkb layer probably only few can comment here.
> Daniel? Peter?
> 
> IMHO the key repeat logic is broken here, Press+Release events should
> only be committed if the key state is down, not for up AND down.
> I verified that key repeat is still working, and so far I couldn't find
> any side effects - but of course I don't have all keyboard layouts and
> special hardware and architectures.

I believe this may be a leftover of the old key repeat code. At least the
evdev driver discards all key repeats in-driver already, so to get two key
events in a row you have to be syncing up xtest's fake input events right.
 
> From 0f64eab6c2a99d686602d88f33624e3b512843d1 Mon Sep 17 00:00:00 2001
> From: Matthias Hopf <[email protected]>
> Date: Wed, 20 May 2009 12:41:05 +0200
> Subject: [PATCH] xkb: Don't press+release keys on key events.

This is not correct. You're preventing a fake key press repeat on key
release events if the key is not currently logically down. I'd prefer a more
extensive commit message that explains exactly that.

The behaviour is still there on a key press event. Maybe it should be
removed from there too? daniel?

Cheers,
  Peter

> Fixes submission of F7 to apps on switch from console for drivers that switch
> fast enough (Novell bug #141443 from Januar 2006).
> ---
>  xkb/xkbPrKeyEv.c |    5 -----
>  1 files changed, 0 insertions(+), 5 deletions(-)
> 
> diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
> index effb0ea..a44fcbc 100644
> --- a/xkb/xkbPrKeyEv.c
> +++ b/xkb/xkbPrKeyEv.c
> @@ -85,11 +85,6 @@ unsigned        ndx;
>               }
>               else if (event->type == ET_KeyRelease &&
>                       (!(keyc->down[key>>3]&(1<<(key&7))))) {
> -                 XkbLastRepeatEvent= (pointer)event;
> -                 event->type = ET_KeyPress;
> -                 XkbHandleActions(keybd, keybd, event);
> -                 event->type = ET_KeyRelease;
> -                 XkbHandleActions(keybd, keybd, event);
>                   XkbLastRepeatEvent= NULL;
>                   return;
>               }
> -- 
> 1.6.0.2
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to