From 7148cf452c440d6f7ee753866275968188094fbc Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 3 Sep 2005 11:51:54 +0200 Subject: [PATCH] The menu timeout handling is now done centrally in the main program loop --- HISTORY | 1 + menu.c | 17 +---------------- menu.h | 5 +---- vdr.c | 11 ++++++++--- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/HISTORY b/HISTORY index cdce6852..ca0f9bb8 100644 --- a/HISTORY +++ b/HISTORY @@ -3777,3 +3777,4 @@ Video Disk Recorder Revision History the form "@plugin" even if that plugin doesn't have a main menu entry (using part of a patch by Hardy Flor, which originally implemented calling plugins from SVDRP). +- The menu timeout handling is now done centrally in the main program loop. diff --git a/menu.c b/menu.c index 4f939b85..9709212d 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.358 2005/09/03 10:34:46 kls Exp $ + * $Id: menu.c 1.359 2005/09/03 11:42:27 kls Exp $ */ #include "menu.h" @@ -29,7 +29,6 @@ #include "transfer.h" #include "videodir.h" -#define MENUTIMEOUT 120 // seconds #define MAXWAIT4EPGINFO 3 // seconds #define MODETIMEOUT 3 // seconds @@ -1300,7 +1299,6 @@ cMenuCam::cMenuCam(cCiMenu *CiMenu) Add(new cOsdItem(ciMenu->BottomText())); Display(); dsyslog("CAM: Menu - %s", ciMenu->TitleText()); - lastActivity = time(NULL); } cMenuCam::~cMenuCam() @@ -1329,10 +1327,6 @@ eOSState cMenuCam::ProcessKey(eKeys Key) default: break; } } - if (Key != kNone) - lastActivity = time(NULL); - else if (time(NULL) - lastActivity > MENUTIMEOUT) - state = osEnd; return state; } @@ -1350,7 +1344,6 @@ cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry) SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM"); Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind())); Display(); - lastActivity = time(NULL); } cMenuCamEnquiry::~cMenuCamEnquiry() @@ -1379,10 +1372,6 @@ eOSState cMenuCamEnquiry::ProcessKey(eKeys Key) default: break; } } - if (Key != kNone) - lastActivity = time(NULL); - else if (time(NULL) - lastActivity > MENUTIMEOUT) - state = osEnd; return state; } @@ -2505,7 +2494,6 @@ void cMenuMain::Set(void) SetHelp(!replaying ? tr("Record") : NULL, tr("Audio"), replaying ? NULL : tr("Pause"), replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Resume") : NULL); Display(); - lastActivity = time(NULL); } eOSState cMenuMain::ProcessKey(eKeys Key) @@ -2578,15 +2566,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key) } } if (Key != kNone) { - lastActivity = time(NULL); if (Setup.OSDLanguage != osdLanguage) { Set(); if (!HasSubMenu()) Display(); } } - else if (time(NULL) - lastActivity > MENUTIMEOUT) - state = osEnd; return state; } diff --git a/menu.h b/menu.h index 5846469b..9d0ecbd9 100644 --- a/menu.h +++ b/menu.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.72 2005/09/03 10:33:17 kls Exp $ + * $Id: menu.h 1.73 2005/09/03 11:41:41 kls Exp $ */ #ifndef __MENU_H @@ -55,7 +55,6 @@ public: class cMenuMain : public cOsdMenu { private: - time_t lastActivity; bool replaying; static cOsdObject *pluginOsdObject; void Set(void); @@ -120,7 +119,6 @@ public: class cMenuCam : public cOsdMenu { private: cCiMenu *ciMenu; - time_t lastActivity; bool selected; eOSState Select(void); public: @@ -132,7 +130,6 @@ public: class cMenuCamEnquiry : public cOsdMenu { private: cCiEnquiry *ciEnquiry; - time_t lastActivity; char *input; bool replied; eOSState Reply(void); diff --git a/vdr.c b/vdr.c index 02347fd6..721ea11c 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.212 2005/09/03 11:26:27 kls Exp $ + * $Id: vdr.c 1.213 2005/09/03 11:50:28 kls Exp $ */ #include @@ -66,6 +66,7 @@ #define LASTCAMMENUTIMEOUT 3 // seconds to run the main loop 'fast' after a CAM menu has been closed // in order to react on a possible new CAM menu as soon as possible #define DEVICEREADYTIMEOUT 30 // seconds to wait until all devices are ready +#define MENUTIMEOUT 120 // seconds of user inactivity after which an OSD display is closed #define EXIT(v) { ExitCode = (v); goto Exit; } @@ -806,8 +807,12 @@ int main(int argc, char *argv[]) Interact = Menu ? Menu : cControl::Control(); // might have been closed in the mean time if (Interact) { eOSState state = Interact->ProcessKey(key); - if (state == osUnknown && ISMODELESSKEY(key) && cControl::Control() && Interact != cControl::Control()) - state = cControl::Control()->ProcessKey(key); + if (state == osUnknown) { + if (ISMODELESSKEY(key) && cControl::Control() && Interact != cControl::Control()) + state = cControl::Control()->ProcessKey(key); + else if (time(NULL) - LastActivity > MENUTIMEOUT) + state = osEnd; + } switch (state) { case osPause: DELETENULL(Menu); cControl::Shutdown(); // just in case