From dbd4c7329bc73fab8a45c4017bc8e9e30c2b4478 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Thu, 4 Jan 2007 13:38:40 +0100 Subject: [PATCH] When entering text via the numeric keys, the characters are now checked against the allowed characters --- CONTRIBUTORS | 2 ++ HISTORY | 2 ++ menuitems.c | 28 +++++++++++++++++----------- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d02a7edf..79c6e18b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2016,6 +2016,8 @@ Norbert Wentz Frank Schmirler 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 for reporting that a recording may unnecessarily block a device with a CAM, while diff --git a/HISTORY b/HISTORY index ca184382..1632ae89 100644 --- a/HISTORY +++ b/HISTORY @@ -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). diff --git a/menuitems.c b/menuitems.c index 086668ee..366989dc 100644 --- a/menuitems.c +++ b/menuitems.c @@ -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);