Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp	(revision 86746)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp	(revision 86747)
@@ -17,4 +17,5 @@
 
 /* Qt includes: */
+#include <QComboBox>
 #include <QDateTime>
 #include <QDir>
@@ -28,4 +29,5 @@
 #include <QMenu>
 #include <QScrollBar>
+#include <QSpacerItem>
 #include <QStyle>
 #include <QSplitter>
@@ -60,4 +62,13 @@
 Q_DECLARE_METATYPE(HelpBrowserTabs);
 
+class UIHelpBrowserAddressBar : public QComboBox
+{
+    Q_OBJECT;
+
+public:
+    UIHelpBrowserAddressBar(QWidget *pParent = 0);
+
+};
+
 class UIHelpBrowserViewer : public QTextBrowser
 {
@@ -68,4 +79,9 @@
     UIHelpBrowserViewer(const QHelpEngine *pHelpEngine, QWidget *pParent = 0);
     virtual QVariant loadResource(int type, const QUrl &name) /* override */;
+    void emitHistoryChangedSignal();
+
+public slots:
+
+    //virtual void setSource(const QUrl &name) /* override */;
 
 private:
@@ -75,4 +91,9 @@
 #endif
 };
+
+UIHelpBrowserAddressBar::UIHelpBrowserAddressBar(QWidget *pParent /* = 0 */)
+    :QComboBox(pParent)
+{
+}
 
 UIHelpBrowserViewer::UIHelpBrowserViewer(const QHelpEngine *pHelpEngine, QWidget *pParent /* = 0 */)
@@ -99,4 +120,9 @@
 }
 
+void UIHelpBrowserViewer::emitHistoryChangedSignal()
+{
+    emit historyChanged();
+    emit backwardAvailable(true);
+}
 
 UIHelpBrowserWidget::UIHelpBrowserWidget(EmbedTo enmEmbedding,
@@ -109,4 +135,5 @@
     , m_fIsPolished(false)
     , m_pMainLayout(0)
+    , m_pTopLayout(0)
     , m_pTabWidget(0)
     , m_pToolBar(0)
@@ -115,4 +142,5 @@
     , m_pHelpEngine(0)
 #endif
+    , m_pAddressBar(0)
     , m_pContentViewer(0)
     , m_pSplitter(0)
@@ -227,4 +255,6 @@
     connect(m_pContentViewer, &UIHelpBrowserViewer::sourceChanged,
         this, &UIHelpBrowserWidget::sltHandleHelpBrowserViewerSourceChange);
+    connect(m_pContentViewer, &UIHelpBrowserViewer::historyChanged,
+        this, &UIHelpBrowserWidget::sltHandleHistoryChanged);
 
     m_pSplitter->addWidget(m_pContentViewer);
@@ -249,7 +279,8 @@
 #endif
 }
-
+#include <QPushButton>
 void UIHelpBrowserWidget::prepareToolBar()
 {
+    m_pTopLayout = new QHBoxLayout;
     /* Create toolbar: */
     m_pToolBar = new QIToolBar(parentWidget());
@@ -269,11 +300,20 @@
         {
             /* Add into layout: */
-            m_pMainLayout->addWidget(m_pToolBar);
+            m_pTopLayout->addWidget(m_pToolBar);
+            m_pMainLayout->addLayout(m_pTopLayout);
         }
 #else
         /* Add into layout: */
-        m_pMainLayout->addWidget(m_pToolBar);
-#endif
-    }
+        m_pTopLayout->addWidget(m_pToolBar);
+        m_pMainLayout->addLayout(m_pTopLayout);
+#endif
+    }
+    m_pAddressBar = new UIHelpBrowserAddressBar();
+    m_pAddressBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    m_pTopLayout->addWidget(m_pAddressBar);
+    connect(m_pAddressBar, static_cast<void(UIHelpBrowserAddressBar::*)(int)>(&UIHelpBrowserAddressBar::currentIndexChanged),
+            this, &UIHelpBrowserWidget::sltHandleAddressBarIndexChanged);
+
+    //m_pTopLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed));
 }
 
@@ -299,5 +339,8 @@
         {
             if (m_pHelpEngine->findFile(url).isValid())
+            {
                 m_pContentViewer->setSource(url);
+                m_pContentViewer->clearHistory();
+            }
             else
                 show404Error(url);
@@ -469,4 +512,6 @@
     m_pContentViewer->setSource(url);
     m_pContentViewer->blockSignals(false);
+    /* emit historyChanged signal explicitly since we have blocked the signals: */
+    m_pContentViewer->emitHistoryChangedSignal();
 #else
     Q_UNUSED(index);
@@ -537,3 +582,40 @@
 }
 
+void UIHelpBrowserWidget::sltHandleHistoryChanged()
+{
+    if (!m_pContentViewer)
+        return;
+    int iCurrentIndex = 0;
+    /* QTextBrower history has negative and positive indices for bacward and forward items, respectively.
+     * 0 is the current item: */
+    m_pAddressBar->blockSignals(true);
+    m_pAddressBar->clear();
+    for (int i = -1 * m_pContentViewer->backwardHistoryCount(); i <= m_pContentViewer->forwardHistoryCount(); ++i)
+    {
+        m_pAddressBar->addItem(m_pContentViewer->historyTitle(i), i);
+        if (i == 0)
+            iCurrentIndex = m_pAddressBar->count();
+    }
+    /* Make sure address bar show the current item: */
+    m_pAddressBar->setCurrentIndex(iCurrentIndex - 1);
+    m_pAddressBar->blockSignals(false);
+}
+
+void UIHelpBrowserWidget::sltHandleAddressBarIndexChanged(int iIndex)
+{
+    if (!m_pAddressBar && iIndex >= m_pAddressBar->count())
+        return;
+    int iHistoryIndex = m_pAddressBar->itemData(iIndex).toInt();
+    /* There seems to be no way to one-step-jump to a history item: */
+    if (iHistoryIndex == 0)
+        return;
+    else if (iHistoryIndex > 0)
+        for (int i = 0; i < iHistoryIndex; ++i)
+            m_pContentViewer->forward();
+    else
+        for (int i = 0; i > iHistoryIndex ; --i)
+            m_pContentViewer->backward();
+
+}
+
 #include "UIHelpBrowserWidget.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h	(revision 86746)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h	(revision 86747)
@@ -37,4 +37,5 @@
 
 /* Forward declarations: */
+class QHBoxLayout;
 class QVBoxLayout;
 class QHelpEngine;
@@ -48,4 +49,5 @@
 class UIActionPool;
 class UIDialogPanel;
+class UIHelpBrowserAddressBar;
 class UIHelpBrowserViewer;
 
@@ -89,4 +91,6 @@
     void sltHandleForwardAvailable(bool fAvailable);
     void sltHandleBackwardAvailable(bool fAvailable);
+    void sltHandleHistoryChanged();
+    void sltHandleAddressBarIndexChanged(int index);
 
 private:
@@ -126,4 +130,6 @@
     /** Holds container for log-pages. */
     QVBoxLayout         *m_pMainLayout;
+    QHBoxLayout         *m_pTopLayout;
+
     QITabWidget *m_pTabWidget;
     /** @name Toolbar and menu variables.
@@ -136,4 +142,5 @@
     QHelpEngine  *m_pHelpEngine;
 #endif
+    UIHelpBrowserAddressBar *m_pAddressBar;
     UIHelpBrowserViewer *m_pContentViewer;
     QSplitter           *m_pSplitter;
