From bd2d160a9506c41cb861e560c4f8e648aefcad4c Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 15 Sep 2010 19:02:12 +0200
Subject: [PATCH] debugger: suppress variable tooltips with outdated contents

---
 src/plugins/debugger/debuggerengine.cpp  | 18 +++++++++++++++++-
 src/plugins/debugger/debuggerengine.h    |  1 +
 src/plugins/debugger/debuggertooltip.cpp |  1 -
 src/plugins/debugger/gdb/gdbengine.cpp   | 10 +++++++---
 src/plugins/debugger/gdb/gdbengine.h     |  5 +++--
 src/plugins/debugger/stackhandler.cpp    |  7 ++-----
 src/plugins/debugger/watchhandler.cpp    |  6 ++++++
 src/plugins/debugger/watchhandler.h      |  1 +
 8 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index e85885c9a61..bff0904e7f1 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -35,6 +35,7 @@
 #include "debuggeroutputwindow.h"
 #include "debuggerplugin.h"
 #include "debuggerstringutils.h"
+#include "debuggertooltip.h"
 
 #include "breakhandler.h"
 #include "moduleshandler.h"
@@ -421,11 +422,26 @@ void DebuggerEngine::showStatusMessage(const QString &msg, int timeout) const
     showMessage(msg, StatusBar, timeout);
 }
 
+void DebuggerEngine::removeTooltip()
+{
+    watchHandler()->removeTooltip();
+    hideDebuggerToolTip();
+}
+
 void DebuggerEngine::handleCommand(int role, const QVariant &value)
 {
-    //qDebug() << "COMMAND: " << role << value;
+    if (role != RequestToolTipByExpressionRole)
+        removeTooltip();
 
     switch (role) {
+        case RequestActivateFrameRole:
+            activateFrame(value.toInt());
+            break;
+
+        case RequestReloadFullStackRole:
+            reloadFullStack();
+            break;
+
         case RequestReloadSourceFilesRole:
             reloadSourceFiles();
             break;
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 8b4b21eed35..6f2df32ee19 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -185,6 +185,7 @@ public:
     virtual void selectThread(int index);
 
     virtual void assignValueInDebugger(const QString &expr, const QString &value);
+    virtual void removeTooltip();
 
     // Convenience
     static QMessageBox *showMessageBox
diff --git a/src/plugins/debugger/debuggertooltip.cpp b/src/plugins/debugger/debuggertooltip.cpp
index 96452a4ba40..da7511fbefd 100644
--- a/src/plugins/debugger/debuggertooltip.cpp
+++ b/src/plugins/debugger/debuggertooltip.cpp
@@ -151,7 +151,6 @@ void ToolTipWidget::run(const QPoint &point, QAbstractItemModel *model,
 {
     move(point);
     setModel(model);
-    setRootIndex(index.parent());
     computeSize();
     setRootIsDecorated(model->hasChildren(index));
     // FIXME: use something more sensible
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index f0bab9d679a..179802a3cab 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -3189,9 +3189,6 @@ bool GdbEngine::supportsThreads() const
 //
 //////////////////////////////////////////////////////////////////////
 
-QString GdbEngine::m_toolTipExpression;
-QPoint GdbEngine::m_toolTipPos;
-
 bool GdbEngine::showToolTip()
 {
     QByteArray iname = tooltipIName(m_toolTipExpression);
@@ -4394,6 +4391,13 @@ void GdbEngine::resetCommandQueue()
     }
 }
 
+void GdbEngine::removeTooltip()
+{
+    m_toolTipExpression.clear();
+    m_toolTipPos = QPoint();
+    DebuggerEngine::removeTooltip();
+}
+
 //
 // Factory
 //
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 24ffdc63294..3e0f77e87db 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -532,9 +532,10 @@ private: ////////// View & Data Stuff //////////
     AbstractGdbProcess *gdbProc() const;
     void showExecutionError(const QString &message);
 
-    static QString m_toolTipExpression;
-    static QPoint m_toolTipPos;
+    void removeTooltip();
     static QByteArray tooltipIName(const QString &exp);
+    QString m_toolTipExpression;
+    QPoint m_toolTipPos;
 
     // HACK:
     StackFrame m_targetFrame;
diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp
index dbf9deee52e..d7e995f0831 100644
--- a/src/plugins/debugger/stackhandler.cpp
+++ b/src/plugins/debugger/stackhandler.cpp
@@ -140,8 +140,9 @@ QVariant StackHandler::data(const QModelIndex &index, int role) const
 bool StackHandler::setData(const QModelIndex &index, const QVariant &value, int role)
 {
     switch (role) {
+        case RequestReloadFullStackRole:
         case RequestActivateFrameRole:
-            m_engine->activateFrame(value.toInt());
+            m_engine->handleCommand(role, value);
             return true;
 
         case RequestShowMemoryRole:
@@ -154,10 +155,6 @@ bool StackHandler::setData(const QModelIndex &index, const QVariant &value, int
             return true;
         }
     
-        case RequestReloadFullStackRole:
-            m_engine->reloadFullStack();
-            return true;
-    
         default:
             return QAbstractTableModel::setData(index, value, role);
     }
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 7d55dc7f413..2871f2135ab 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1661,5 +1661,11 @@ void WatchHandler::showInEditorHelper(QString *contents, WatchItem *item, int de
        showInEditorHelper(contents, child, depth + 1);
 }
 
+void WatchHandler::removeTooltip()
+{
+    m_tooltips->reinitialize();
+    m_tooltips->emitAllChanged();
+}
+
 } // namespace Internal
 } // namespace Debugger
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index 42380f8fac3..0c8f0f15eb4 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -156,6 +156,7 @@ public:
 
     void loadSessionData();
     void saveSessionData();
+    void removeTooltip();
 
     void initializeFromTemplate(WatchHandler *other);
     void storeToTemplate(WatchHandler *other);
-- 
GitLab