From bc16b8af539b3653a95e6345a8dddd444a4cab1e Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 13 Jun 2003 14:44:31 +0200 Subject: [PATCH] Improved channel switching in case of numerical input --- CONTRIBUTORS | 2 ++ HISTORY | 2 ++ menu.c | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index c1f5eb80..cccbc040 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -525,6 +525,8 @@ Jaakko Hyv for fixing recording overlapping timers on the same channel in case DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and/or DO_MULTIPLE_RECORDINGS is not defined for fixing the minimum lifespan of deleted recordings + for suggesting to improve channel switching in case of numerical input by switching + as soon as the channel is unique Dennis Noordsij for reporting a small glitch when switching channels diff --git a/HISTORY b/HISTORY index 1ecb381c..c4299054 100644 --- a/HISTORY +++ b/HISTORY @@ -2258,3 +2258,5 @@ Video Disk Recorder Revision History - Fixed a bug in channel switching after Left/Right has been pressed (thanks to Michael Walle for reporting this one). +- Improved channel switching in case of numerical input by switching as soon as + the channel is unique (suggested by Jaakko Hyvätti). diff --git a/menu.c b/menu.c index 44e23f5f..32db4170 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.257 2003/06/12 16:11:32 kls Exp $ + * $Id: menu.c 1.258 2003/06/13 14:31:15 kls Exp $ */ #include "menu.h" @@ -2742,6 +2742,24 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key) cChannel *channel = Channels.GetByNumber(number); DisplayChannel(channel); lastTime = time_ms(); + // Lets see if there can be any useful further input: + int n = channel ? number : 0; + while (channel && (channel = Channels.Next(channel)) != NULL) { + if (!channel->GroupSep()) { + if (channel->Number() > n) + n *= 10; + if (n <= channel->Number() && channel->Number() <= n + 9) { + n = 0; + break; + } + } + } + if (n > 0) { + // This channel is the only one that fits the input, so let's take it right away: + Interface->Flush(); // makes sure the user sees his last input + Channels.SwitchTo(number); + return osEnd; + } } } break;