summaryrefslogtreecommitdiff
path: root/mg_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'mg_menu.c')
-rw-r--r--mg_menu.c62
1 files changed, 34 insertions, 28 deletions
diff --git a/mg_menu.c b/mg_menu.c
index 9abc7e4..1d496ae 100644
--- a/mg_menu.c
+++ b/mg_menu.c
@@ -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