summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-02-15 15:30:52 +0100
committerEike Ziller <eike.ziller@qt.io>2019-02-21 13:26:06 +0000
commit334c76fd31f98d95dff94f059da90a118c4ea6be (patch)
tree0d1fd04a7e5630644dc9d4903d61ea22769c3e51
parent9e965409d1cbe6270c6a994bfe41d61a154d1d77 (diff)
downloadqt-creator-334c76fd31f98d95dff94f059da90a118c4ea6be.tar.gz
Help viewer: Add option for scroll wheel zooming
Fixes: QTCREATORBUG-14154 Change-Id: Ia6c4aedb78954614477f0228ba82c4dc476a2525 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/help/generalsettingspage.cpp9
-rw-r--r--src/plugins/help/generalsettingspage.h1
-rw-r--r--src/plugins/help/generalsettingspage.ui7
-rw-r--r--src/plugins/help/helpplugin.cpp3
-rw-r--r--src/plugins/help/helpviewer.cpp20
-rw-r--r--src/plugins/help/helpviewer.h6
-rw-r--r--src/plugins/help/localhelpmanager.cpp12
-rw-r--r--src/plugins/help/localhelpmanager.h4
-rw-r--r--src/plugins/help/textbrowserhelpviewer.cpp10
-rw-r--r--src/plugins/help/textbrowserhelpviewer.h1
-rw-r--r--src/plugins/help/webenginehelpviewer.cpp25
-rw-r--r--src/plugins/help/webenginehelpviewer.h3
12 files changed, 90 insertions, 11 deletions
diff --git a/src/plugins/help/generalsettingspage.cpp b/src/plugins/help/generalsettingspage.cpp
index fc8fa3d321..39033b7bff 100644
--- a/src/plugins/help/generalsettingspage.cpp
+++ b/src/plugins/help/generalsettingspage.cpp
@@ -119,6 +119,9 @@ QWidget *GeneralSettingsPage::widget()
m_returnOnClose = LocalHelpManager::returnOnClose();
m_ui->m_returnOnClose->setChecked(m_returnOnClose);
+
+ m_scrollWheelZoomingEnabled = LocalHelpManager::isScrollWheelZoomingEnabled();
+ m_ui->scrollWheelZooming->setChecked(m_scrollWheelZoomingEnabled);
}
return m_widget;
}
@@ -159,6 +162,12 @@ void GeneralSettingsPage::apply()
m_returnOnClose = close;
LocalHelpManager::setReturnOnClose(m_returnOnClose);
}
+
+ const bool zoom = m_ui->scrollWheelZooming->isChecked();
+ if (m_scrollWheelZoomingEnabled != zoom) {
+ m_scrollWheelZoomingEnabled = zoom;
+ LocalHelpManager::setScrollWheelZoomingEnabled(m_scrollWheelZoomingEnabled);
+ }
}
void GeneralSettingsPage::setCurrentPage()
diff --git a/src/plugins/help/generalsettingspage.h b/src/plugins/help/generalsettingspage.h
index 3804039027..3845881c3b 100644
--- a/src/plugins/help/generalsettingspage.h
+++ b/src/plugins/help/generalsettingspage.h
@@ -69,6 +69,7 @@ private:
int m_startOption;
bool m_returnOnClose;
+ bool m_scrollWheelZoomingEnabled;
QPointer<QWidget> m_widget;
Ui::GeneralSettingsPage *m_ui = nullptr;
diff --git a/src/plugins/help/generalsettingspage.ui b/src/plugins/help/generalsettingspage.ui
index e303d50f6e..afca6739cb 100644
--- a/src/plugins/help/generalsettingspage.ui
+++ b/src/plugins/help/generalsettingspage.ui
@@ -289,6 +289,13 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
+ <widget class="QCheckBox" name="scrollWheelZooming">
+ <property name="text">
+ <string>Enable scroll wheel zooming</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QCheckBox" name="m_returnOnClose">
<property name="toolTip">
<string>Switches to editor context after last help page is closed.</string>
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 7703541670..7abdee2c7c 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -495,6 +495,9 @@ HelpViewer *HelpPlugin::createHelpViewer(qreal zoom)
// initialize zoom
viewer->setScale(zoom);
+ viewer->setScrollWheelZoomingEnabled(LocalHelpManager::isScrollWheelZoomingEnabled());
+ connect(LocalHelpManager::instance(), &LocalHelpManager::scrollWheelZoomingEnabledChanged,
+ viewer, &HelpViewer::setScrollWheelZoomingEnabled);
// add find support
auto agg = new Aggregation::Aggregate;
diff --git a/src/plugins/help/helpviewer.cpp b/src/plugins/help/helpviewer.cpp
index 1c40bbd111..d667c3b26c 100644
--- a/src/plugins/help/helpviewer.cpp
+++ b/src/plugins/help/helpviewer.cpp
@@ -91,6 +91,16 @@ HelpViewer::~HelpViewer()
restoreOverrideCursor();
}
+void HelpViewer::setScrollWheelZoomingEnabled(bool enabled)
+{
+ m_scrollWheelZoomingEnabled = enabled;
+}
+
+bool HelpViewer::isScrollWheelZoomingEnabled() const
+{
+ return m_scrollWheelZoomingEnabled;
+}
+
void HelpViewer::setActionVisible(Action action, bool visible)
{
if (visible)
@@ -162,6 +172,16 @@ void HelpViewer::home()
setSource(LocalHelpManager::homePage());
}
+void HelpViewer::wheelEvent(QWheelEvent *event)
+{
+ if (m_scrollWheelZoomingEnabled && event->modifiers() == Qt::ControlModifier) {
+ event->accept();
+ event->delta() > 0 ? scaleUp() : scaleDown();
+ } else {
+ QWidget::wheelEvent(event);
+ }
+}
+
void HelpViewer::slotLoadStarted()
{
++m_loadOverrideStack;
diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h
index 0a24fb7222..d502d7c664 100644
--- a/src/plugins/help/helpviewer.h
+++ b/src/plugins/help/helpviewer.h
@@ -57,6 +57,9 @@ public:
virtual qreal scale() const = 0;
virtual void setScale(qreal scale) = 0;
+ void setScrollWheelZoomingEnabled(bool enabled);
+ bool isScrollWheelZoomingEnabled() const;
+
virtual QString title() const = 0;
virtual QUrl source() const = 0;
@@ -105,12 +108,15 @@ signals:
void externalPageRequested(const QUrl &url);
protected:
+ void wheelEvent(QWheelEvent *event) override;
+
void slotLoadStarted();
void slotLoadFinished();
void restoreOverrideCursor();
Actions m_visibleActions;
+ bool m_scrollWheelZoomingEnabled = true;
int m_loadOverrideStack = 0;
};
diff --git a/src/plugins/help/localhelpmanager.cpp b/src/plugins/help/localhelpmanager.cpp
index 3f698f2f28..140aa4a935 100644
--- a/src/plugins/help/localhelpmanager.cpp
+++ b/src/plugins/help/localhelpmanager.cpp
@@ -65,6 +65,7 @@ static const char kFontSizeKey[] = "Help/FallbackFontSize";
static const char kStartOptionKey[] = "Help/StartOption";
static const char kContextHelpOptionKey[] = "Help/ContextHelpOption";
static const char kReturnOnCloseKey[] = "Help/ReturnOnClose";
+static const char kUseScrollWheelZooming[] = "Help/UseScrollWheelZooming";
static const char kLastShownPagesKey[] = "Help/LastShownPages";
static const char kLastShownPagesZoomKey[] = "Help/LastShownPagesZoom";
static const char kLastSelectedTabKey[] = "Help/LastSelectedTab";
@@ -225,6 +226,17 @@ void LocalHelpManager::setReturnOnClose(bool returnOnClose)
emit m_instance->returnOnCloseChanged();
}
+bool LocalHelpManager::isScrollWheelZoomingEnabled()
+{
+ return Core::ICore::settings()->value(kUseScrollWheelZooming, true).toBool();
+}
+
+void LocalHelpManager::setScrollWheelZoomingEnabled(bool enabled)
+{
+ Core::ICore::settings()->setValue(kUseScrollWheelZooming, enabled);
+ emit m_instance->scrollWheelZoomingEnabledChanged(enabled);
+}
+
QStringList LocalHelpManager::lastShownPages()
{
const QVariant value = Core::ICore::settings()->value(kLastShownPagesKey, QVariant());
diff --git a/src/plugins/help/localhelpmanager.h b/src/plugins/help/localhelpmanager.h
index bc8cd3b94a..7b330ade30 100644
--- a/src/plugins/help/localhelpmanager.h
+++ b/src/plugins/help/localhelpmanager.h
@@ -78,6 +78,9 @@ public:
static bool returnOnClose();
static void setReturnOnClose(bool returnOnClose);
+ static bool isScrollWheelZoomingEnabled();
+ static void setScrollWheelZoomingEnabled(bool enabled);
+
static QStringList lastShownPages();
static void setLastShownPages(const QStringList &pages);
@@ -106,6 +109,7 @@ signals:
void filterIndexChanged(int index);
void fallbackFontChanged(const QFont &font);
void returnOnCloseChanged();
+ void scrollWheelZoomingEnabledChanged(bool enabled);
private:
static bool m_guiNeedsSetup;
diff --git a/src/plugins/help/textbrowserhelpviewer.cpp b/src/plugins/help/textbrowserhelpviewer.cpp
index d729535fa3..02afab8d4d 100644
--- a/src/plugins/help/textbrowserhelpviewer.cpp
+++ b/src/plugins/help/textbrowserhelpviewer.cpp
@@ -406,16 +406,6 @@ bool TextBrowserHelpWidget::eventFilter(QObject *obj, QEvent *event)
return QTextBrowser::eventFilter(obj, event);
}
-void TextBrowserHelpWidget::wheelEvent(QWheelEvent *e)
-{
- if (e->modifiers() == Qt::ControlModifier) {
- e->accept();
- e->delta() > 0 ? scaleUp() : scaleDown();
- } else {
- QTextBrowser::wheelEvent(e);
- }
-}
-
void TextBrowserHelpWidget::mousePressEvent(QMouseEvent *e)
{
if (Utils::HostOsInfo::isLinuxHost() && m_parent->handleForwardBackwardMouseButtons(e))
diff --git a/src/plugins/help/textbrowserhelpviewer.h b/src/plugins/help/textbrowserhelpviewer.h
index 3e046a8771..52d5b7ce2b 100644
--- a/src/plugins/help/textbrowserhelpviewer.h
+++ b/src/plugins/help/textbrowserhelpviewer.h
@@ -98,7 +98,6 @@ public:
protected:
void contextMenuEvent(QContextMenuEvent *event) override;
bool eventFilter(QObject *obj, QEvent *event) override;
- void wheelEvent(QWheelEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
diff --git a/src/plugins/help/webenginehelpviewer.cpp b/src/plugins/help/webenginehelpviewer.cpp
index 60773b91fe..197f356d79 100644
--- a/src/plugins/help/webenginehelpviewer.cpp
+++ b/src/plugins/help/webenginehelpviewer.cpp
@@ -292,6 +292,31 @@ WebView::WebView(WebEngineHelpViewer *viewer)
{
}
+bool WebView::event(QEvent *ev)
+{
+ // work around QTBUG-43602
+ if (ev->type() == QEvent::ChildAdded) {
+ auto ce = static_cast<QChildEvent *>(ev);
+ ce->child()->installEventFilter(this);
+ } else if (ev->type() == QEvent::ChildRemoved) {
+ auto ce = static_cast<QChildEvent *>(ev);
+ ce->child()->removeEventFilter(this);
+ }
+ return QWebEngineView::event(ev);
+}
+
+bool WebView::eventFilter(QObject *src, QEvent *e)
+{
+ Q_UNUSED(src)
+ // work around QTBUG-43602
+ if (m_viewer->isScrollWheelZoomingEnabled() && e->type() == QEvent::Wheel) {
+ auto we = static_cast<QWheelEvent *>(e);
+ if (we->modifiers() == Qt::ControlModifier)
+ return true;
+ }
+ return false;
+}
+
void WebView::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = page()->createStandardContextMenu();
diff --git a/src/plugins/help/webenginehelpviewer.h b/src/plugins/help/webenginehelpviewer.h
index cffe26af21..f781889108 100644
--- a/src/plugins/help/webenginehelpviewer.h
+++ b/src/plugins/help/webenginehelpviewer.h
@@ -53,6 +53,9 @@ class WebView : public QWebEngineView
public:
explicit WebView(WebEngineHelpViewer *viewer);
+ bool event(QEvent *ev) override;
+ bool eventFilter(QObject *src, QEvent *e) override;
+
protected:
void contextMenuEvent(QContextMenuEvent *event) override;