Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(Revision 14499)
+++ libs/libmythtv/tv_play.cpp	(Arbeitskopie)
@@ -383,6 +383,7 @@
     REG_KEY("TV Playback", "PLAY", "Play", "Ctrl+P");
     REG_KEY("TV Playback", "JUMPPREV", "Jump to previously played recording", "");
     REG_KEY("TV Playback", "JUMPREC", "Display menu of recorded programs to jump to", "");
+    REG_KEY("TV Playback", "LINKMENU", "Display linked channels", "F1");
     REG_KEY("TV Playback", "SIGNALMON", "Monitor Signal Quality", "F7");
     REG_KEY("TV Playback", "JUMPTODVDROOTMENU", "Jump to the DVD Root Menu", "");
     REG_KEY("TV Playback", "EXITSHOWNOPROMPTS","Exit Show without any prompts", "");
@@ -540,7 +541,8 @@
       // RingBuffers
       prbuffer(NULL), piprbuffer(NULL), activerbuffer(NULL),
       // OSD info
-      dialogname(""), treeMenu(NULL), udpnotify(NULL), osdlock(true),
+      dialogname(""), treeMenu(NULL), linkMenu(NULL),
+      udpnotify(NULL), osdlock(true),
       // LCD Info
       lcdTitle(""), lcdSubtitle(""), lcdCallsign(""),
       // Window info (GUI is optional, transcoding, preview img, etc)
@@ -734,6 +736,9 @@
     if (treeMenu)
         delete treeMenu;
 
+    if (linkMenu)
+        delete linkMenu;
+
     if (playbackinfo)
         delete playbackinfo;
 
@@ -3106,6 +3111,8 @@
                 else
                     ChangeChannel(CHANNEL_DIRECTION_DOWN);
             }
+            else if (action == "LINKMENU")
+                ShowOSDLinkMenu();
             else if (action == "TOGGLEEDIT")
                 StartChannelEditMode();
             else
@@ -5107,7 +5114,8 @@
 
     // Collect channel info
     pbinfoLock.lock();
-    uint    chanid  = playbackinfo->chanid.toUInt();
+    bool using_channum_for_startchannel = gContext->GetNumSetting("EPGUseChanNum",false);
+    uint    chanid  = (using_channum_for_startchannel) ? 0 : playbackinfo->chanid.toUInt();
     QString channum = playbackinfo->chanstr;
     pbinfoLock.unlock();
 
@@ -6628,6 +6636,10 @@
          else if (RunPlaybackBoxPtr)
             EditSchedule(kPlaybackBox);
     }
+    else if (action.left(8) == "JUMPLINK")
+    {
+        ChangeChannel(action.section(" ",1,1).toInt(),"");
+    }
     else if (StateIsLiveTV(GetState()))
     {
         if (action == "TOGGLEPIPMODE")
@@ -6719,6 +6731,29 @@
     }
 }
 
+void TV::ShowOSDLinkMenu(void)
+{
+    if (linkMenu)
+        delete linkMenu;
+
+    linkMenu = new OSDGenericTree(NULL, "linkMenu");
+
+    if (GetOSD() && FillLinkMenu(linkMenu))
+    {
+    	ClearOSD();
+
+        OSDListTreeType *tree = GetOSD()->ShowTreeMenu("linkmenu", linkMenu);
+        if (tree)
+        {
+            connect(tree, SIGNAL(itemSelected(OSDListTreeType *,OSDGenericTree *)), 
+                    this, SLOT(TreeMenuSelected(OSDListTreeType *, OSDGenericTree *)));
+
+            connect(tree, SIGNAL(itemEntered(OSDListTreeType *, OSDGenericTree *)),
+                    this, SLOT(TreeMenuEntered(OSDListTreeType *, OSDGenericTree *)));
+        }
+    }
+}
+
 void TV::BuildOSDTreeMenu(void)
 {
     if (treeMenu)
@@ -7840,4 +7875,38 @@
     }  
 }
 
+bool TV::FillLinkMenu(OSDGenericTree *linkMenu)
+{
+    uint chanid = 0;
+
+    chanid = playbackinfo->chanid.toUInt();
+    MSqlQuery query(MSqlQuery::InitCon());
+    query.prepare("SELECT linkage2.chanid,linkage2.subevent,program.title "
+                      "FROM linkage AS linkage1,linkage AS linkage2,program "
+                      "WHERE linkage1.chanid=:CHANID "
+                      "AND   linkage1.portal_chanid=linkage2.portal_chanid "
+                      "AND   linkage2.chanid = program.chanid "
+                      "AND   program.starttime<now() "
+                      "AND   program.endtime>now() "
+                      "ORDER BY linkage2.linknr");
+
+    query.bindValue(":CHANID", chanid);
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythContext::DBError("GetLinkage", query);
+        return false;
+    }
+
+    if (query.size() == 0)
+        return false;
+
+    while (query.next()) {
+        new OSDGenericTree(
+            linkMenu, QString::fromUtf8(query.value(1).toString()+":"+query.value(2).toString()), QString("JUMPLINK %1").arg(query.value(0).toString()));
+    }
+
+    return true;
+}
+
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
Index: libs/libmythtv/tv_play.h
===================================================================
--- libs/libmythtv/tv_play.h	(Revision 14499)
+++ libs/libmythtv/tv_play.h	(Arbeitskopie)
@@ -360,6 +360,9 @@
     void BuildOSDTreeMenu(void);
     void ShowOSDTreeMenu(void);
 
+    void ShowOSDLinkMenu(void);
+    bool FillLinkMenu(OSDGenericTree *linkMenu);
+
     void UpdateLCD(void);
     void ShowLCDChannelInfo(void);
     void ShowLCDDVDInfo(void);
@@ -575,6 +578,7 @@
     // OSD info
     QString         dialogname; ///< Name of current OSD dialog
     OSDGenericTree *treeMenu;   ///< OSD menu, 'm' using default keybindings
+    OSDGenericTree *linkMenu;   ///< OSD link menu, 'F1' using default keybindings 
     MythTimer  dialogboxTimer;  ///< How long a dialog box is on the screen
 
     /// UDPNotify instance which shows messages sent
Index: themes/defaultosd/osd.xml
===================================================================
--- themes/defaultosd/osd.xml	(Revision 14499)
+++ themes/defaultosd/osd.xml	(Arbeitskopie)
@@ -345,4 +345,18 @@
     </textarea>
   </container>
 
+  <container name="linkmenu">
+    <listtreemenu name="menu">
+      <area>20,250,620,300</area>
+      <listsize>0,0,600,200</listsize>
+      <leveloffset>10</leveloffset>
+      <gradient type="unselected" start="#505050" end="#000000" alpha="150">
+      </gradient>
+      <gradient type="selected" start="#52CA38" end="#349838" alpha="255">
+      </gradient>
+      <fcnfont name="infofont" function="active"></fcnfont>
+      <fcnfont name="infofontgray" function="inactive"></fcnfont>
+    </listtreemenu>
+  </container>
+
 </mythosdtheme>
Index: themes/blueosd/osd.xml
===================================================================
--- themes/blueosd/osd.xml	(Revision 14499)
+++ themes/blueosd/osd.xml	(Arbeitskopie)
@@ -349,6 +349,19 @@
       <fcnfont name="infofontgray" function="inactive"></fcnfont>
     </listtreemenu>
   </container>
+
+  <container name="linkmenu">
+    <listtreemenu name="menu">
+      <area>20,250,620,300</area>
+      <listsize>0,0,600,200</listsize>
+      <leveloffset>10</leveloffset>
+      <gradient type="unselected" start="#505050" end="#000000" alpha="100">
+      </gradient>
+      <gradient type="selected" start="#52CA38" end="#349838" alpha="255">
+      </gradient>
+      <fcnfont name="infofont" function="active"></fcnfont>
+      <fcnfont name="infofontgray" function="inactive"></fcnfont>
+    </listtreemenu>
+  </container>
     
-
 </mythosdtheme>

