summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2025-07-16 14:32:21 -0400
committerGitHub <noreply@github.com>2025-07-16 14:32:21 -0400
commitc2bace5967384140a67c1b1529f9b3fb3dddf83f (patch)
treefb2fa880d6efd59949f1f129078d13a7d94d6a6e /Source/Core
parent5674afa63d86308caa5a1a0cbebac7dd3ab031e9 (diff)
parentd53e766d6595d8cdd74f1f8316c82f7fa9e7bb3e (diff)
Merge pull request #13798 from TryTwo/PR_CodeWidget_NoUpdate
CodeWidget: Add button that locks the view's address
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp11
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.h2
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeWidget.cpp13
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeWidget.h2
4 files changed, 25 insertions, 3 deletions
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index e555054938..a430be15a3 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -181,11 +181,13 @@ CodeViewWidget::CodeViewWidget()
&CodeViewWidget::OnDebugFontChanged);
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this] {
- m_address = m_system.GetPPCState().pc;
+ if (!m_lock_address && Core::GetState(m_system) == Core::State::Paused)
+ m_address = m_system.GetPPCState().pc;
Update();
});
connect(Host::GetInstance(), &Host::UpdateDisasmDialog, this, [this] {
- m_address = m_system.GetPPCState().pc;
+ if (!m_lock_address && Core::GetState(m_system) == Core::State::Paused)
+ m_address = m_system.GetPPCState().pc;
Update();
});
connect(Host::GetInstance(), &Host::PPCSymbolsChanged, this,
@@ -538,6 +540,11 @@ u32 CodeViewWidget::GetAddress() const
return m_address;
}
+void CodeViewWidget::OnLockAddress(bool lock)
+{
+ m_lock_address = lock;
+}
+
void CodeViewWidget::SetAddress(u32 address, SetAddressUpdate update)
{
if (m_address == address)
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.h b/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
index 6760c082eb..d1eeef49ef 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
@@ -41,6 +41,7 @@ public:
~CodeViewWidget() override;
u32 GetAddress() const;
+ void OnLockAddress(bool lock);
u32 GetContextAddress() const;
void SetAddress(u32 address, SetAddressUpdate update);
@@ -111,6 +112,7 @@ private:
bool m_updating = false;
u32 m_address = 0;
+ bool m_lock_address = false;
u32 m_context_address = 0;
std::vector<CodeViewBranch> m_branches;
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
index 002ea47570..e5aaa1c2cd 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
@@ -18,6 +18,7 @@
#include <QStyleHints>
#include <QTabWidget>
#include <QTableWidget>
+#include <QToolButton>
#include <QVBoxLayout>
#include <QWidget>
@@ -31,6 +32,7 @@
#include "Core/System.h"
#include "DolphinQt/Debugger/BranchWatchDialog.h"
#include "DolphinQt/Host.h"
+#include "DolphinQt/Resources.h"
#include "DolphinQt/Settings.h"
static const QString BOX_SPLITTER_STYLESHEET = QStringLiteral(
@@ -61,7 +63,7 @@ CodeWidget::CodeWidget(QWidget* parent)
[this](bool visible) { setHidden(!visible); });
connect(Host::GetInstance(), &Host::UpdateDisasmDialog, this, [this] {
- if (Core::GetState(m_system) == Core::State::Paused)
+ if (!m_lock_btn->isChecked() && Core::GetState(m_system) == Core::State::Paused)
SetAddress(m_system.GetPPCState().pc, CodeViewWidget::SetAddressUpdate::WithoutUpdate);
Update();
});
@@ -109,8 +111,16 @@ void CodeWidget::CreateWidgets()
auto* top_layout = new QHBoxLayout;
m_search_address = new QLineEdit;
m_search_address->setPlaceholderText(tr("Search Address"));
+
+ m_lock_btn = new QToolButton();
+ m_lock_btn->setIcon(Resources::GetThemeIcon("pause"));
+ m_lock_btn->setCheckable(true);
+ m_lock_btn->setMinimumSize(24, 24);
+ m_lock_btn->setToolTip(tr("When enabled, prevents automatic updates to the code view."));
m_branch_watch = new QPushButton(tr("Branch Watch"));
+
top_layout->addWidget(m_search_address);
+ top_layout->addWidget(m_lock_btn);
top_layout->addWidget(m_branch_watch);
auto* right_layout = new QVBoxLayout;
@@ -191,6 +201,7 @@ void CodeWidget::ConnectWidgets()
connect(m_search_address, &QLineEdit::textChanged, this, &CodeWidget::OnSearchAddress);
connect(m_search_address, &QLineEdit::returnPressed, this, &CodeWidget::OnSearchAddress);
+ connect(m_lock_btn, &QPushButton::toggled, m_code_view, &CodeViewWidget::OnLockAddress);
connect(m_search_symbols, &QLineEdit::textChanged, this, &CodeWidget::OnSearchSymbols);
connect(m_search_calls, &QLineEdit::textChanged, this, [this] {
if (const Common::Symbol* symbol = m_ppc_symbol_db.GetSymbolFromAddr(m_code_view->GetAddress()))
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.h b/Source/Core/DolphinQt/Debugger/CodeWidget.h
index a7ca9f4a0c..76ada4f506 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.h
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.h
@@ -17,6 +17,7 @@ class QSplitter;
class QListWidget;
class QPushButton;
class QTableWidget;
+class QToolButton;
namespace Common
{
@@ -80,6 +81,7 @@ private:
BranchWatchDialog* m_branch_watch_dialog = nullptr;
QLineEdit* m_search_address;
+ QToolButton* m_lock_btn;
QPushButton* m_branch_watch;
QLineEdit* m_search_callstack;