diff options
Diffstat (limited to 'mg_menu.c')
-rw-r--r-- | mg_menu.c | 62 |
1 files changed, 34 insertions, 28 deletions
@@ -342,32 +342,7 @@ mgOsd::Message1(const char *msg, const string &arg) { eOSState mgOsd::ProcessKey (eKeys key) { eOSState result = osContinue; - if (Menus.size()<1) - mgError("mgOsd::ProcessKey: Menus is empty"); - newmenu = Menus.back(); // Default: Stay in current menu - newposition = -1; - - { - mgMenu * oldmenu = newmenu; - - // item specific key logic: - result = cOsdMenu::ProcessKey (key); - - // mgMenu specific key logic: - if (result == osUnknown) - result = oldmenu->Process (key); - } - // catch osBack for empty OSD lists . This should only happen for playlistitems - // (because if the list was empty, no mgActions::ProcessKey was ever called) - if (result == osBack) { - // do as if there was an entry - mgAction *a = Menus.back()->GenerateAction(actEntry,actEntry); - if (a) { - result = a->Back(); - delete a; - } - } - switch (key) { + switch (key) { case kFastRew: case kFastRew|k_Repeat: case kFastFwd: @@ -377,15 +352,41 @@ eOSState mgOsd::ProcessKey (eKeys key) { case kPrev|k_Repeat: case kNext: case kNext|k_Repeat: + case kChanUp: + case kChanUp|k_Repeat: + case kChanDn: + case kChanDn|k_Repeat: // case kStop: does hide the player osd, but the player is still there in limbo case kPause: { mgPlayerControl *c = PlayerControl(); - if (c) c->ProcessKey(key); + if (c) { + result=c->ProcessKey(key); + goto pr_exit; + } break; } default: break; } + if (Menus.size()<1) + mgError("mgOsd::ProcessKey: Menus is empty"); + newmenu = Menus.back(); // Default: Stay in current menu + newposition = -1; + + { + mgMenu * oldmenu = newmenu; + + // item specific key logic: + result = cOsdMenu::ProcessKey (key); + + // mgMenu specific key logic: + if (result == osUnknown) + result = oldmenu->Process (key); + } + if (result == osBack) { + mgError("vdr_menu found osBack: Should never happen"); + result=osUnknown; + } // do nothing for unknown keys: if (result == osUnknown) goto pr_exit; @@ -408,6 +409,11 @@ eOSState mgOsd::ProcessKey (eKeys key) { if (forcerefresh) { forcerefresh = false; + if (newposition<0) { + mgSelMenu*sm = dynamic_cast<mgSelMenu*>(this); + if (sm) + newposition = sm->selection()->gotoPosition(); + } Menus.back ()->Display (); } pr_exit: @@ -458,7 +464,7 @@ mgOsd::AddMenu (mgMenu * m,int position) { m->setParentName(Get(Current())->Text()); if (position<0) position=0; newposition = position; - m->Display (); +// m->Display (); } void |