When entering text via the numeric keys, the characters are now checked against the allowed characters

This commit is contained in:
Klaus Schmidinger 2007-01-04 13:38:40 +01:00
parent 50ff4d3b79
commit dbd4c7329b
3 changed files with 21 additions and 11 deletions

View File

@ -2016,6 +2016,8 @@ Norbert Wentz <norbert.wentz@online.de>
Frank Schmirler <vdr@schmirler.de>
for fixing handling client side termination of SVDRP connections
for fixing assigning schedules to channels in case there is no initial EPG information
for making entering text via the numeric keys check the characters against the
allowed characters
Jörn Reder <joern@zyn.de>
for reporting that a recording may unnecessarily block a device with a CAM, while

View File

@ -5021,3 +5021,5 @@ Video Disk Recorder Revision History
- Fixed a possible segfault if VDR gets terminated while a message is displayed
(thanks to Udo Richter).
- Fixed the INSTALL section on retrying shutdown later (reported by Udo Richter).
- When entering text via the numeric keys, the characters are now checked against
the allowed characters (thanks to Frank Schmirler).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menuitems.c 1.47 2006/07/30 09:09:30 kls Exp $
* $Id: menuitems.c 1.48 2007/01/04 13:30:37 kls Exp $
*/
#include "menuitems.h"
@ -461,13 +461,6 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
AdvancePos();
currentChar = NULL;
}
if (insert && newchar) {
// create a new character in insert mode
if (int(strlen(value)) < length - 1) {
memmove(value + pos + 1, value + pos, strlen(value) - pos + 1);
value[pos] = ' ';
}
}
if (!currentChar || !*currentChar || *currentChar == '\t') {
// find the beginning of the character map entry for Key
int n = NORMALKEY(Key) - k0;
@ -476,15 +469,28 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
if (*currentChar++ == '\t')
n--;
}
// find first allowed character
while (*currentChar && *currentChar != '\t' && !strchr(allowed, *currentChar))
currentChar++;
}
if (*currentChar && *currentChar != '\t') {
if (insert && newchar) {
// create a new character in insert mode
if (int(strlen(value)) < length - 1) {
memmove(value + pos + 1, value + pos, strlen(value) - pos + 1);
value[pos] = ' ';
}
}
value[pos] = *currentChar;
if (uppercase)
value[pos] = toupper(value[pos]);
currentChar++;
// find next allowed character
do {
currentChar++;
} while (*currentChar && *currentChar != '\t' && !strchr(allowed, *currentChar));
newchar = false;
autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT);
}
newchar = false;
autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT);
}
else
return cMenuEditItem::ProcessKey(Key);