[vdr] [PATCH] tolerate k_Repeat in cMenuEditStrItem::ProcessKey()

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Sun Apr 23 13:42:10 CEST 2006


Marko Mäkelä wrote:
> On Sun, Apr 09, 2006 at 10:38:06PM +0300, Marko Mäkelä wrote:
> 
>>For instance, when I start editing the string "Euronews" by pressing the Right
>>button in the "Edit timer" menu, it will display as follows:
>>
>>Right->
>> [E]uronews
>>2->
>> [A]uronews
>>2->
>> Au[a]onews
>>
>>If I keep a longer pause between the two keypresses of the button "2",
>>the string will change to "Aaronews".
> 
> 
> This is because my RCU (the new Hauppauge RCU) erroneously will not flip
> the RC5 toggle bit when the button is pressed in rapid succession.
> Also, the unpatched cx88-input.c in Linux 2.6.x (where 12<=x<=16) would
> map rapidly arriving key-press events to key-repeat.
> 
> The fix is simple:
> 
> --- menuitems.c.orig    2006-04-22 18:51:36.000000000 +0300
> +++ menuitems.c 2006-04-22 19:04:00.000000000 +0300
> @@ -351,7 +351,7 @@ char cMenuEditStrItem::Inc(char c, bool
> 
>  eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
>  {
> -  bool SameKey = Key == lastKey;
> +  bool SameKey = !((Key ^ lastKey) & ~k_Repeat);
>    if (Key != kNone)
>       lastKey = Key;
>    else if (!newchar && k0 <= NORMALKEY(lastKey) && NORMALKEY(lastKey) <= k9 && autoAdvanceTimeout.TimedOut()) {
> @@ -460,7 +460,7 @@ eOSState cMenuEditStrItem::ProcessKey(eK
>                         }
>                      if (!currentChar || !*currentChar || *currentChar == '\t') {
>                         // find the beginning of the character map entry for Key-                       int n = Key - k0;
> +                       int n = NORMALKEY(Key) - k0;
>                         currentChar = charMap;
>                         while (n > 0 && *currentChar) {
>                               if (*currentChar++ == '\t')
> 
> Without the second patch, the k0..k9|k_Repeat event would be ignored when
> *currentChar=='\t' is reached.

Can you please try the attached, slightly modified version of this patch?
It avoids the rather complex "xor" expression and also some extra NORMALKEY().

Klaus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vdr-1.3.47-ignorerepeat.diff
Type: text/x-patch
Size: 1044 bytes
Desc: not available
Url : http://www.linuxtv.org/pipermail/vdr/attachments/20060423/ccd7717d/vdr-1.3.47-ignorerepeat.bin


More information about the vdr mailing list