Version 1.4.4-3

- 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).
- Added a missing break statement in cCiHandler::OpenSession().
This commit is contained in:
Klaus Schmidinger
2007-01-05 18:00:00 +01:00
parent 20e2335d3e
commit 6d4eb0df37
8 changed files with 50 additions and 20 deletions

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);