--- menuitems.c	2024/07/13 09:12:18	5.2
+++ menuitems.c	2025/01/29 10:20:17
@@ -38,7 +38,6 @@
 {
   cString buffer = cString::sprintf("%s:\t%s", name, Value);
   SetText(buffer);
-  cStatus::MsgOsdCurrentItem(buffer);
 }
 
 void cMenuEditItem::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
--- status.h	2018/01/29 13:42:17	5.0
+++ status.h	2025/01/29 11:15:26
@@ -87,8 +87,14 @@
                // The help keys have been set to the given values (may be NULL).
   virtual void OsdItem(const char *Text, int Index) {}
                // The OSD displays the given single line Text as menu item at Index.
+  virtual void OsdItem2(const char *Text, int Index, bool Selectable) { OsdItem(Text, Index); }
+               // The OSD displays the given single line Text as menu item at Index.
+               // Selectable is true if this item can be selected.
   virtual void OsdCurrentItem(const char *Text) {}
                // The OSD displays the given single line Text as the current menu item.
+  virtual void OsdCurrentItem2(const char *Text, int Index) { OsdCurrentItem(Text); }
+               // The OSD displays the given single line Text as the current menu item.
+               // Index is the one that was given in OsdItem[2]() for this item.
   virtual void OsdTextItem(const char *Text, bool Scroll) {}
                // The OSD displays the given multi line text. If Text points to an
                // actual string, that text shall be displayed and Scroll has no
@@ -117,8 +123,8 @@
   static void MsgOsdTitle(const char *Title);
   static void MsgOsdStatusMessage(const char *Message);
   static void MsgOsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue);
-  static void MsgOsdItem(const char *Text, int Index);
-  static void MsgOsdCurrentItem(const char *Text);
+  static void MsgOsdItem(const char *Text, int Index, bool Selectable = true);
+  static void MsgOsdCurrentItem(const char *Text, int Index = -1);
   static void MsgOsdTextItem(const char *Text,  bool Scroll = false);
   static void MsgOsdChannel(const char *Text);
   static void MsgOsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
--- status.c	2018/01/29 13:36:53	5.0
+++ status.c	2025/01/29 11:15:26
@@ -107,16 +107,16 @@
       sm->OsdHelpKeys(Red, Green, Yellow, Blue);
 }
 
-void cStatus::MsgOsdItem(const char *Text, int Index)
+void cStatus::MsgOsdItem(const char *Text, int Index, bool Selectable)
 {
   for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
-      sm->OsdItem(Text, Index);
+      sm->OsdItem2(Text, Index, Selectable);
 }
 
-void cStatus::MsgOsdCurrentItem(const char *Text)
+void cStatus::MsgOsdCurrentItem(const char *Text, int Index)
 {
   for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
-      sm->OsdCurrentItem(Text);
+      sm->OsdCurrentItem2(Text, Index);
 }
 
 void cStatus::MsgOsdTextItem(const char *Text, bool Scroll)
--- osdbase.c	2024/01/19 12:10:47	5.1
+++ osdbase.c	2025/01/29 11:15:26
@@ -248,7 +248,7 @@
   if (count > 0) {
      int ni = 0;
      for (cOsdItem *item = First(); item; item = Next(item)) {
-         cStatus::MsgOsdItem(item->Text(), ni++);
+         cStatus::MsgOsdItem(item->Text(), ni++, item->Selectable());
          if (current < 0 && item->Selectable())
             current = item->Index();
          }
@@ -268,7 +268,7 @@
          bool CurrentSelectable = (i == current) && item->Selectable();
          item->SetMenuItem(displayMenu, i - first, CurrentSelectable, item->Selectable());
          if (CurrentSelectable)
-            cStatus::MsgOsdCurrentItem(item->Text());
+            cStatus::MsgOsdCurrentItem(item->Text(), i);
          if (++n == displayMenuItems)
             break;
          i++;
@@ -300,7 +300,7 @@
   if (item) {
      item->SetMenuItem(displayMenu, current - first, Current && item->Selectable(), item->Selectable());
      if (Current && item->Selectable())
-        cStatus::MsgOsdCurrentItem(item->Text());
+        cStatus::MsgOsdCurrentItem(item->Text(), current);
      if (!Current)
         item->SetFresh(true); // leaving the current item resets 'fresh'
      if (cMenuEditItem *MenuEditItem = dynamic_cast<cMenuEditItem *>(item)) {
@@ -321,7 +321,7 @@
         bool Current = Index == current;
         Item->SetMenuItem(displayMenu, Offset, Current && Item->Selectable(), Item->Selectable());
         if (Current && Item->Selectable())
-           cStatus::MsgOsdCurrentItem(Item->Text());
+           cStatus::MsgOsdCurrentItem(Item->Text(), Index);
         }
      }
 }
@@ -501,7 +501,6 @@
          if (*s == Key - k1 + '1') {
             current = item->Index();
             RefreshCurrent();
-            Display();
             cRemote::Put(kOk, true);
             break;
             }
@@ -542,7 +541,8 @@
   if (marked < 0 && item) {
      eOSState state = item->ProcessKey(Key);
      if (state != osUnknown) {
-        DisplayCurrent(true);
+        if (Key != kNone)
+           DisplayCurrent(true);
         return state;
         }
      }
--- PLUGINS/src/status/status.c	2018/04/10 13:01:03	5.0
+++ PLUGINS/src/status/status.c	2025/01/29 11:15:26
@@ -29,8 +29,8 @@
   virtual void OsdTitle(const char *Title);
   virtual void OsdStatusMessage(const char *Message);
   virtual void OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue);
-  virtual void OsdItem(const char *Text, int Index);
-  virtual void OsdCurrentItem(const char *Text);
+  virtual void OsdItem2(const char *Text, int Index, bool Selectable);
+  virtual void OsdCurrentItem2(const char *Text, int Index);
   virtual void OsdTextItem(const char *Text, bool Scroll);
   virtual void OsdChannel(const char *Text);
   virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
@@ -96,14 +96,14 @@
   dsyslog("status: cStatusTest::OsdHelpKeys %s - %s - %s - %s", Red, Green, Yellow, Blue);
 }
 
-void cStatusTest::OsdItem(const char *Text, int Index)
+void cStatusTest::OsdItem2(const char *Text, int Index, bool Selected)
 {
-  //dsyslog("status: cStatusTest::OsdItem  %s %d", Text, Index);
+  dsyslog("status: cStatusTest::OsdItem2  %s %d %d", Text, Index, Selected);
 }
 
-void cStatusTest::OsdCurrentItem(const char *Text)
+void cStatusTest::OsdCurrentItem2(const char *Text, int Index)
 {
-  dsyslog("status: cStatusTest::OsdCurrentItem %s", Text);
+  dsyslog("status: cStatusTest::OsdCurrentItem %s %d", Text, Index);
 }
 
 void cStatusTest::OsdTextItem(const char *Text, bool Scroll)
