From 05914458f07e72344a3989ec090a120bb819aa4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Wed, 9 Dec 2009 16:27:34 +0100
Subject: [PATCH] Made it possible to turn off scroll wheel zooming

It activates too easily for some people.

Task-number: QTCREATORBUG-406
---
 src/plugins/debugger/watchhandler.h           |  4 +---
 src/plugins/texteditor/basetexteditor.cpp     | 24 +++++++++++++------
 src/plugins/texteditor/basetexteditor.h       |  3 +++
 src/plugins/texteditor/basetexteditor_p.h     |  6 +++--
 src/plugins/texteditor/behaviorsettings.cpp   |  7 +++++-
 src/plugins/texteditor/behaviorsettings.h     |  1 +
 .../texteditor/behaviorsettingspage.cpp       |  5 +++-
 .../texteditor/behaviorsettingspage.ui        | 11 +++++++--
 8 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index c59e87e36ad..976a51f743d 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -34,9 +34,7 @@
 #include <QtCore/QObject>
 #include <QtCore/QHash>
 #include <QtCore/QSet>
-#include <QtGui/QStandardItem>
-#include <QtGui/QStandardItemModel>
-#include <QtGui/QTreeView>
+#include <QtCore/QAbstractItemModel>
 #include <QtScript/QScriptValue>
 
 QT_BEGIN_NAMESPACE
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 279cb40608d..9d9b6678957 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1504,12 +1504,22 @@ bool BaseTextEditor::codeFoldingSupported() const
 
 void BaseTextEditor::setMouseNavigationEnabled(bool b)
 {
-    d->m_mouseNavigationEnabled = b;
+    d->m_behaviorSettings.m_mouseNavigation = b;
 }
 
 bool BaseTextEditor::mouseNavigationEnabled() const
 {
-    return d->m_mouseNavigationEnabled;
+    return d->m_behaviorSettings.m_mouseNavigation;
+}
+
+void BaseTextEditor::setScrollWheelZoomingEnabled(bool b)
+{
+    d->m_behaviorSettings.m_scrollWheelZooming = b;
+}
+
+bool BaseTextEditor::scrollWheelZoomingEnabled() const
+{
+    return d->m_behaviorSettings.m_scrollWheelZooming;
 }
 
 void BaseTextEditor::setRevisionsVisible(bool b)
@@ -1547,7 +1557,6 @@ BaseTextEditorPrivate::BaseTextEditorPrivate()
     m_marksVisible(false),
     m_codeFoldingVisible(false),
     m_codeFoldingSupported(false),
-    m_mouseNavigationEnabled(true),
     m_revisionsVisible(false),
     m_lineNumbersVisible(true),
     m_highlightCurrentLine(true),
@@ -3110,7 +3119,7 @@ void BaseTextEditor::mousePressEvent(QMouseEvent *e)
 
 void BaseTextEditor::mouseReleaseEvent(QMouseEvent *e)
 {
-    if (d->m_mouseNavigationEnabled
+    if (mouseNavigationEnabled()
         && d->m_linkPressed
         && e->modifiers() & Qt::ControlModifier
         && !(e->modifiers() & Qt::ShiftModifier)
@@ -3516,8 +3525,8 @@ void BaseTextEditor::handleBackspaceKey()
 
 void BaseTextEditor::wheelEvent(QWheelEvent *e)
 {
-  d->clearVisibleCollapsedBlock();
-    if (e->modifiers() & Qt::ControlModifier) {
+    d->clearVisibleCollapsedBlock();
+    if (scrollWheelZoomingEnabled() && e->modifiers() & Qt::ControlModifier) {
         const int delta = e->delta();
         if (delta < 0)
             zoomOut();
@@ -3644,7 +3653,7 @@ void BaseTextEditor::updateLink(QMouseEvent *e)
 {
     bool linkFound = false;
 
-    if (d->m_mouseNavigationEnabled && e->modifiers() & Qt::ControlModifier) {
+    if (mouseNavigationEnabled() && e->modifiers() & Qt::ControlModifier) {
         // Link emulation behaviour for 'go to definition'
         const QTextCursor cursor = cursorForPosition(e->pos());
 
@@ -4688,6 +4697,7 @@ void BaseTextEditor::setDisplaySettings(const DisplaySettings &ds)
 void BaseTextEditor::setBehaviorSettings(const TextEditor::BehaviorSettings &bs)
 {
     setMouseNavigationEnabled(bs.m_mouseNavigation);
+    setScrollWheelZoomingEnabled(bs.m_scrollWheelZooming);
 }
 
 void BaseTextEditor::setStorageSettings(const StorageSettings &storageSettings)
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index f7edcf2ac0a..38784adcb8e 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -360,6 +360,9 @@ public:
     void setMouseNavigationEnabled(bool b);
     bool mouseNavigationEnabled() const;
 
+    void setScrollWheelZoomingEnabled(bool b);
+    bool scrollWheelZoomingEnabled() const;
+
     void setRevisionsVisible(bool b);
     bool revisionsVisible() const;
 
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index 2947d05ce47..3f6c158708e 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -31,6 +31,7 @@
 #define BASETEXTEDITOR_P_H
 
 #include "basetexteditor.h"
+#include "behaviorsettings.h"
 #include "displaysettings.h"
 #include "texteditoroverlay.h"
 #include "fontsettings.h"
@@ -181,8 +182,10 @@ public:
     // end parentheses matcher
 
     QWidget *m_extraArea;
+
     DisplaySettings m_displaySettings;
-    TextEditor::FontSettings m_fontSettings;
+    FontSettings m_fontSettings;
+    BehaviorSettings m_behaviorSettings;
 
     int extraAreaSelectionAnchorBlockNumber;
     int extraAreaToggleMarkBlockNumber;
@@ -205,7 +208,6 @@ public:
     uint m_marksVisible : 1;
     uint m_codeFoldingVisible : 1;
     uint m_codeFoldingSupported : 1;
-    uint m_mouseNavigationEnabled : 1;
     uint m_revisionsVisible : 1;
     uint m_lineNumbersVisible : 1;
     uint m_highlightCurrentLine : 1;
diff --git a/src/plugins/texteditor/behaviorsettings.cpp b/src/plugins/texteditor/behaviorsettings.cpp
index 32ecc500bc4..39445b34ec7 100644
--- a/src/plugins/texteditor/behaviorsettings.cpp
+++ b/src/plugins/texteditor/behaviorsettings.cpp
@@ -33,12 +33,14 @@
 #include <QtCore/QString>
 
 static const char * const mouseNavigationKey = "MouseNavigation";
+static const char * const scrollWheelZoomingKey = "ScrollWheelZooming";
 static const char * const groupPostfix = "BehaviorSettings";
 
 namespace TextEditor {
 
 BehaviorSettings::BehaviorSettings() :
-    m_mouseNavigation(true)
+    m_mouseNavigation(true),
+    m_scrollWheelZooming(true)
 {
 }
 
@@ -49,6 +51,7 @@ void BehaviorSettings::toSettings(const QString &category, QSettings *s) const
         group.insert(0, category);
     s->beginGroup(group);
     s->setValue(QLatin1String(mouseNavigationKey), m_mouseNavigation);
+    s->setValue(QLatin1String(scrollWheelZoomingKey), m_scrollWheelZooming);
     s->endGroup();
 }
 
@@ -62,11 +65,13 @@ void BehaviorSettings::fromSettings(const QString &category, const QSettings *s)
     *this = BehaviorSettings(); // Assign defaults
 
     m_mouseNavigation = s->value(group + QLatin1String(mouseNavigationKey), m_mouseNavigation).toBool();
+    m_scrollWheelZooming = s->value(group + QLatin1String(scrollWheelZoomingKey), m_scrollWheelZooming).toBool();
 }
 
 bool BehaviorSettings::equals(const BehaviorSettings &ds) const
 {
     return m_mouseNavigation == ds.m_mouseNavigation
+        && m_scrollWheelZooming == ds.m_scrollWheelZooming
         ;
 }
 
diff --git a/src/plugins/texteditor/behaviorsettings.h b/src/plugins/texteditor/behaviorsettings.h
index 27b07e34e6b..d09dd241ffe 100644
--- a/src/plugins/texteditor/behaviorsettings.h
+++ b/src/plugins/texteditor/behaviorsettings.h
@@ -52,6 +52,7 @@ struct TEXTEDITOR_EXPORT BehaviorSettings
     bool equals(const BehaviorSettings &bs) const;
 
     bool m_mouseNavigation;
+    bool m_scrollWheelZooming;
 };
 
 inline bool operator==(const BehaviorSettings &t1, const BehaviorSettings &t2) { return t1.equals(t2); }
diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp
index aaa38951546..79c0d7e29aa 100644
--- a/src/plugins/texteditor/behaviorsettingspage.cpp
+++ b/src/plugins/texteditor/behaviorsettingspage.cpp
@@ -109,9 +109,10 @@ QWidget *BehaviorSettingsPage::createPage(QWidget *parent)
           << ' ' << m_d->m_page.cleanWhitespace->text()
           << ' ' << m_d->m_page.addFinalNewLine->text()
           << ' ' << m_d->m_page.mouseNavigation->text()
+          << ' ' << m_d->m_page.scrollWheelZooming->text()
           << ' ' << m_d->m_page.groupBoxTabAndIndentSettings->title()
           << ' ' << m_d->m_page.groupBoxStorageSettings->title()
-          << ' ' << m_d->m_page.groupBoxNavigation->title();
+          << ' ' << m_d->m_page.groupBoxMouse->title();
         m_d->m_searchKeywords.remove(QLatin1Char('&'));
     }
     return w;
@@ -170,6 +171,7 @@ void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings,
     storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked();
 
     behaviorSettings.m_mouseNavigation = m_d->m_page.mouseNavigation->isChecked();
+    behaviorSettings.m_scrollWheelZooming = m_d->m_page.scrollWheelZooming->isChecked();
 }
 
 void BehaviorSettingsPage::settingsToUI()
@@ -190,6 +192,7 @@ void BehaviorSettingsPage::settingsToUI()
 
     const BehaviorSettings &behaviorSettings = m_d->m_behaviorSettings;
     m_d->m_page.mouseNavigation->setChecked(behaviorSettings.m_mouseNavigation);
+    m_d->m_page.scrollWheelZooming->setChecked(behaviorSettings.m_scrollWheelZooming);
 }
 
 TabSettings BehaviorSettingsPage::tabSettings() const
diff --git a/src/plugins/texteditor/behaviorsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui
index 70490383b8c..52bd0970c2a 100644
--- a/src/plugins/texteditor/behaviorsettingspage.ui
+++ b/src/plugins/texteditor/behaviorsettingspage.ui
@@ -277,9 +277,9 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBoxNavigation">
+    <widget class="QGroupBox" name="groupBoxMouse">
      <property name="title">
-      <string>Navigation</string>
+      <string>Mouse</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
@@ -289,6 +289,13 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QCheckBox" name="scrollWheelZooming">
+        <property name="text">
+         <string>Enable scroll &amp;wheel zooming</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
-- 
GitLab