diff --git a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp index 60d32a8a25..5db9fdfbd9 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp @@ -403,6 +403,11 @@ void MemoryViewWidget::OnContextMenu() menu->addSeparator(); + menu->addAction(tr("Add to watch"), this, [this] { + const u32 address = GetContextAddress(); + const QString name = QStringLiteral("mem_%1").arg(address, 8, 16, QLatin1Char('0')); + emit RequestWatch(name, address); + }); menu->addAction(tr("Toggle Breakpoint"), this, &MemoryViewWidget::ToggleBreakpoint); menu->exec(QCursor::pos()); diff --git a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.h b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.h index dcb4409fa7..bb8cdb1520 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.h +++ b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.h @@ -57,6 +57,7 @@ public: signals: void BreakpointsChanged(); void ShowCode(u32 address); + void RequestWatch(QString name, u32 address); private: void OnContextMenu(); diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp index e226046c2a..ce1e043041 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp @@ -272,6 +272,7 @@ void MemoryWidget::ConnectWidgets() connect(m_memory_view, &MemoryViewWidget::BreakpointsChanged, this, &MemoryWidget::BreakpointsChanged); connect(m_memory_view, &MemoryViewWidget::ShowCode, this, &MemoryWidget::ShowCode); + connect(m_memory_view, &MemoryViewWidget::RequestWatch, this, &MemoryWidget::RequestWatch); } void MemoryWidget::closeEvent(QCloseEvent*) diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.h b/Source/Core/DolphinQt/Debugger/MemoryWidget.h index 8f779e9be7..d5bfe64fe8 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryWidget.h +++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.h @@ -31,6 +31,7 @@ public: signals: void BreakpointsChanged(); void ShowCode(u32 address); + void RequestWatch(QString name, u32 address); private: void CreateWidgets(); diff --git a/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp b/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp index 2cda7fc1e2..bf6a7ac0e7 100644 --- a/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp @@ -125,7 +125,12 @@ void RegisterWidget::ShowContextMenu() // i18n: This kind of "watch" is used for watching emulated memory. // It's not related to timekeeping devices. - menu->addAction(tr("Add to &watch"), this, + menu->addAction(tr("Add to &watch"), this, [this, item] { + const u32 address = item->GetValue(); + const QString name = QStringLiteral("reg_%1").arg(address, 8, 16, QLatin1Char('0')); + emit RequestWatch(name, address); + }); + menu->addAction(tr("Add memory &breakpoint"), this, [this, item] { emit RequestMemoryBreakpoint(item->GetValue()); }); menu->addAction(tr("View &memory"), this, [this, item] { emit RequestViewInMemory(item->GetValue()); }); diff --git a/Source/Core/DolphinQt/Debugger/RegisterWidget.h b/Source/Core/DolphinQt/Debugger/RegisterWidget.h index f6da56dcba..f39bd18da1 100644 --- a/Source/Core/DolphinQt/Debugger/RegisterWidget.h +++ b/Source/Core/DolphinQt/Debugger/RegisterWidget.h @@ -27,6 +27,7 @@ signals: void RequestViewInCode(u32 addr); void RequestViewInMemory(u32 addr); void RequestMemoryBreakpoint(u32 addr); + void RequestWatch(QString name, u32 addr); void UpdateTable(); void UpdateValue(QTableWidgetItem* item); void UpdateValueType(QTableWidgetItem* item); diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 3c6cb44560..67d02d042d 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -424,6 +424,7 @@ void MainWindow::CreateComponents() connect(m_watch_widget, &WatchWidget::RequestMemoryBreakpoint, request_memory_breakpoint); connect(m_register_widget, &RegisterWidget::RequestMemoryBreakpoint, request_memory_breakpoint); + connect(m_register_widget, &RegisterWidget::RequestWatch, request_watch); connect(m_register_widget, &RegisterWidget::RequestViewInMemory, request_view_in_memory); connect(m_register_widget, &RegisterWidget::RequestViewInCode, request_view_in_code); connect(m_thread_widget, &ThreadWidget::RequestBreakpoint, request_breakpoint); @@ -441,6 +442,7 @@ void MainWindow::CreateComponents() connect(m_memory_widget, &MemoryWidget::ShowCode, m_code_widget, [this](u32 address) { m_code_widget->SetAddress(address, CodeViewWidget::SetAddressUpdate::WithDetailedUpdate); }); + connect(m_memory_widget, &MemoryWidget::RequestWatch, request_watch); connect(m_breakpoint_widget, &BreakpointWidget::BreakpointsChanged, m_code_widget, &CodeWidget::Update);