From 7a88612a8e39ef37fef39d25a7e8c38c1e011b4f Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 11 Aug 2015 14:13:06 +0200 Subject: [PATCH] Debugger: Don't add a new watcher item when editing one in-place Task-number: QTCREATORBUG-14775 Task-number: QTCREATORBUG-14851 Change-Id: I06638ffc2d5a1723e87c1c5a651592e7e0bbad22 Reviewed-by: Orgad Shaneh --- src/plugins/debugger/watchhandler.cpp | 26 +++++++++++++++++++++++++- src/plugins/debugger/watchhandler.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 80d59291fa2..eab2f7f8c6e 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -882,7 +882,7 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role case Qt::EditRole: switch (idx.column()) { case 0: { - m_handler->watchExpression(value.toString().trimmed()); + m_handler->updateWatchExpression(item, value.toString().trimmed().toUtf8()); break; } case 1: // Change value @@ -1278,6 +1278,30 @@ void WatchHandler::watchExpression(const QString &exp0, const QString &name) if (m_model->m_engine->state() == DebuggerNotReady) { item->setAllUnneeded(); item->setValue(QString(QLatin1Char(' '))); + item->update(); + } else { + m_model->m_engine->updateItem(item->iname); + } + updateWatchersWindow(); +} + +void WatchHandler::updateWatchExpression(WatchItem *item, const QByteArray &newExp) +{ + if (newExp.isEmpty()) + return; + + if (item->exp != newExp) { + theWatcherNames.insert(newExp, theWatcherNames.value(item->exp)); + theWatcherNames.remove(item->exp); + item->exp = newExp; + item->name = QString::fromUtf8(item->exp); + } + + saveWatchers(); + if (m_model->m_engine->state() == DebuggerNotReady) { + item->setAllUnneeded(); + item->setValue(QString(QLatin1Char(' '))); + item->update(); } else { m_model->m_engine->updateItem(item->iname); } diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 890fd4d256a..f11c1fdc0f5 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -153,6 +153,7 @@ public: void cleanup(); void watchExpression(const QString &exp, const QString &name = QString()); + void updateWatchExpression(WatchItem *item, const QByteArray &newExp); void watchVariable(const QString &exp); Q_SLOT void clearWatches();