diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 2eefdb7c1f21b381b4f6e00e9d874fe6ba1b1eb1..7daf735da2486c1302ed1105a4d7457cd2119b90 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -1074,7 +1074,7 @@ void CdbEngine::updateLocalVariable(const QByteArray &iname) unsigned CdbEngine::debuggerCapabilities() const { return DisassemblerCapability | RegisterCapability | ShowMemoryCapability - |WatchpointByAddressCapability|JumpToLineCapability|AddWatcherCapability + |WatchpointByAddressCapability|JumpToLineCapability|AddWatcherCapability|WatchWidgetsCapability |ReloadModuleCapability |BreakOnThrowAndCatchCapability // Sort-of: Can break on throw(). |BreakConditionCapability|TracePointCapability @@ -1083,11 +1083,6 @@ unsigned CdbEngine::debuggerCapabilities() const |RunToLineCapability; } -bool CdbEngine::canWatchWidgets() const -{ - return true; -} - void CdbEngine::executeStep() { if (!m_operateByInstruction) diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 27a4e7b2b877c3de7e28f571e358e8b8f5cd5b34..9c21dd4b0a877edbd517019def5b3ecb073277bf 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -99,7 +99,6 @@ public: virtual void updateWatchData(const WatchData &data, const WatchUpdateFlags & flags = WatchUpdateFlags()); virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; virtual void watchPoint(const QPoint &); virtual void setRegisterValue(int regnr, const QString &value); diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index c14c682279616a6c0277d20bba1b95c816b1e2d5..35ae2fb8f83dc9c7290c995507d653e969e8b0d7 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -148,12 +148,14 @@ enum DebuggerCapabilities ReturnFromFunctionCapability = 0x2000, CreateFullBacktraceCapability = 0x4000, AddWatcherCapability = 0x8000, - WatchpointByAddressCapability = 0x10000, - WatchpointByExpressionCapability = 0x20000, - ShowModuleSymbolsCapability = 0x40000, - CatchCapability = 0x80000, //!< fork, vfork, syscall - OperateByInstructionCapability = 0x100000, - RunToLineCapability = 0x200000, + AddWatcherWhileRunningCapability = 0x10000, + WatchWidgetsCapability = 0x20000, + WatchpointByAddressCapability = 0x40000, + WatchpointByExpressionCapability = 0x80000, + ShowModuleSymbolsCapability = 0x100000, + CatchCapability = 0x200000, //!< fork, vfork, syscall + OperateByInstructionCapability = 0x400000, + RunToLineCapability = 0x800000, AllDebuggerCapabilities = 0xFFFFFFFF }; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 15f86c2ac14836a5226afbe442fa3d4a4260f1e2..7065a3e1e5a97e64df488db454a015f2bdcb7b21 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1298,16 +1298,6 @@ unsigned DebuggerEngine::debuggerCapabilities() const return 0; } -bool DebuggerEngine::canWatchWidgets() const -{ - return false; -} - -bool DebuggerEngine::acceptsWatchesWhileRunning() const -{ - return false; -} - bool DebuggerEngine::isSynchronous() const { return false; diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 7fabfd253d91bbdb44df4cc0a8055773359ab4d9..d20bb421bf3fd737cedb1ac717af5f5a7eca5411 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -193,8 +193,6 @@ public: virtual void setRegisterValue(int regnr, const QString &value); virtual void addOptionPages(QList<Core::IOptionsPage*> *) const; virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; - virtual bool acceptsWatchesWhileRunning() const; virtual bool isSynchronous() const; virtual QByteArray qtNamespace() const; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 0f4169cf5452455d102e4b5c8be1cb8d77c39bc9..1f3737737a84160cea5f50331405a17d2227e6d4 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1999,6 +1999,7 @@ unsigned GdbEngine::debuggerCapabilities() const | WatchpointByAddressCapability | WatchpointByExpressionCapability | AddWatcherCapability + | WatchWidgetsCapability | ShowModuleSymbolsCapability | CatchCapability | OperateByInstructionCapability @@ -2014,10 +2015,6 @@ unsigned GdbEngine::debuggerCapabilities() const return caps | SnapshotCapability; } -bool GdbEngine::canWatchWidgets() const -{ - return true; -} void GdbEngine::continueInferiorInternal() { diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 99d869e38849ad1100d0fdaf1ac5ed37eaf31d0a..6dc50b4df80afa3410848d9fdd26942f2ebff8fa 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -238,7 +238,6 @@ private: ////////// General Interface ////////// virtual void runEngine(); virtual unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; virtual void detachDebugger(); virtual void shutdownEngine(); virtual void shutdownInferior(); diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index a05a7fd35f348148ee76ed60d6b1b3a97d4bffb6..963df0f16af8d94efee7d2fe77b180b1e926584b 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -252,17 +252,15 @@ void QmlCppEngine::setRegisterValue(int regnr, const QString &value) unsigned QmlCppEngine::debuggerCapabilities() const { // ### this could also be an OR of both engines' capabilities - return d->m_cppEngine->debuggerCapabilities(); -} - -bool QmlCppEngine::canWatchWidgets() const -{ - return d->m_activeEngine->canWatchWidgets(); -} - -bool QmlCppEngine::acceptsWatchesWhileRunning() const -{ - return d->m_activeEngine->acceptsWatchesWhileRunning(); + unsigned result = d->m_cppEngine->debuggerCapabilities(); + if (d->m_activeEngine != d->m_cppEngine) { + const unsigned qmlCapabilities = d->m_qmlEngine->debuggerCapabilities(); + if (qmlCapabilities & AddWatcherWhileRunningCapability) + result |= AddWatcherWhileRunningCapability; + if (!(qmlCapabilities & WatchWidgetsCapability)) + result &= ~WatchWidgetsCapability; + } + return result; } bool QmlCppEngine::isSynchronous() const diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 322e4a9d4473c1044bbf38ea9ab6e00e026adf22..80bf87e52aac910f9f4fe2d9844f0ede9338b1c6 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -74,8 +74,6 @@ public: void setRegisterValue(int regnr, const QString &value); unsigned debuggerCapabilities() const; - virtual bool canWatchWidgets() const; - virtual bool acceptsWatchesWhileRunning() const; bool isSynchronous() const; QByteArray qtNamespace() const; diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 7b7aa9e4b0b9d3f2d7b9ad653176d01530bcd5f5..06a880e36559920454d412e88660e2c02882da72 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -321,11 +321,6 @@ void QmlEngine::showMessage(const QString &msg, int channel, int timeout) const DebuggerEngine::showMessage(msg, channel, timeout); } -bool QmlEngine::acceptsWatchesWhileRunning() const -{ - return true; -} - void QmlEngine::closeConnection() { disconnect(watchersModel(),SIGNAL(layoutChanged()),this,SLOT(synchronizeWatchers())); @@ -645,7 +640,7 @@ void QmlEngine::synchronizeWatchers() unsigned QmlEngine::debuggerCapabilities() const { - return AddWatcherCapability; + return AddWatcherCapability|AddWatcherWhileRunningCapability; /*ReverseSteppingCapability | SnapshotCapability | AutoDerefPointersCapability | DisassemblerCapability | RegisterCapability | ShowMemoryCapability diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h index 2658de726a8c01a56cf054137a5df45529b11f5d..ae96ad1d2610d6bdcd0767c4b8e44e52a7393d68 100644 --- a/src/plugins/debugger/qml/qmlengine.h +++ b/src/plugins/debugger/qml/qmlengine.h @@ -66,7 +66,6 @@ public: void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const; void filterApplicationMessage(const QString &msg, int channel); - virtual bool acceptsWatchesWhileRunning() const; QString toFileInProject(const QUrl &fileUrl); void inferiorSpontaneousStop(); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 2624c790097d745162496fcdde19e7aab2c12f44..944cedc9e447443d2ce7be6fac140418abc86ccb 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -892,7 +892,7 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const // Disable editing if debuggee is positively running. const bool isRunning = engine() && engine()->state() == InferiorRunOk; - if (isRunning && engine() && !engine()->acceptsWatchesWhileRunning()) + if (isRunning && engine() && !(engine()->debuggerCapabilities() & AddWatcherWhileRunningCapability)) return notEditable; const WatchData &data = *watchItem(idx); diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 8cf50608315d3fa182718b0d4c5273abf5be9c68..4d04ab1682ffa68e354837eea04c18f4b511a8c6 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -716,7 +716,7 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) const DebuggerState state = engine->state(); const bool canInsertWatches = state == InferiorStopOk || state == InferiorUnrunnable - || (state == InferiorRunOk && engine->acceptsWatchesWhileRunning()); + || (state == InferiorRunOk && (engineCapabilities & AddWatcherWhileRunningCapability)); QMenu breakpointMenu; breakpointMenu.setTitle(tr("Add Data Breakpoint...")); @@ -763,8 +763,8 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) QAction *actInsertNewWatchItem = menu.addAction(tr("Insert New Evaluated Expression")); actInsertNewWatchItem->setEnabled(canHandleWatches && canInsertWatches); QAction *actSelectWidgetToWatch = menu.addAction(tr("Select Widget to Watch")); - actSelectWidgetToWatch->setEnabled(canHandleWatches && (engine->canWatchWidgets())); - + actSelectWidgetToWatch->setEnabled(canHandleWatches + && (engine->debuggerCapabilities() & WatchWidgetsCapability)); menu.addSeparator(); QAction *actWatchExpression = new QAction(addWatchActionText(exp), &menu);