Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp	(revision 88521)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.cpp	(revision 88522)
@@ -183,4 +183,5 @@
 
     void sigSourceChanged(const QUrl &url);
+    void sigCopyAvailableChanged(bool fAvailable);
     void sigTitleUpdate(const QString &strTitle);
     void sigOpenLinkInNewTab(const QUrl &url, bool fBackground);
@@ -188,4 +189,5 @@
     void sigLinkHighlighted(const QString &strLink);
     void sigZoomPercentageChanged(int iPercentage);
+    void sigFindInPageWidgetVisibilityChanged(bool fVisible);
 
 public:
@@ -203,4 +205,11 @@
     void setZoomPercentage(int iZoomPercentage);
     void setHelpFileList(const QList<QUrl> &helpFileList);
+    void copySelectedText() const;
+    bool hasSelectedText() const;
+    bool isFindInPageWidgetVisible() const;
+
+public slots:
+
+    void sltHandleFindInPageAction(bool fToggled);
 
 private slots:
@@ -209,10 +218,9 @@
     void sltHandleForwardAction();
     void sltHandleBackwardAction();
-    void sltHandleFindInPageAction(bool fToggled);
     void sltHandleHistoryChanged();
     void sltHandleAddressBarIndexChanged(int index);
     void sltHandleAddBookmarkAction();
     void sltAnchorClicked(const QUrl &link);
-    void sltCloseFindInPageWidget();
+    void sltFindInPageWidgetVisibilityChanged(bool  fVisible);
 
 private:
@@ -255,4 +263,6 @@
     void sigLinkHighlighted(const QString &strLink);
     void sigZoomPercentageChanged(int iPercentage);
+    void sigCopyAvailableChanged(bool fAvailable);
+    void sigFindInPageWidgetVisibilityChanged(bool fVisible);
 
 public:
@@ -277,4 +287,8 @@
     void setZoomPercentage(int iZoomPercentage);
     void setHelpFileList(const QList<QUrl> &helpFileList);
+    void copySelectedText() const;
+    bool hasCurrentTabSelectedText() const;
+    bool isFindInPageWidgetVisible() const;
+    void toggleFindInPage(bool fTrigger);
 
 public slots:
@@ -293,4 +307,5 @@
     void sltShowTabBarContextMenu(const QPoint &pos);
     void sltHandleCloseOtherTabsContextMenuAction();
+    void sltCopyAvailableChanged(bool fAvailable);
 
 private:
@@ -599,4 +614,24 @@
 }
 
+void UIHelpBrowserTab::copySelectedText() const
+{
+    if (m_pContentViewer && m_pContentViewer->hasSelectedText())
+        m_pContentViewer->copy();
+}
+
+bool UIHelpBrowserTab::hasSelectedText() const
+{
+    if (m_pContentViewer)
+        return m_pContentViewer->textCursor().hasSelection();
+    return false;
+}
+
+bool UIHelpBrowserTab::isFindInPageWidgetVisible() const
+{
+    if (m_pContentViewer)
+        return m_pContentViewer->isFindInPageWidgetVisible();
+    return false;
+}
+
 int UIHelpBrowserTab::zoomPercentage() const
 {
@@ -632,6 +667,4 @@
     connect(m_pContentViewer, &UIHelpViewer::sigOpenLinkInNewTab,
         this, &UIHelpBrowserTab::sigOpenLinkInNewTab);
-    connect(m_pContentViewer, &UIHelpViewer::sigCloseFindInPageWidget,
-            this, &UIHelpBrowserTab::sltCloseFindInPageWidget);
     connect(m_pContentViewer, &UIHelpViewer::sigGoBackward,
             this, &UIHelpBrowserTab::sltHandleBackwardAction);
@@ -646,4 +679,8 @@
     connect(m_pContentViewer, &UIHelpViewer::sigZoomPercentageChanged,
             this, &UIHelpBrowserTab::sigZoomPercentageChanged);
+    connect(m_pContentViewer, &UIHelpViewer::copyAvailable,
+            this, &UIHelpBrowserTab::sigCopyAvailableChanged);
+    connect(m_pContentViewer, &UIHelpViewer::sigFindInPageWidgetToogle,
+            this, &UIHelpBrowserTab::sltFindInPageWidgetVisibilityChanged);
 
     m_pContentViewer->setSource(initialUrl);
@@ -737,5 +774,5 @@
 {
     if (m_pContentViewer)
-        m_pContentViewer->sltToggleFindInPageWidget(fToggled);
+        m_pContentViewer->toggleFindInPageWidget(fToggled);
 }
 
@@ -795,10 +832,14 @@
 }
 
-void UIHelpBrowserTab::sltCloseFindInPageWidget()
+void UIHelpBrowserTab::sltFindInPageWidgetVisibilityChanged(bool fVisible)
 {
     if (m_pFindInPageAction)
-        m_pFindInPageAction->setChecked(false);
-}
-
+    {
+        m_pFindInPageAction->blockSignals(true);
+        m_pFindInPageAction->setChecked(fVisible);
+        m_pFindInPageAction->blockSignals(false);
+    }
+    emit sigFindInPageWidgetVisibilityChanged(fVisible);
+}
 
 /*********************************************************************************************************************************
@@ -845,4 +886,8 @@
     connect(pTabWidget, &UIHelpBrowserTab::sigLinkHighlighted,
             this, &UIHelpBrowserTabManager::sigLinkHighlighted);
+    connect(pTabWidget, &UIHelpBrowserTab::sigCopyAvailableChanged,
+            this, &UIHelpBrowserTabManager::sltCopyAvailableChanged);
+    connect(pTabWidget, &UIHelpBrowserTab::sigFindInPageWidgetVisibilityChanged,
+            this, &UIHelpBrowserTabManager::sigFindInPageWidgetVisibilityChanged);
 
     pTabWidget->setZoomPercentage(zoomPercentage());
@@ -1008,4 +1053,35 @@
 }
 
+void UIHelpBrowserTabManager::copySelectedText() const
+{
+    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
+    if (!pTab)
+        return;
+    return pTab->copySelectedText();
+}
+
+bool UIHelpBrowserTabManager::hasCurrentTabSelectedText() const
+{
+    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
+    if (!pTab)
+        return false;
+    return pTab->hasSelectedText();
+}
+
+bool UIHelpBrowserTabManager::isFindInPageWidgetVisible() const
+{
+    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
+    if (!pTab)
+        return false;
+    return pTab->isFindInPageWidgetVisible();
+}
+
+void UIHelpBrowserTabManager::toggleFindInPage(bool fTrigger)
+{
+    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
+    if (pTab)
+        pTab->sltHandleFindInPageAction(fTrigger);
+}
+
 void UIHelpBrowserTabManager::sltHandletabTitleChange(const QString &strTitle)
 {
@@ -1027,4 +1103,12 @@
         addNewTab(url, fBackground);
     updateTabUrlTitleList();
+}
+
+void UIHelpBrowserTabManager::sltCopyAvailableChanged(bool fAvailable)
+{
+    UIHelpBrowserTab *pTab = qobject_cast<UIHelpBrowserTab*>(currentWidget());
+    /* Emit coresponding signal only if sender is the current tab: */
+    if (pTab && sender() == pTab)
+        emit sigCopyAvailableChanged(fAvailable);
 }
 
@@ -1147,4 +1231,5 @@
     , m_pSplitter(0)
     , m_pFileMenu(0)
+    , m_pEditMenu(0)
     , m_pViewMenu(0)
     , m_pTabsMenu(0)
@@ -1162,4 +1247,6 @@
     , m_pShowHideToolBarAction(0)
     , m_pShowHideStatusBarAction(0)
+    , m_pCopySelectedTextAction(0)
+    , m_pFindInPageAction(0)
     , m_pZoomMenuAction(0)
     , m_fModelContentCreated(false)
@@ -1181,4 +1268,5 @@
     menuList
         << m_pFileMenu
+        << m_pEditMenu
         << m_pViewMenu
         << m_pTabsMenu;
@@ -1237,4 +1325,15 @@
             this, &UIHelpBrowserWidget::sltHandleWidgetVisibilityToggle);
 
+    m_pCopySelectedTextAction = new QAction(this);
+    connect(m_pCopySelectedTextAction, &QAction::triggered,
+            this, &UIHelpBrowserWidget::sltCopySelectedText);
+    m_pCopySelectedTextAction->setShortcut(QString("Ctrl+C"));
+
+    m_pFindInPageAction = new QAction(this);
+    m_pFindInPageAction->setCheckable(true);
+    m_pFindInPageAction->setChecked(false);
+    connect(m_pFindInPageAction, &QAction::triggered,
+            this, &UIHelpBrowserWidget::sltFindInPage);
+    m_pFindInPageAction->setShortcut(QString("Ctrl+F"));
 
     m_pPrintAction = new QAction(this);
@@ -1289,5 +1388,5 @@
 
     connect(m_pTabManager, &UIHelpBrowserTabManager::sigSourceChanged,
-            this, &UIHelpBrowserWidget::sltHandleHelpBrowserViewerSourceChange);
+            this, &UIHelpBrowserWidget::sltViewerSourceChange);
     connect(m_pTabManager, &UIHelpBrowserTabManager::sigAddBookmark,
             this, &UIHelpBrowserWidget::sltAddNewBookmark);
@@ -1300,4 +1399,8 @@
     connect(m_pTabManager, &UIHelpBrowserTabManager::sigZoomPercentageChanged,
             this, &UIHelpBrowserWidget::sltZoomPercentageChanged);
+    connect(m_pTabManager, &UIHelpBrowserTabManager::sigCopyAvailableChanged,
+            this, &UIHelpBrowserWidget::sltCopyAvailableChanged);
+    connect(m_pTabManager, &UIHelpBrowserTabManager::sigFindInPageWidgetVisibilityChanged,
+            this, &UIHelpBrowserWidget::sltFindInPageWidgetVisibilityChanged);
 
     connect(m_pHelpEngine, &QHelpEngine::setupFinished,
@@ -1386,4 +1489,5 @@
 {
     m_pFileMenu = new QMenu(tr("&File"), this);
+    m_pEditMenu = new QMenu(tr("&Edit"), this);
     m_pViewMenu = new QMenu(tr("&View"), this);
     m_pTabsMenu = new QMenu(tr("&Tabs"), this);
@@ -1395,4 +1499,9 @@
     if (m_pQuitAction)
         m_pFileMenu->addAction(m_pQuitAction);
+
+    if (m_pCopySelectedTextAction)
+        m_pEditMenu->addAction(m_pCopySelectedTextAction);
+    if(m_pFindInPageAction)
+        m_pEditMenu->addAction(m_pFindInPageAction);
 
     if (m_pZoomMenuAction)
@@ -1531,4 +1640,9 @@
     if (m_pQuitAction)
         m_pQuitAction->setText(tr("&Quit"));
+
+    if (m_pCopySelectedTextAction)
+        m_pCopySelectedTextAction->setText(tr("&Copy Selected Text"));
+    if (m_pFindInPageAction)
+        m_pFindInPageAction->setText(tr("&Find in Page"));
 }
 
@@ -1572,4 +1686,32 @@
     else if (sender() == m_pShowHideStatusBarAction)
         emit sigStatusBarVisible(fToggled);
+}
+
+void UIHelpBrowserWidget::sltCopySelectedText()
+{
+    if (m_pTabManager)
+        m_pTabManager->copySelectedText();
+}
+
+void UIHelpBrowserWidget::sltFindInPage(bool fChecked)
+{
+    if (m_pTabManager)
+        m_pTabManager->toggleFindInPage(fChecked);
+}
+
+void UIHelpBrowserWidget::sltCopyAvailableChanged(bool fAvailable)
+{
+    if (m_pCopySelectedTextAction)
+        m_pCopySelectedTextAction->setEnabled(fAvailable);
+}
+
+void UIHelpBrowserWidget::sltFindInPageWidgetVisibilityChanged(bool fVisible)
+{
+    if (m_pFindInPageAction)
+    {
+        m_pFindInPageAction->blockSignals(true);
+        m_pFindInPageAction->setChecked(fVisible);
+        m_pFindInPageAction->blockSignals(false);
+    }
 }
 
@@ -1605,5 +1747,5 @@
 }
 
-void UIHelpBrowserWidget::sltHandleHelpBrowserViewerSourceChange(const QUrl &source)
+void UIHelpBrowserWidget::sltViewerSourceChange(const QUrl &source)
 {
     if (m_fModelContentCreated && m_pContentWidget && source.isValid() && m_pContentModel)
@@ -1626,5 +1768,5 @@
     m_fModelContentCreated = true;
     if (m_pTabManager)
-        sltHandleHelpBrowserViewerSourceChange(m_pTabManager->currentSource());
+        sltViewerSourceChange(m_pTabManager->currentSource());
 }
 
@@ -1834,4 +1976,12 @@
         return;
     list[iIndex+3]->setIcon(UIIconPool::iconSet(":/help_browser_star_16px.png"));
+
+    if (m_pTabManager)
+    {
+        if (m_pCopySelectedTextAction)
+            m_pCopySelectedTextAction->setEnabled(m_pTabManager->hasCurrentTabSelectedText());
+        if (m_pFindInPageAction)
+            m_pFindInPageAction->setChecked(m_pTabManager->isFindInPageWidgetVisible());
+    }
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h	(revision 88521)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpBrowserWidget.h	(revision 88522)
@@ -85,5 +85,5 @@
     void sltHandleSearchingStarted();
     void sltHandleSearchStart();
-    void sltHandleHelpBrowserViewerSourceChange(const QUrl &source);
+    void sltViewerSourceChange(const QUrl &source);
     void sltOpenLinkWithUrl(const QUrl &url);
     void sltShowLinksContextMenu(const QPoint &pos);
@@ -97,4 +97,8 @@
     void sltHandleCurrentTabChanged(int iIndex);
     void sltZoomPercentageChanged(int iPercentage);
+    void sltCopySelectedText();
+    void sltCopyAvailableChanged(bool fAvailable);
+    void sltFindInPage(bool fChecked);
+    void sltFindInPageWidgetVisibilityChanged(bool fVisible);
 
 private:
@@ -152,4 +156,5 @@
     QSplitter           *m_pSplitter;
     QMenu               *m_pFileMenu;
+    QMenu               *m_pEditMenu;
     QMenu               *m_pViewMenu;
     QMenu               *m_pTabsMenu;
@@ -168,4 +173,6 @@
     QAction             *m_pShowHideToolBarAction;
     QAction             *m_pShowHideStatusBarAction;
+    QAction             *m_pCopySelectedTextAction;
+    QAction             *m_pFindInPageAction;
     UIZoomMenuAction    *m_pZoomMenuAction;
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.cpp	(revision 88521)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.cpp	(revision 88522)
@@ -354,5 +354,5 @@
             this, &UIHelpViewer::sltSelectNextMatch);
     connect(m_pFindInPageWidget, &UIFindInPageWidget::sigClose,
-            this, &UIHelpViewer::sigCloseFindInPageWidget);
+            this, &UIHelpViewer::sltCloseFindInPageWidget);
 
     m_defaultCursor = cursor();
@@ -408,8 +408,9 @@
 }
 
-void UIHelpViewer::sltToggleFindInPageWidget(bool fVisible)
+void UIHelpViewer::toggleFindInPageWidget(bool fVisible)
 {
     if (!m_pFindInPageWidget)
         return;
+
     /* Closing the find in page widget causes QTextBrowser to jump to the top of the document. This hack puts it back into position: */
     int iPosition = verticalScrollBar()->value();
@@ -432,4 +433,16 @@
     else
         m_pFindInPageWidget->setFocus();
+    emit sigFindInPageWidgetToogle(fVisible);
+}
+
+void UIHelpViewer::sltToggleFindInPageWidget(bool fVisible)
+{
+    clearOverlay();
+    toggleFindInPageWidget(fVisible);
+}
+
+void UIHelpViewer::sltCloseFindInPageWidget()
+{
+    sltToggleFindInPageWidget(false);
 }
 
@@ -494,7 +507,7 @@
 }
 
-bool UIHelpViewer::isInOverlayMode() const
-{
-    return m_fOverlayMode;
+bool UIHelpViewer::hasSelectedText() const
+{
+    return textCursor().hasSelection();
 }
 
@@ -993,8 +1006,10 @@
             viewport()->setCursor(m_defaultCursor);
             emit sigOverlayModeChanged(true);
+            toggleFindInPageWidget(false);
         }
     }
 }
 
+
 #include "UIHelpViewer.moc"
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.h	(revision 88521)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/helpbrowser/UIHelpViewer.h	(revision 88522)
@@ -44,5 +44,5 @@
 
     void sigOpenLinkInNewTab(const QUrl &url, bool fBackground);
-    void sigCloseFindInPageWidget();
+    void sigFindInPageWidgetToogle(bool fVisible);
     void sigFontPointSizeChanged(int iFontPointSize);
     void sigGoBackward();
@@ -73,11 +73,7 @@
     void setZoomPercentage(int iZoomPercentage);
     void setHelpFileList(const QList<QUrl> &helpFileList);
-    bool isInOverlayMode() const;
-
+    bool hasSelectedText() const;
     static const QPair<int, int> zoomPercentageMinMax;
-
-public slots:
-
-    void sltToggleFindInPageWidget(bool fVisible);
+    void toggleFindInPageWidget(bool fVisible);
 
 protected:
@@ -103,4 +99,6 @@
     void sltSelectPreviousMatch();
     void sltSelectNextMatch();
+    void sltToggleFindInPageWidget(bool fVisible);
+    void sltCloseFindInPageWidget();
 
 private:
@@ -110,5 +108,4 @@
         qreal m_fInitialWidth;
         qreal m_fScaledWidth;
-        //int m_iPosition;
         QTextCursor m_textCursor;
         QPixmap m_pixmap;
