From f335da7a752fabbc2f13e6a31dfd386316f00f31 Mon Sep 17 00:00:00 2001
From: Eike Ziller <eike.ziller@digia.com>
Date: Mon, 10 Feb 2014 13:23:59 +0100
Subject: [PATCH] Editors: Add option to not hide the mouse cursor when typing

Task-number: QTCREATORBUG-3584

Change-Id: Iae5551d36b72c5712f3276b15dfa85982a776dcf
Reviewed-by: David Schulz <david.schulz@digia.com>
---
 src/plugins/texteditor/basetexteditor.cpp         | 12 +++++++++++-
 src/plugins/texteditor/basetexteditor.h           |  3 +++
 src/plugins/texteditor/behaviorsettings.cpp       |  8 +++++++-
 src/plugins/texteditor/behaviorsettings.h         |  1 +
 src/plugins/texteditor/behaviorsettingswidget.cpp |  4 ++++
 src/plugins/texteditor/behaviorsettingswidget.ui  | 11 +++++++++--
 6 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 28751584912..78e48540915 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1508,7 +1508,7 @@ static inline bool isModifier(QKeyEvent *e)
 
 void BaseTextEditorWidget::keyPressEvent(QKeyEvent *e)
 {
-    if (!isModifier(e))
+    if (!isModifier(e) && mouseHidingEnabled())
         viewport()->setCursor(Qt::BlankCursor);
     ToolTip::hide();
 
@@ -2268,6 +2268,16 @@ bool BaseTextEditorWidget::mouseNavigationEnabled() const
     return d->m_behaviorSettings.m_mouseNavigation;
 }
 
+void BaseTextEditorWidget::setMouseHidingEnabled(bool b)
+{
+    d->m_behaviorSettings.m_mouseHiding = b;
+}
+
+bool BaseTextEditorWidget::mouseHidingEnabled() const
+{
+    return d->m_behaviorSettings.m_mouseHiding;
+}
+
 void BaseTextEditorWidget::setScrollWheelZoomingEnabled(bool b)
 {
     d->m_behaviorSettings.m_scrollWheelZooming = b;
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index b1cff82863d..ac8a44ec38f 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -184,6 +184,9 @@ public:
     void setMouseNavigationEnabled(bool b);
     bool mouseNavigationEnabled() const;
 
+    void setMouseHidingEnabled(bool b);
+    bool mouseHidingEnabled() const;
+
     void setScrollWheelZoomingEnabled(bool b);
     bool scrollWheelZoomingEnabled() const;
 
diff --git a/src/plugins/texteditor/behaviorsettings.cpp b/src/plugins/texteditor/behaviorsettings.cpp
index 9a08ffe3c13..090ff3fa1cd 100644
--- a/src/plugins/texteditor/behaviorsettings.cpp
+++ b/src/plugins/texteditor/behaviorsettings.cpp
@@ -34,6 +34,7 @@
 #include <QSettings>
 #include <QString>
 
+static const char mouseHidingKey[] = "MouseHiding";
 static const char mouseNavigationKey[] = "MouseNavigation";
 static const char scrollWheelZoomingKey[] = "ScrollWheelZooming";
 static const char constrainTooltips[] = "ConstrainTooltips";
@@ -44,6 +45,7 @@ static const char groupPostfix[] = "BehaviorSettings";
 namespace TextEditor {
 
 BehaviorSettings::BehaviorSettings() :
+    m_mouseHiding(true),
     m_mouseNavigation(true),
     m_scrollWheelZooming(true),
     m_constrainHoverTooltips(false),
@@ -65,6 +67,7 @@ void BehaviorSettings::fromSettings(const QString &category, const QSettings *s)
 
 void BehaviorSettings::toMap(const QString &prefix, QVariantMap *map) const
 {
+    map->insert(prefix + QLatin1String(mouseHidingKey), m_mouseHiding);
     map->insert(prefix + QLatin1String(mouseNavigationKey), m_mouseNavigation);
     map->insert(prefix + QLatin1String(scrollWheelZoomingKey), m_scrollWheelZooming);
     map->insert(prefix + QLatin1String(constrainTooltips), m_constrainHoverTooltips);
@@ -74,6 +77,8 @@ void BehaviorSettings::toMap(const QString &prefix, QVariantMap *map) const
 
 void BehaviorSettings::fromMap(const QString &prefix, const QVariantMap &map)
 {
+    m_mouseHiding =
+            map.value(prefix + QLatin1String(mouseHidingKey), m_mouseHiding).toBool();
     m_mouseNavigation =
         map.value(prefix + QLatin1String(mouseNavigationKey), m_mouseNavigation).toBool();
     m_scrollWheelZooming =
@@ -88,7 +93,8 @@ void BehaviorSettings::fromMap(const QString &prefix, const QVariantMap &map)
 
 bool BehaviorSettings::equals(const BehaviorSettings &ds) const
 {
-    return m_mouseNavigation == ds.m_mouseNavigation
+    return m_mouseHiding == ds.m_mouseHiding
+        && m_mouseNavigation == ds.m_mouseNavigation
         && m_scrollWheelZooming == ds.m_scrollWheelZooming
         && m_constrainHoverTooltips == ds.m_constrainHoverTooltips
         && m_camelCaseNavigation == ds.m_camelCaseNavigation
diff --git a/src/plugins/texteditor/behaviorsettings.h b/src/plugins/texteditor/behaviorsettings.h
index fda08042989..18f8d5fb8bf 100644
--- a/src/plugins/texteditor/behaviorsettings.h
+++ b/src/plugins/texteditor/behaviorsettings.h
@@ -57,6 +57,7 @@ public:
 
     bool equals(const BehaviorSettings &bs) const;
 
+    bool m_mouseHiding;
     bool m_mouseNavigation;
     bool m_scrollWheelZooming;
     bool m_constrainHoverTooltips;
diff --git a/src/plugins/texteditor/behaviorsettingswidget.cpp b/src/plugins/texteditor/behaviorsettingswidget.cpp
index b7b9948e592..818e884c57d 100644
--- a/src/plugins/texteditor/behaviorsettingswidget.cpp
+++ b/src/plugins/texteditor/behaviorsettingswidget.cpp
@@ -98,6 +98,8 @@ BehaviorSettingsWidget::BehaviorSettingsWidget(QWidget *parent)
             this, SLOT(slotStorageSettingsChanged()));
     connect(d->m_ui.cleanIndentation, SIGNAL(clicked(bool)),
             this, SLOT(slotStorageSettingsChanged()));
+    connect(d->m_ui.mouseHiding, SIGNAL(clicked()),
+            this, SLOT(slotBehaviorSettingsChanged()));
     connect(d->m_ui.mouseNavigation, SIGNAL(clicked()),
             this, SLOT(slotBehaviorSettingsChanged()));
     connect(d->m_ui.scrollWheelZooming, SIGNAL(clicked(bool)),
@@ -193,6 +195,7 @@ void BehaviorSettingsWidget::updateConstrainTooltipsBoxTooltip() const
 
 void BehaviorSettingsWidget::setAssignedBehaviorSettings(const BehaviorSettings &behaviorSettings)
 {
+    d->m_ui.mouseHiding->setChecked(behaviorSettings.m_mouseHiding);
     d->m_ui.mouseNavigation->setChecked(behaviorSettings.m_mouseNavigation);
     d->m_ui.scrollWheelZooming->setChecked(behaviorSettings.m_scrollWheelZooming);
     d->m_ui.constrainTooltipsBox->setCurrentIndex(behaviorSettings.m_constrainHoverTooltips ? 1 : 0);
@@ -203,6 +206,7 @@ void BehaviorSettingsWidget::setAssignedBehaviorSettings(const BehaviorSettings
 
 void BehaviorSettingsWidget::assignedBehaviorSettings(BehaviorSettings *behaviorSettings) const
 {
+    behaviorSettings->m_mouseHiding = d->m_ui.mouseHiding->isChecked();
     behaviorSettings->m_mouseNavigation = d->m_ui.mouseNavigation->isChecked();
     behaviorSettings->m_scrollWheelZooming = d->m_ui.scrollWheelZooming->isChecked();
     behaviorSettings->m_constrainHoverTooltips = (d->m_ui.constrainTooltipsBox->currentIndex() == 1);
diff --git a/src/plugins/texteditor/behaviorsettingswidget.ui b/src/plugins/texteditor/behaviorsettingswidget.ui
index 5aeb0f37c5c..423a270d84f 100644
--- a/src/plugins/texteditor/behaviorsettingswidget.ui
+++ b/src/plugins/texteditor/behaviorsettingswidget.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>802</width>
-    <height>441</height>
+    <width>801</width>
+    <height>459</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
@@ -329,6 +329,13 @@ Specifies how backspace interacts with indentation.
         <string>Mouse and Keyboard</string>
        </property>
        <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QCheckBox" name="mouseHiding">
+          <property name="text">
+           <string>Hide mouse cursor while typing</string>
+          </property>
+         </widget>
+        </item>
         <item>
          <widget class="QCheckBox" name="mouseNavigation">
           <property name="text">
-- 
GitLab