OSDN Git Service

Editors: Introduce option to constrain tooltips
authorLeandro Melo <leandro.melo@nokia.com>
Wed, 20 Jul 2011 11:40:24 +0000 (13:40 +0200)
committerLeandro T. C. Melo <leandro.melo@nokia.com>
Wed, 20 Jul 2011 13:46:18 +0000 (15:46 +0200)
It's now possible to have tooltips popup only when the Shift key is down.
This has been requested quite a lot.

Task-number: QTCREATORBUG-5282
Change-Id: Ibc8568737fecbeff981ba97d9f155a70f6072413
Reviewed-on: http://codereview.qt.nokia.com/1881
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@nokia.com>
src/plugins/texteditor/basetexteditor.cpp
src/plugins/texteditor/basetexteditor.h
src/plugins/texteditor/behaviorsettings.cpp
src/plugins/texteditor/behaviorsettings.h
src/plugins/texteditor/behaviorsettingswidget.cpp
src/plugins/texteditor/behaviorsettingswidget.ui

index a14afe3..4eb148e 100644 (file)
@@ -2292,6 +2292,16 @@ bool BaseTextEditorWidget::scrollWheelZoomingEnabled() const
     return d->m_behaviorSettings.m_scrollWheelZooming;
 }
 
+void BaseTextEditorWidget::setConstrainTooltips(bool b)
+{
+    d->m_behaviorSettings.m_constrainTooltips = b;
+}
+
+bool BaseTextEditorWidget::constrainTooltips() const
+{
+    return d->m_behaviorSettings.m_constrainTooltips;
+}
+
 void BaseTextEditorWidget::setRevisionsVisible(bool b)
 {
     d->m_revisionsVisible = b;
@@ -2511,9 +2521,14 @@ bool BaseTextEditorWidget::viewportEvent(QEvent *event)
         if (ce->reason() == QContextMenuEvent::Mouse && !textCursor().hasSelection())
             setTextCursor(cursorForPosition(ce->pos()));
     } else if (event->type() == QEvent::ToolTip) {
+        if (QApplication::keyboardModifiers() & Qt::ControlModifier
+                || (!(QApplication::keyboardModifiers() & Qt::ShiftModifier)
+                    && d->m_behaviorSettings.m_constrainTooltips)) {
+            // Tooltips should be eaten when either control is pressed (so they don't get in the
+            // way of code navigation) or if they are in constrained mode and shift is not pressed.
+            return true;
+        }
         const QHelpEvent *he = static_cast<QHelpEvent*>(event);
-        if (QApplication::keyboardModifiers() & Qt::ControlModifier)
-            return true; // eat tooltip event when control is pressed
         const QPoint &pos = he->pos();
 
         RefactorMarker refactorMarker = d->m_refactorOverlay->markerAt(pos);
@@ -4166,9 +4181,13 @@ void BaseTextEditorWidget::leaveEvent(QEvent *e)
 
 void BaseTextEditorWidget::keyReleaseEvent(QKeyEvent *e)
 {
-    // Clear link emulation when Ctrl is released
-    if (e->key() == Qt::Key_Control)
+    if (e->key() == Qt::Key_Control) {
         clearLink();
+    } else if (e->key() == Qt::Key_Shift
+             && d->m_behaviorSettings.m_constrainTooltips
+             && ToolTip::instance()->isVisible()) {
+        ToolTip::instance()->hide();
+    }
 
     QPlainTextEdit::keyReleaseEvent(e);
 }
@@ -5481,8 +5500,7 @@ void BaseTextEditorWidget::setDisplaySettings(const DisplaySettings &ds)
 
 void BaseTextEditorWidget::setBehaviorSettings(const TextEditor::BehaviorSettings &bs)
 {
-    setMouseNavigationEnabled(bs.m_mouseNavigation);
-    setScrollWheelZoomingEnabled(bs.m_scrollWheelZooming);
+    d->m_behaviorSettings = bs;
 }
 
 void BaseTextEditorWidget::setStorageSettings(const StorageSettings &storageSettings)
index ab64861..f64d8aa 100644 (file)
@@ -203,6 +203,9 @@ public:
     void setScrollWheelZoomingEnabled(bool b);
     bool scrollWheelZoomingEnabled() const;
 
+    void setConstrainTooltips(bool b);
+    bool constrainTooltips() const;
+
     void setRevisionsVisible(bool b);
     bool revisionsVisible() const;
 
index 1a45854..7e82a64 100644 (file)
 
 static const char mouseNavigationKey[] = "MouseNavigation";
 static const char scrollWheelZoomingKey[] = "ScrollWheelZooming";
+static const char constrainTooltips[] = "ConstrainTooltips";
 static const char groupPostfix[] = "BehaviorSettings";
 
 namespace TextEditor {
 
 BehaviorSettings::BehaviorSettings() :
     m_mouseNavigation(true),
-    m_scrollWheelZooming(true)
+    m_scrollWheelZooming(true),
+    m_constrainTooltips(false)
 {
 }
 
@@ -64,6 +66,7 @@ void BehaviorSettings::toMap(const QString &prefix, QVariantMap *map) const
 {
     map->insert(prefix + QLatin1String(mouseNavigationKey), m_mouseNavigation);
     map->insert(prefix + QLatin1String(scrollWheelZoomingKey), m_scrollWheelZooming);
+    map->insert(prefix + QLatin1String(constrainTooltips), m_constrainTooltips);
 }
 
 void BehaviorSettings::fromMap(const QString &prefix, const QVariantMap &map)
@@ -72,12 +75,15 @@ void BehaviorSettings::fromMap(const QString &prefix, const QVariantMap &map)
         map.value(prefix + QLatin1String(mouseNavigationKey), m_mouseNavigation).toBool();
     m_scrollWheelZooming =
         map.value(prefix + QLatin1String(scrollWheelZoomingKey), m_scrollWheelZooming).toBool();
+    m_constrainTooltips =
+        map.value(prefix + QLatin1String(constrainTooltips), m_constrainTooltips).toBool();
 }
 
 bool BehaviorSettings::equals(const BehaviorSettings &ds) const
 {
     return m_mouseNavigation == ds.m_mouseNavigation
         && m_scrollWheelZooming == ds.m_scrollWheelZooming
+        && m_constrainTooltips == ds.m_constrainTooltips
         ;
 }
 
index 6aca413..1cc80da 100644 (file)
@@ -62,6 +62,7 @@ public:
 
     bool m_mouseNavigation;
     bool m_scrollWheelZooming;
+    bool m_constrainTooltips;
 };
 
 inline bool operator==(const BehaviorSettings &t1, const BehaviorSettings &t2) { return t1.equals(t2); }
index 5256bf4..46f222d 100644 (file)
@@ -90,6 +90,8 @@ BehaviorSettingsWidget::BehaviorSettingsWidget(QWidget *parent)
             this, SLOT(slotBehaviorSettingsChanged()));
     connect(m_d->m_ui.scrollWheelZooming, SIGNAL(clicked(bool)),
             this, SLOT(slotBehaviorSettingsChanged()));
+    connect(m_d->m_ui.constrainTooltips, SIGNAL(clicked()),
+            this, SLOT(slotBehaviorSettingsChanged()));
     connect(m_d->m_ui.utf8BomBox, SIGNAL(currentIndexChanged(int)),
             this, SLOT(slotExtraEncodingChanged()));
     connect(m_d->m_ui.encodingBox, SIGNAL(currentIndexChanged(int)),
@@ -149,12 +151,14 @@ void BehaviorSettingsWidget::setAssignedBehaviorSettings(const BehaviorSettings
 {
     m_d->m_ui.mouseNavigation->setChecked(behaviorSettings.m_mouseNavigation);
     m_d->m_ui.scrollWheelZooming->setChecked(behaviorSettings.m_scrollWheelZooming);
+    m_d->m_ui.constrainTooltips->setChecked(behaviorSettings.m_constrainTooltips);
 }
 
 void BehaviorSettingsWidget::assignedBehaviorSettings(BehaviorSettings *behaviorSettings) const
 {
     behaviorSettings->m_mouseNavigation = m_d->m_ui.mouseNavigation->isChecked();
     behaviorSettings->m_scrollWheelZooming = m_d->m_ui.scrollWheelZooming->isChecked();
+    behaviorSettings->m_constrainTooltips = m_d->m_ui.constrainTooltips->isChecked();
 }
 
 void BehaviorSettingsWidget::setAssignedExtraEncodingSettings(
@@ -184,6 +188,7 @@ QString BehaviorSettingsWidget::collectUiKeywords() const
         << sep << m_d->m_ui.utf8BomLabel->text()
         << sep << m_d->m_ui.mouseNavigation->text()
         << sep << m_d->m_ui.scrollWheelZooming->text()
+        << sep << m_d->m_ui.constrainTooltips->text()
         << sep << m_d->m_ui.groupBoxStorageSettings->title()
         << sep << m_d->m_ui.groupBoxEncodings->title()
         << sep << m_d->m_ui.groupBoxMouse->title();
index 20641b5..b30dc6d 100644 (file)
      <property name="title">
       <string>Mouse</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
+     <layout class="QVBoxLayout" name="verticalLayout">
       <item>
        <widget class="QCheckBox" name="mouseNavigation">
         <property name="text">
        </widget>
       </item>
       <item>
+       <widget class="QCheckBox" name="constrainTooltips">
+        <property name="text">
+         <string>Enable &amp;tooltips only when Shift key is down</string>
+        </property>
+       </widget>
+      </item>
+      <item>
        <spacer name="verticalSpacer_2">
         <property name="orientation">
          <enum>Qt::Vertical</enum>