diff options
author | Eike Ziller <eike.ziller@qt.io> | 2016-09-09 15:37:01 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2016-09-23 11:26:07 +0000 |
commit | a416a5b6e3e0d0c038276f1093cc5a1a770c3d5c (patch) | |
tree | 0e17342fcaba4a066e8348dc8c51f28bae9f2db2 | |
parent | 2cd307a7b007ef7752d0797d6e99492e797fa0a2 (diff) | |
download | qt-creator-a416a5b6e3e0d0c038276f1093cc5a1a770c3d5c.tar.gz |
Help: Option to open links in window
Task-number: QTCREATORBUG-16842
Change-Id: I420f48a00c56ebc89bade7e91ceb8ec391316e36
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
-rw-r--r-- | src/plugins/help/helpconstants.h | 3 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.cpp | 15 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.h | 7 | ||||
-rw-r--r-- | src/plugins/help/helpviewer.cpp | 13 | ||||
-rw-r--r-- | src/plugins/help/helpviewer.h | 13 | ||||
-rw-r--r-- | src/plugins/help/helpwidget.cpp | 13 | ||||
-rw-r--r-- | src/plugins/help/macwebkithelpviewer.h | 5 | ||||
-rw-r--r-- | src/plugins/help/macwebkithelpviewer.mm | 71 | ||||
-rw-r--r-- | src/plugins/help/textbrowserhelpviewer.cpp | 33 | ||||
-rw-r--r-- | src/plugins/help/textbrowserhelpviewer.h | 3 | ||||
-rw-r--r-- | src/plugins/help/webenginehelpviewer.cpp | 61 | ||||
-rw-r--r-- | src/plugins/help/webenginehelpviewer.h | 11 |
12 files changed, 153 insertions, 95 deletions
diff --git a/src/plugins/help/helpconstants.h b/src/plugins/help/helpconstants.h index a832eb29b2..8e3fbb88e2 100644 --- a/src/plugins/help/helpconstants.h +++ b/src/plugins/help/helpconstants.h @@ -63,5 +63,8 @@ static const char SB_BOOKMARKS[] = QT_TRANSLATE_NOOP("Help::Internal::HelpPlugin static const char SB_OPENPAGES[] = QT_TRANSLATE_NOOP("Help::Internal::HelpPlugin", "Open Pages"); static const char SB_SEARCH[] = QT_TRANSLATE_NOOP("Help::Internal::HelpPlugin", "Search"); +static const char TR_OPEN_LINK_AS_NEW_PAGE[] = QT_TRANSLATE_NOOP("HelpViewer", "Open Link as New Page"); +static const char TR_OPEN_LINK_IN_WINDOW[] = QT_TRANSLATE_NOOP("HelpViewer", "Open Link in Window"); + } // Constants } // Help diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 102870d3ba..d02e690f66 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -108,6 +108,8 @@ static const char kToolTipHelpContext[] = "Help.ToolTip"; using namespace Core; using namespace Utils; +static HelpPlugin *m_instance = nullptr; + HelpPlugin::HelpPlugin() : m_mode(0), m_centralWidget(0), @@ -116,6 +118,7 @@ HelpPlugin::HelpPlugin() m_helpManager(0), m_openPagesManager(0) { + m_instance = this; } HelpPlugin::~HelpPlugin() @@ -476,7 +479,7 @@ void HelpPlugin::setupHelpEngineIfNeeded() LocalHelpManager::setupGuiHelpEngine(); } -bool HelpPlugin::canShowHelpSideBySide() const +bool HelpPlugin::canShowHelpSideBySide() { RightPanePlaceHolder *placeHolder = RightPanePlaceHolder::current(); if (!placeHolder) @@ -503,19 +506,19 @@ HelpViewer *HelpPlugin::viewerForHelpViewerLocation(HelpManager::HelpViewerLocat : HelpManager::HelpModeAlways; if (actualLocation == HelpManager::ExternalHelpAlways) - return externalHelpViewer(); + return m_instance->externalHelpViewer(); if (actualLocation == HelpManager::SideBySideAlways) { - createRightPaneContextViewer(); - RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget); + m_instance->createRightPaneContextViewer(); + RightPaneWidget::instance()->setWidget(m_instance->m_rightPaneSideBarWidget); RightPaneWidget::instance()->setShown(true); - return m_rightPaneSideBarWidget->currentViewer(); + return m_instance->m_rightPaneSideBarWidget->currentViewer(); } QTC_CHECK(actualLocation == HelpManager::HelpModeAlways); activateHelpMode(); // should trigger an createPage... - HelpViewer *viewer = m_centralWidget->currentViewer(); + HelpViewer *viewer = m_instance->m_centralWidget->currentViewer(); if (!viewer) viewer = OpenPagesManager::instance().createPage(); return viewer; diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h index e2631afcad..206b56345c 100644 --- a/src/plugins/help/helpplugin.h +++ b/src/plugins/help/helpplugin.h @@ -75,6 +75,8 @@ public: void extensionsInitialized(); ShutdownFlag aboutToShutdown(); + static HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location); + static HelpViewer *createHelpViewer(qreal zoom); private: @@ -101,9 +103,8 @@ private: void slotSystemInformation(); void resetFilter(); - void activateHelpMode(); - bool canShowHelpSideBySide() const; - HelpViewer *viewerForHelpViewerLocation(Core::HelpManager::HelpViewerLocation location); + static void activateHelpMode(); + static bool canShowHelpSideBySide(); HelpViewer *viewerForContextHelp(); HelpWidget *createHelpWidget(const Core::Context &context, HelpWidget::WidgetStyle style); void createRightPaneContextViewer(); diff --git a/src/plugins/help/helpviewer.cpp b/src/plugins/help/helpviewer.cpp index ba640fee5d..ceb3e75680 100644 --- a/src/plugins/help/helpviewer.cpp +++ b/src/plugins/help/helpviewer.cpp @@ -86,6 +86,19 @@ HelpViewer::HelpViewer(QWidget *parent) { } +void HelpViewer::setActionVisible(Action action, bool visible) +{ + if (visible) + m_visibleActions |= Actions(action); + else + m_visibleActions &= ~Actions(action); +} + +bool HelpViewer::isActionVisible(HelpViewer::Action action) +{ + return (m_visibleActions & Actions(action)) != 0; +} + bool HelpViewer::isLocalUrl(const QUrl &url) { return url.scheme() == "about" // "No documenation available" diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h index 0cd0a08ed5..488bb0bc5e 100644 --- a/src/plugins/help/helpviewer.h +++ b/src/plugins/help/helpviewer.h @@ -42,6 +42,12 @@ class HelpViewer : public QWidget Q_OBJECT public: + enum class Action { + NewPage = 0x01, + ExternalWindow = 0x02 + }; + Q_DECLARE_FLAGS(Actions, Action) + explicit HelpViewer(QWidget *parent = 0); ~HelpViewer() { } @@ -65,7 +71,8 @@ public: virtual bool isBackwardAvailable() const = 0; virtual void addBackHistoryItems(QMenu *backMenu) = 0; virtual void addForwardHistoryItems(QMenu *forwardMenu) = 0; - virtual void setOpenInNewPageActionVisible(bool visible) = 0; + void setActionVisible(Action action, bool visible); + bool isActionVisible(Action action); virtual bool findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped = 0) = 0; @@ -95,10 +102,14 @@ signals: void forwardAvailable(bool); void backwardAvailable(bool); void loadFinished(); + void newPageRequested(const QUrl &url); + void externalPageRequested(const QUrl &url); protected: void slotLoadStarted(); void slotLoadFinished(); + + Actions m_visibleActions = 0; }; } // namespace Internal diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp index 8684e7272d..40697fc50f 100644 --- a/src/plugins/help/helpwidget.cpp +++ b/src/plugins/help/helpwidget.cpp @@ -417,8 +417,8 @@ void HelpWidget::addViewer(HelpViewer *viewer) { m_viewerStack->addWidget(viewer); viewer->setFocus(Qt::OtherFocusReason); - if (m_style == SideBarWidget || m_style == ExternalWindow) - viewer->setOpenInNewPageActionVisible(false); + viewer->setActionVisible(HelpViewer::Action::NewPage, m_style == ModeWidget); + viewer->setActionVisible(HelpViewer::Action::ExternalWindow, m_style != ExternalWindow); connect(viewer, &HelpViewer::sourceChanged, this, [viewer, this](const QUrl &url) { if (currentViewer() == viewer) emit sourceChanged(url); @@ -438,6 +438,15 @@ void HelpWidget::addViewer(HelpViewer *viewer) connect(viewer, &HelpViewer::titleChanged, this, &HelpWidget::updateWindowTitle); connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms); + connect(viewer, &HelpViewer::newPageRequested, [](const QUrl &url) { + OpenPagesManager::instance().createPage(url); + }); + connect(viewer, &HelpViewer::externalPageRequested, [](const QUrl &url) { + HelpViewer *viewer = HelpPlugin::viewerForHelpViewerLocation(Core::HelpManager::ExternalHelpAlways); + if (QTC_GUARD(viewer)) + viewer->setSource(url); + Core::ICore::raiseWindow(viewer); + }); updateCloseButton(); } diff --git a/src/plugins/help/macwebkithelpviewer.h b/src/plugins/help/macwebkithelpviewer.h index e66db6fa73..4086a5a26d 100644 --- a/src/plugins/help/macwebkithelpviewer.h +++ b/src/plugins/help/macwebkithelpviewer.h @@ -59,11 +59,10 @@ public: MacWebKitHelpWidget(MacWebKitHelpViewer *parent); ~MacWebKitHelpWidget(); - void setOpenInNewPageActionVisible(bool visible); - WebView *webView() const; void startToolTipTimer(const QPoint &pos, const QString &text); void hideToolTip(); + MacWebKitHelpViewer *viewer() const; protected: void hideEvent(QHideEvent *); @@ -102,7 +101,7 @@ public: bool isBackwardAvailable() const; void addBackHistoryItems(QMenu *backMenu); void addForwardHistoryItems(QMenu *forwardMenu); - void setOpenInNewPageActionVisible(bool visible); + void setActionVisible(bool visible); bool findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped = 0); diff --git a/src/plugins/help/macwebkithelpviewer.mm b/src/plugins/help/macwebkithelpviewer.mm index e6ec9ea620..ca9095b641 100644 --- a/src/plugins/help/macwebkithelpviewer.mm +++ b/src/plugins/help/macwebkithelpviewer.mm @@ -25,6 +25,7 @@ #include "macwebkithelpviewer.h" +#include "helpconstants.h" #include "localhelpmanager.h" #include "openpagesmanager.h" @@ -280,15 +281,15 @@ static void ensureProtocolHandler() Help::Internal::MacWebKitHelpWidget *widget; } -@property (assign) BOOL openInNewPageActionVisible; - - (id)initWithWidget:(Help::Internal::MacWebKitHelpWidget *)theWidget; - (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder; - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems; -- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request; - (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(NSUInteger)modifierFlags; + +- (void)openAsNewPage:(id)sender; +- (void)openInWindow:(id)sender; @end @implementation UIDelegate @@ -298,7 +299,6 @@ static void ensureProtocolHandler() self = [super init]; if (self) { widget = theWidget; - self.openInNewPageActionVisible = YES; } return self; } @@ -312,6 +312,16 @@ static void ensureProtocolHandler() } } +static NSMenuItem *menuItem(NSURL *url, id target, SEL action, const QString &title) +{ + NSMenuItem *openItem = [[NSMenuItem alloc] initWithTitle:title.toNSString() + action:action + keyEquivalent:@""]; + openItem.representedObject = url; + openItem.target = target; + return [openItem autorelease]; +} + - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems { @@ -335,11 +345,18 @@ static void ensureProtocolHandler() [ret addObject:item]; break; case WebMenuItemTagOpenLinkInNewWindow: - case WebMenuItemTagOpenImageInNewWindow: - if (self.openInNewPageActionVisible) { - item.title = QCoreApplication::translate("HelpViewer", "Open Link as New Page").toNSString(); - [ret addObject:item]; + case WebMenuItemTagOpenImageInNewWindow: { + NSURL *url = [element objectForKey:WebElementLinkURLKey]; + if (QTC_GUARD(url)) { + if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::NewPage)) + [ret addObject:menuItem(url, self, @selector(openAsNewPage:), + QCoreApplication::translate("HelpViewer", Help::Constants::TR_OPEN_LINK_AS_NEW_PAGE))]; + if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::ExternalWindow)) + [ret addObject:menuItem(url, self, @selector(openInWindow:), + QCoreApplication::translate("HelpViewer", Help::Constants::TR_OPEN_LINK_IN_WINDOW))]; } + break; + } default: break; } @@ -347,16 +364,6 @@ static void ensureProtocolHandler() return [ret autorelease]; } -- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request -{ - Q_UNUSED(sender) - Q_UNUSED(request) - Help::Internal::MacWebKitHelpViewer* viewer - = static_cast<Help::Internal::MacWebKitHelpViewer *>( - Help::Internal::OpenPagesManager::instance().createPage(QUrl())); - return viewer->widget()->webView(); -} - - (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(NSUInteger)modifierFlags { @@ -374,6 +381,16 @@ static void ensureProtocolHandler() QString::fromNSString(url.absoluteString)); } +- (void)openAsNewPage:(id)item +{ + widget->viewer()->newPageRequested(QUrl::fromNSURL([item representedObject])); +} + +- (void)openInWindow:(id)item +{ + widget->viewer()->externalPageRequested(QUrl::fromNSURL([item representedObject])); +} + @end // #pragma mark -- MyWebView @@ -420,8 +437,9 @@ namespace Internal { class MacWebKitHelpWidgetPrivate { public: - MacWebKitHelpWidgetPrivate() - : m_savedResponder(nil) + MacWebKitHelpWidgetPrivate(MacWebKitHelpViewer *parent) + : m_viewer(parent), + m_savedResponder(nil) { } @@ -432,6 +450,7 @@ public: [m_uiDelegate release]; } + MacWebKitHelpViewer *m_viewer; WebView *m_webView; FrameLoadDelegate *m_frameLoadDelegate; UIDelegate *m_uiDelegate; @@ -445,7 +464,7 @@ public: MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent) : QMacCocoaViewContainer(0, parent), - d(new MacWebKitHelpWidgetPrivate) + d(new MacWebKitHelpWidgetPrivate(parent)) { d->m_toolTipTimer.setSingleShot(true); connect(&d->m_toolTipTimer, &QTimer::timeout, this, &MacWebKitHelpWidget::showToolTip); @@ -462,6 +481,7 @@ MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent) setCocoaView(d->m_webView); } + } MacWebKitHelpWidget::~MacWebKitHelpWidget() @@ -469,9 +489,9 @@ MacWebKitHelpWidget::~MacWebKitHelpWidget() delete d; } -void MacWebKitHelpWidget::setOpenInNewPageActionVisible(bool visible) +MacWebKitHelpViewer *MacWebKitHelpWidget::viewer() const { - d->m_uiDelegate.openInNewPageActionVisible = visible; + return d->m_viewer; } WebView *MacWebKitHelpWidget::webView() const @@ -679,11 +699,6 @@ void MacWebKitHelpViewer::addForwardHistoryItems(QMenu *forwardMenu) } } -void MacWebKitHelpViewer::setOpenInNewPageActionVisible(bool visible) -{ - m_widget->setOpenInNewPageActionVisible(visible); -} - DOMRange *MacWebKitHelpViewer::findText(NSString *text, bool forward, bool caseSensitive, DOMNode *startNode, int startOffset) { QTC_ASSERT(text, return nil); diff --git a/src/plugins/help/textbrowserhelpviewer.cpp b/src/plugins/help/textbrowserhelpviewer.cpp index 97530821cf..531a447a45 100644 --- a/src/plugins/help/textbrowserhelpviewer.cpp +++ b/src/plugins/help/textbrowserhelpviewer.cpp @@ -198,11 +198,6 @@ void TextBrowserHelpViewer::addForwardHistoryItems(QMenu *forwardMenu) } } -void TextBrowserHelpViewer::setOpenInNewPageActionVisible(bool visible) -{ - m_textBrowser->m_openInNewPageActionVisible = visible; -} - bool TextBrowserHelpViewer::findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped) { @@ -305,7 +300,6 @@ TextBrowserHelpWidget::TextBrowserHelpWidget(TextBrowserHelpViewer *parent) : QTextBrowser(parent) , zoomCount(0) , forceFont(false) - , m_openInNewPageActionVisible(true) , m_parent(parent) { installEventFilter(this); @@ -334,16 +328,6 @@ QString TextBrowserHelpWidget::linkAt(const QPoint &pos) return anchor; } -void TextBrowserHelpWidget::openLink(const QUrl &url, bool newPage) -{ - if (url.isEmpty() || !url.isValid()) - return; - if (newPage) - OpenPagesManager::instance().createPage(url); - else - setSource(url); -} - void TextBrowserHelpWidget::scaleUp() { if (zoomCount < 10) { @@ -373,13 +357,18 @@ void TextBrowserHelpWidget::contextMenuEvent(QContextMenuEvent *event) if (!link.isEmpty() && link.isValid()) { QAction *action = menu.addAction(tr("Open Link")); connect(action, &QAction::triggered, this, [this, link]() { - openLink(link, false/*newPage*/); + setSource(link); }); - if (m_openInNewPageActionVisible) { - action = menu.addAction(QCoreApplication::translate("HelpViewer", - "Open Link as New Page")); + if (m_parent->isActionVisible(HelpViewer::Action::NewPage)) { + action = menu.addAction(QCoreApplication::translate("HelpViewer", Constants::TR_OPEN_LINK_AS_NEW_PAGE)); + connect(action, &QAction::triggered, this, [this, link]() { + emit m_parent->newPageRequested(link); + }); + } + if (m_parent->isActionVisible(HelpViewer::Action::ExternalWindow)) { + action = menu.addAction(QCoreApplication::translate("HelpViewer", Constants::TR_OPEN_LINK_IN_WINDOW)); connect(action, &QAction::triggered, this, [this, link]() { - openLink(link, true/*newPage*/); + emit m_parent->externalPageRequested(link); }); } copyAnchorAction = menu.addAction(tr("Copy Link")); @@ -440,7 +429,7 @@ void TextBrowserHelpWidget::mouseReleaseEvent(QMouseEvent *e) bool controlPressed = e->modifiers() & Qt::ControlModifier; const QString link = linkAt(e->pos()); if ((controlPressed || e->button() == Qt::MidButton) && link.isEmpty()) { - openLink(link, true/*newPage*/); + emit m_parent->newPageRequested(QUrl(link)); return; } diff --git a/src/plugins/help/textbrowserhelpviewer.h b/src/plugins/help/textbrowserhelpviewer.h index 12ace81659..068baee028 100644 --- a/src/plugins/help/textbrowserhelpviewer.h +++ b/src/plugins/help/textbrowserhelpviewer.h @@ -62,7 +62,6 @@ public: bool isBackwardAvailable() const; void addBackHistoryItems(QMenu *backMenu); void addForwardHistoryItems(QMenu *forwardMenu); - void setOpenInNewPageActionVisible(bool visible); bool findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped = 0); @@ -105,11 +104,9 @@ protected: private: QString linkAt(const QPoint& pos); - void openLink(const QUrl &url, bool newPage); int zoomCount; bool forceFont; - bool m_openInNewPageActionVisible; TextBrowserHelpViewer *m_parent; friend class Help::Internal::TextBrowserHelpViewer; }; diff --git a/src/plugins/help/webenginehelpviewer.cpp b/src/plugins/help/webenginehelpviewer.cpp index 55ebc4e57e..785d62845d 100644 --- a/src/plugins/help/webenginehelpviewer.cpp +++ b/src/plugins/help/webenginehelpviewer.cpp @@ -25,6 +25,7 @@ #include "webenginehelpviewer.h" +#include "helpconstants.h" #include "localhelpmanager.h" #include "openpagesmanager.h" @@ -34,6 +35,7 @@ #include <QContextMenuEvent> #include <QCoreApplication> #include <QVBoxLayout> +#include <QWebEngineContextMenuData> #include <QWebEngineHistory> #include <QWebEngineProfile> #include <QWebEngineSettings> @@ -98,7 +100,7 @@ WebEngineHelpViewer::WebEngineHelpViewer(QWidget *parent) : QAction* action = m_widget->pageAction(QWebEnginePage::OpenLinkInNewTab); action->setText(QCoreApplication::translate("HelpViewer", - "Open Link as New Page")); + Constants::TR_OPEN_LINK_AS_NEW_PAGE)); QWebEnginePage *viewPage = m_widget->page(); QTC_ASSERT(viewPage, return); @@ -202,11 +204,6 @@ void WebEngineHelpViewer::addForwardHistoryItems(QMenu *forwardMenu) } } -void WebEngineHelpViewer::setOpenInNewPageActionVisible(bool visible) -{ - m_widget->setOpenInNewPageActionVisible(visible); -} - bool WebEngineHelpViewer::findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped) { @@ -276,35 +273,55 @@ WebEngineHelpPage::WebEngineHelpPage(QObject *parent) { } +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) QWebEnginePage *WebEngineHelpPage::createWindow(QWebEnginePage::WebWindowType) { auto viewer = static_cast<WebEngineHelpViewer *>(OpenPagesManager::instance().createPage()); return viewer->page(); } +#endif -WebView::WebView(QWidget *parent) - : QWebEngineView(parent) -{ -} - -void WebView::setOpenInNewPageActionVisible(bool visible) +WebView::WebView(WebEngineHelpViewer *viewer) + : QWebEngineView(viewer), + m_viewer(viewer) { - m_openInNewPageActionVisible = visible; } void WebView::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = page()->createStandardContextMenu(); - if (m_openInNewPageActionVisible) { - // insert Open In New Tab if OpenLinkInThisWindow is also there - const QList<QAction*> actions = menu->actions(); - auto it = std::find(actions.cbegin(), actions.cend(), page()->action(QWebEnginePage::OpenLinkInThisWindow)); - if (it != actions.cend()) { - // insert after - ++it; - QAction *before = (it == actions.cend() ? 0 : *it); - menu->insertAction(before, page()->action(QWebEnginePage::OpenLinkInNewTab)); + // insert Open as New Page etc if OpenLinkInThisWindow is also there + const QList<QAction*> actions = menu->actions(); + auto it = std::find(actions.cbegin(), actions.cend(), + page()->action(QWebEnginePage::OpenLinkInThisWindow)); + if (it != actions.cend()) { + // insert after + ++it; + QAction *before = (it == actions.cend() ? 0 : *it); +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) + if (m_viewer->isActionVisible(HelpViewer::Action::NewPage)) { + QAction *openLinkInNewTab = page()->action(QWebEnginePage::OpenLinkInNewTab); + menu->insertAction(before, openLinkInNewTab); + } +#else + QUrl url = page()->contextMenuData().linkUrl(); + if (m_viewer->isActionVisible(HelpViewer::Action::NewPage)) { + auto openLink = new QAction(QCoreApplication::translate("HelpViewer", + Constants::TR_OPEN_LINK_IN_NEW_PAGE), menu); + connect(openLink, &QAction::triggered, m_viewer, [this, url] { + m_viewer->newPageRequested(url); + }); + menu->insertAction(before, openLink); + } + if (m_viewer->isActionVisible(HelpViewer::Action::ExternalWindow)) { + auto openLink = new QAction(QCoreApplication::translate("HelpViewer", + Constants::TR_OPEN_LINK_IN_WINDOW), menu); + connect(openLink, &QAction::triggered, m_viewer, [this, url] { + m_viewer->externalPageRequested(url); + }); + menu->insertAction(before, openLink); } +#endif } connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater); diff --git a/src/plugins/help/webenginehelpviewer.h b/src/plugins/help/webenginehelpviewer.h index 1674258a71..d5835c4d6a 100644 --- a/src/plugins/help/webenginehelpviewer.h +++ b/src/plugins/help/webenginehelpviewer.h @@ -33,6 +33,8 @@ namespace Help { namespace Internal { +class WebEngineHelpViewer; + class HelpUrlSchemeHandler : public QWebEngineUrlSchemeHandler { public: @@ -44,21 +46,21 @@ class WebEngineHelpPage : public QWebEnginePage { public: explicit WebEngineHelpPage(QObject *parent = 0); +#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0) QWebEnginePage *createWindow(QWebEnginePage::WebWindowType) override; +#endif }; class WebView : public QWebEngineView { public: - explicit WebView(QWidget *parent = 0); - - void setOpenInNewPageActionVisible(bool visible); + explicit WebView(WebEngineHelpViewer *viewer); protected: void contextMenuEvent(QContextMenuEvent *event) override; private: - bool m_openInNewPageActionVisible = true; + WebEngineHelpViewer *m_viewer; }; class WebEngineHelpViewer : public HelpViewer @@ -80,7 +82,6 @@ public: bool isBackwardAvailable() const override; void addBackHistoryItems(QMenu *backMenu) override; void addForwardHistoryItems(QMenu *forwardMenu) override; - void setOpenInNewPageActionVisible(bool visible) override; bool findText(const QString &text, Core::FindFlags flags, bool incremental, bool fromSearch, bool *wrapped) override; WebEngineHelpPage *page() const; |