diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp index 43b04090e7..4d06e74b10 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp @@ -66,6 +66,13 @@ MemoryWidget::MemoryWidget(Core::System& system, QWidget* parent) connect(&Settings::Instance(), &Settings::DebugModeToggled, this, [this](bool enabled) { setHidden(!enabled || !Settings::Instance().IsMemoryVisible()); }); + connect(this, &QDockWidget::visibilityChanged, this, [this](bool visible) { + // Stop auto-update if MemoryView is tabbed out. + if (visible && m_auto_update_enabled) + RegisterAfterFrameEventCallback(); + else + RemoveAfterFrameEventCallback(); + }); LoadSettings(); ConnectWidgets(); @@ -247,12 +254,34 @@ void MemoryWidget::CreateWidgets() // Sidebar top menu QMenuBar* menubar = new QMenuBar(sidebar); menubar->setNativeMenuBar(false); + QMenu* menu_views = new QMenu(tr("&View"), menubar); + menubar->addMenu(menu_views); QMenu* menu_import = new QMenu(tr("&Import"), menubar); menu_import->addAction(tr("&Load file to current address"), this, &MemoryWidget::OnSetValueFromFile); menubar->addMenu(menu_import); + auto* auto_update_action = + menu_views->addAction(tr("Auto update memory values"), this, [this](bool checked) { + m_auto_update_enabled = checked; + if (checked) + RegisterAfterFrameEventCallback(); + else + RemoveAfterFrameEventCallback(); + }); + auto_update_action->setCheckable(true); + auto_update_action->setChecked(true); + + auto* highlight_update_action = + menu_views->addAction(tr("Highlight recently changed values"), this, + [this](bool checked) { m_memory_view->ToggleHighlights(checked); }); + highlight_update_action->setCheckable(true); + highlight_update_action->setChecked(true); + + menu_views->addAction(tr("Highlight color"), this, + [this] { m_memory_view->SetHighlightColor(); }); + QMenu* menu_export = new QMenu(tr("&Export"), menubar); menu_export->addAction(tr("Dump &MRAM"), this, &MemoryWidget::OnDumpMRAM); menu_export->addAction(tr("Dump &ExRAM"), this, &MemoryWidget::OnDumpExRAM); @@ -342,7 +371,9 @@ void MemoryWidget::closeEvent(QCloseEvent*) void MemoryWidget::showEvent(QShowEvent* event) { - RegisterAfterFrameEventCallback(); + if (m_auto_update_enabled) + RegisterAfterFrameEventCallback(); + Update(); } @@ -363,9 +394,6 @@ void MemoryWidget::RemoveAfterFrameEventCallback() void MemoryWidget::AutoUpdateTable() { - if (!isVisible()) - return; - m_memory_view->UpdateOnFrameEnd(); } diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.h b/Source/Core/DolphinQt/Debugger/MemoryWidget.h index de5c71e28c..9104e0516c 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryWidget.h +++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.h @@ -115,4 +115,6 @@ private: QRadioButton* m_bp_write_only; QCheckBox* m_bp_log_check; Common::EventHook m_vi_end_field_event; + + bool m_auto_update_enabled = true; };