summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-09-27 12:19:55 +0200
committerEike Ziller <eike.ziller@qt.io>2019-09-30 11:19:54 +0000
commitaad6ad8c10661d0a2da26871e65cfce052ea8897 (patch)
tree61e602bda67d0c93567cf79fee25cee94ccd0f3d
parentd34aee4d533304e3afacecf2ff0ae0d243fcd188 (diff)
downloadqt-creator-aad6ad8c10661d0a2da26871e65cfce052ea8897.tar.gz
Help: Replace annoying URL syncing by explicit Open in Edit Mode
Qt Creator was syncing the current page in Help mode to the page shown in the side-by-side view in edit mode. This doesn't really make sense because context is completely lost. Instead provide the explicit option to open a help page in edit mode, also from the external help window. Fixes: QTCREATORBUG-19198 Change-Id: I00698bb431d5c116dd1e0e1cbdc5fbd7421ac267 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/help/helpplugin.cpp24
-rw-r--r--src/plugins/help/helpviewer.h3
-rw-r--r--src/plugins/help/helpwidget.cpp42
-rw-r--r--src/plugins/help/helpwidget.h7
4 files changed, 33 insertions, 43 deletions
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 1313ca6c0a..a6ae3dcb43 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -119,8 +119,6 @@ public:
void saveExternalWindowSettings();
void showLinksInCurrentViewer(const QMap<QString, QUrl> &links, const QString &key);
- void updateSideBarSource(const QUrl &newUrl);
-
void setupHelpEngineIfNeeded();
HelpViewer *showHelpUrl(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
@@ -206,8 +204,6 @@ HelpPluginPrivate::HelpPluginPrivate()
}
m_centralWidget = createHelpWidget(Context("Help.CentralHelpWidget"), HelpWidget::ModeWidget);
- connect(m_centralWidget, &HelpWidget::sourceChanged,
- this, &HelpPluginPrivate::updateSideBarSource);
connect(HelpManager::instance(), &HelpManager::helpRequested,
this, &HelpPluginPrivate::showHelpUrl);
connect(&m_searchTaskHandler, &SearchTaskHandler::search,
@@ -369,18 +365,16 @@ HelpWidget *HelpPluginPrivate::createHelpWidget(const Context &context, HelpWidg
{
auto widget = new HelpWidget(context, style);
- connect(widget, &HelpWidget::openHelpMode, this, [this](const QUrl &url) {
- showHelpUrl(url, Core::HelpManager::HelpModeAlways);
- });
+ connect(widget, &HelpWidget::requestShowHelpUrl, this, &HelpPluginPrivate::showHelpUrl);
connect(LocalHelpManager::instance(),
&LocalHelpManager::returnOnCloseChanged,
widget,
&HelpWidget::updateCloseButton);
connect(widget, &HelpWidget::closeButtonClicked, this, [this, widget] {
- if (widget->viewerCount() == 1 && LocalHelpManager::returnOnClose())
- ModeManager::activateMode(Core::Constants::MODE_EDIT);
if (widget->widgetStyle() == HelpWidget::SideBarWidget)
RightPaneWidget::instance()->setShown(false);
+ else if (widget->viewerCount() == 1 && LocalHelpManager::returnOnClose())
+ ModeManager::activateMode(Core::Constants::MODE_EDIT);
});
connect(widget, &HelpWidget::aboutToClose,
this, &HelpPluginPrivate::saveExternalWindowSettings);
@@ -464,17 +458,6 @@ void HelpPluginPrivate::modeChanged(Core::Id mode, Core::Id old)
}
}
-void HelpPluginPrivate::updateSideBarSource(const QUrl &newUrl)
-{
- if (m_rightPaneSideBarWidget) {
- // This is called when setSource on the central widget is called.
- // Avoid nested setSource calls (even of different help viewers) by scheduling the
- // sidebar viewer update on the event loop (QTCREATORBUG-12742)
- QMetaObject::invokeMethod(m_rightPaneSideBarWidget->currentViewer(), "setSource",
- Qt::QueuedConnection, Q_ARG(QUrl, newUrl));
- }
-}
-
void HelpPluginPrivate::setupHelpEngineIfNeeded()
{
LocalHelpManager::setEngineNeedsUpdate();
@@ -535,6 +518,7 @@ HelpViewer *HelpPluginPrivate::viewerForHelpViewerLocation(
if (actualLocation == Core::HelpManager::SideBySideAlways) {
createRightPaneContextViewer();
+ ModeManager::activateMode(Core::Constants::MODE_EDIT);
RightPaneWidget::instance()->setWidget(m_rightPaneSideBarWidget);
RightPaneWidget::instance()->setShown(true);
return m_rightPaneSideBarWidget->currentViewer();
diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h
index d502d7c664..b1be6e1dfb 100644
--- a/src/plugins/help/helpviewer.h
+++ b/src/plugins/help/helpviewer.h
@@ -63,8 +63,7 @@ public:
virtual QString title() const = 0;
virtual QUrl source() const = 0;
- // metacall in HelpPlugin::updateSideBarSource
- Q_INVOKABLE virtual void setSource(const QUrl &url) = 0;
+ virtual void setSource(const QUrl &url) = 0;
virtual void setHtml(const QString &html) = 0;
diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp
index ff95cedac7..695524a149 100644
--- a/src/plugins/help/helpwidget.cpp
+++ b/src/plugins/help/helpwidget.cpp
@@ -100,11 +100,6 @@ QVariant OpenPagesModel::data(const QModelIndex &index, int role) const
return QVariant();
}
-static void openUrlInWindow(const QUrl &url)
-{
- HelpPlugin::showHelpUrl(url, Core::HelpManager::ExternalHelpAlways);
-}
-
static bool isBookmarkable(const QUrl &url)
{
return !url.isEmpty() && url != QUrl(Help::Constants::AboutBlank);
@@ -207,7 +202,9 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
if (style != ModeWidget) {
m_switchToHelp = new QAction(tr("Open in Help Mode"), toolBar);
cmd = Core::ActionManager::registerAction(m_switchToHelp, Constants::CONTEXT_HELP, context);
- connect(m_switchToHelp, &QAction::triggered, this, &HelpWidget::helpModeButtonClicked);
+ connect(m_switchToHelp, &QAction::triggered, this, [this] {
+ postRequestShowHelpUrl(Core::HelpManager::HelpModeAlways);
+ });
layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_switchToHelp, cmd));
}
@@ -336,6 +333,12 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
if (m_switchToHelp)
openMenu->addAction(m_switchToHelp);
+ if (style != SideBarWidget) {
+ QAction *openSideBySide = openMenu->addAction(tr("Open in Edit Mode"));
+ connect(openSideBySide, &QAction::triggered, this, [this]() {
+ postRequestShowHelpUrl(Core::HelpManager::SideBySideAlways);
+ });
+ }
if (supportsPages()) {
QAction *openPage = openMenu->addAction(tr("Open in New Page"));
connect(openPage, &QAction::triggered, this, [this]() {
@@ -346,11 +349,7 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
if (style != ExternalWindow) {
QAction *openExternal = openMenu->addAction(tr("Open in Window"));
connect(openExternal, &QAction::triggered, this, [this]() {
- if (HelpViewer *viewer = currentViewer()) {
- openUrlInWindow(viewer->source());
- if (m_style == SideBarWidget)
- emit closeButtonClicked();
- }
+ postRequestShowHelpUrl(Core::HelpManager::ExternalHelpAlways);
});
}
openMenu->addSeparator();
@@ -555,7 +554,6 @@ void HelpWidget::setCurrentIndex(int index)
LocalHelpManager::canOpenOnlineHelp(viewer->source()));
if (m_style == ExternalWindow)
updateWindowTitle();
- emit sourceChanged(viewer->source());
emit currentIndexChanged(index);
}
@@ -576,7 +574,6 @@ HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
if (currentViewer() == viewer) {
m_addBookmarkAction->setEnabled(isBookmarkable(url));
m_openOnlineDocumentationAction->setEnabled(LocalHelpManager::canOpenOnlineHelp(url));
- emit sourceChanged(url);
}
});
connect(viewer, &HelpViewer::forwardAvailable, this, [viewer, this](bool available) {
@@ -598,7 +595,9 @@ HelpViewer *HelpWidget::insertViewer(int index, const QUrl &url, qreal zoom)
connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms);
connect(viewer, &HelpViewer::newPageRequested, this, &HelpWidget::openNewPage);
- connect(viewer, &HelpViewer::externalPageRequested, this, &openUrlInWindow);
+ connect(viewer, &HelpViewer::externalPageRequested, this, [this](const QUrl &url) {
+ emit requestShowHelpUrl(url, Core::HelpManager::ExternalHelpAlways);
+ });
updateCloseButton();
m_model.endInsertRows();
if (url.isValid())
@@ -731,12 +730,11 @@ void HelpWidget::updateWindowTitle()
setWindowTitle(tr("Help - %1").arg(pageTitle));
}
-void HelpWidget::helpModeButtonClicked()
+void HelpWidget::postRequestShowHelpUrl(Core::HelpManager::HelpViewerLocation location)
{
QTC_ASSERT(currentViewer(), return);
- emit openHelpMode(currentViewer()->source());
- if (m_style == ExternalWindow)
- close();
+ emit requestShowHelpUrl(currentViewer()->source(), location);
+ closeWindow();
}
void HelpWidget::closeCurrentPage()
@@ -770,6 +768,14 @@ bool HelpWidget::supportsPages() const
return m_style != SideBarWidget;
}
+void HelpWidget::closeWindow()
+{
+ if (m_style == SideBarWidget)
+ emit closeButtonClicked();
+ else if (m_style == ExternalWindow)
+ close();
+}
+
void HelpWidget::updateCloseButton()
{
if (supportsPages()) {
diff --git a/src/plugins/help/helpwidget.h b/src/plugins/help/helpwidget.h
index f104e90b8d..40cca45e3d 100644
--- a/src/plugins/help/helpwidget.h
+++ b/src/plugins/help/helpwidget.h
@@ -25,6 +25,7 @@
#pragma once
+#include <coreplugin/helpmanager.h>
#include <coreplugin/icontext.h>
#include <QAbstractTableModel>
@@ -109,10 +110,9 @@ protected:
void closeEvent(QCloseEvent *) override;
signals:
- void openHelpMode(const QUrl &url);
+ void requestShowHelpUrl(const QUrl &url, Core::HelpManager::HelpViewerLocation location);
void closeButtonClicked();
void aboutToClose();
- void sourceChanged(const QUrl &url);
void filterActivated(const QString &name);
void currentIndexChanged(int index);
@@ -122,10 +122,11 @@ private:
void updateBackMenu();
void updateForwardMenu();
void updateWindowTitle();
- void helpModeButtonClicked();
+ void postRequestShowHelpUrl(Core::HelpManager::HelpViewerLocation location);
void closeCurrentPage();
void saveState() const;
bool supportsPages() const;
+ void closeWindow();
void goHome();
void addBookmark();