Hi,
me and Rolf Ahrenberg noticed that there seems to be a problem with cMenuEditStrItem in vdr-1.5.9. To reproduce it just call the timer edit menu and hit 'left' on the directory item or any other cMenuEditStrItem object. The following patch should fix this:
--- vdr-1.5.9/menuitems.c 2007-08-17 15:48:07.000000000 +0200 +++ VDR/menuitems.c 2007-09-29 09:02:12.000000000 +0200 @@ -500,7 +500,7 @@ pos--; newchar = true; } - if (!insert && Utf8is(alpha, valueUtf8[pos])) + if (pos >= 0 && !insert && Utf8is(alpha, valueUtf8[pos])) uppercase = Utf8is(upper, valueUtf8[pos]); break; case kRight|k_Repeat:
It happens here that pos is -1.
Strange that the old code of previous vdr versions
if (!insert && isalpha(value[pos])) uppercase = isupper(value[pos]);
had no problem there.
BR,
Christian
On 09/29/07 09:33, Christian Wieninger wrote:
Hi,
me and Rolf Ahrenberg noticed that there seems to be a problem with cMenuEditStrItem in vdr-1.5.9. To reproduce it just call the timer edit menu and hit 'left' on the directory item or any other cMenuEditStrItem object. The following patch should fix this:
--- vdr-1.5.9/menuitems.c 2007-08-17 15:48:07.000000000 +0200 +++ VDR/menuitems.c 2007-09-29 09:02:12.000000000 +0200 @@ -500,7 +500,7 @@ pos--; newchar = true; }
if (!insert && Utf8is(alpha, valueUtf8[pos]))
case kRight|k_Repeat:if (pos >= 0 && !insert && Utf8is(alpha, valueUtf8[pos])) uppercase = Utf8is(upper, valueUtf8[pos]); break;
It happens here that pos is -1.
I would even put the whole 'if (!insert &&...' into the first 'if (pos > 0)...', because it only makes sense if an actual cursor movement to the left has taken place:
--- menuitems.c 2007/08/17 13:48:07 1.51 +++ menuitems.c 2007/10/13 10:39:40 @@ -499,9 +499,9 @@ if (!insert || newchar) pos--; newchar = true; + if (!insert && Utf8is(alpha, valueUtf8[pos])) + uppercase = Utf8is(upper, valueUtf8[pos]); } - if (!insert && Utf8is(alpha, valueUtf8[pos])) - uppercase = Utf8is(upper, valueUtf8[pos]); break; case kRight|k_Repeat: case kRight: if (InEditMode())
Klaus