summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2024-03-10 00:06:21 +0100
committerGitHub <noreply@github.com>2024-03-10 00:06:21 +0100
commitef75a6ff232d743ca9f4552c850eb3f8afaa3e6e (patch)
tree0a05e793ca95f5aa22d9b291195012c96696323f /Source/Core
parent4f8fb645d6ec889cf4f9dd85507bdc29b4fde0d0 (diff)
parent0645b4d5792111cc992b85cda6694c95ab43408f (diff)
Merge pull request #12622 from mitaclaw/branch-watch-dialog-errata
BranchWatchDialog: Fix Misc. Errata
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Debugger/BranchWatchDialog.cpp30
-rw-r--r--Source/Core/DolphinQt/Debugger/BranchWatchDialog.h10
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeWidget.cpp18
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeWidget.h2
4 files changed, 35 insertions, 25 deletions
diff --git a/Source/Core/DolphinQt/Debugger/BranchWatchDialog.cpp b/Source/Core/DolphinQt/Debugger/BranchWatchDialog.cpp
index f5e6a5acc3..f45da30d20 100644
--- a/Source/Core/DolphinQt/Debugger/BranchWatchDialog.cpp
+++ b/Source/Core/DolphinQt/Debugger/BranchWatchDialog.cpp
@@ -504,15 +504,9 @@ BranchWatchDialog::BranchWatchDialog(Core::System& system, Core::BranchWatch& br
restoreGeometry(settings.value(QStringLiteral("branchwatchdialog/geometry")).toByteArray());
}
-void BranchWatchDialog::done(int r)
+BranchWatchDialog::~BranchWatchDialog()
{
- if (m_timer->isActive())
- m_timer->stop();
- auto& settings = Settings::GetQSettings();
- settings.setValue(QStringLiteral("branchwatchdialog/geometry"), saveGeometry());
- settings.setValue(QStringLiteral("branchwatchdialog/tableheader/state"),
- m_table_view->horizontalHeader()->saveState());
- QDialog::done(r);
+ SaveSettings();
}
static constexpr int BRANCH_WATCH_TOOL_TIMER_DELAY_MS = 100;
@@ -523,18 +517,18 @@ static bool TimerCondition(const Core::BranchWatch& branch_watch, Core::State st
return branch_watch.GetRecordingActive() && state > Core::State::Paused;
}
-int BranchWatchDialog::exec()
+void BranchWatchDialog::hideEvent(QHideEvent* event)
{
- if (TimerCondition(m_branch_watch, Core::GetState()))
- m_timer->start(BRANCH_WATCH_TOOL_TIMER_DELAY_MS);
- return QDialog::exec();
+ if (m_timer->isActive())
+ m_timer->stop();
+ QDialog::hideEvent(event);
}
-void BranchWatchDialog::open()
+void BranchWatchDialog::showEvent(QShowEvent* event)
{
if (TimerCondition(m_branch_watch, Core::GetState()))
m_timer->start(BRANCH_WATCH_TOOL_TIMER_DELAY_MS);
- QDialog::open();
+ QDialog::showEvent(event);
}
void BranchWatchDialog::OnStartPause(bool checked)
@@ -927,6 +921,14 @@ void BranchWatchDialog::OnTableCopyAddress(QModelIndexList index_list)
QApplication::clipboard()->setText(text);
}
+void BranchWatchDialog::SaveSettings()
+{
+ auto& settings = Settings::GetQSettings();
+ settings.setValue(QStringLiteral("branchwatchdialog/geometry"), saveGeometry());
+ settings.setValue(QStringLiteral("branchwatchdialog/tableheader/state"),
+ m_table_view->horizontalHeader()->saveState());
+}
+
void BranchWatchDialog::Update()
{
if (m_branch_watch.GetRecordingPhase() == Core::BranchWatch::Phase::Blacklist)
diff --git a/Source/Core/DolphinQt/Debugger/BranchWatchDialog.h b/Source/Core/DolphinQt/Debugger/BranchWatchDialog.h
index b167ca106d..d97972980c 100644
--- a/Source/Core/DolphinQt/Debugger/BranchWatchDialog.h
+++ b/Source/Core/DolphinQt/Debugger/BranchWatchDialog.h
@@ -49,9 +49,11 @@ class BranchWatchDialog : public QDialog
public:
explicit BranchWatchDialog(Core::System& system, Core::BranchWatch& branch_watch,
CodeWidget* code_widget, QWidget* parent = nullptr);
- void done(int r) override;
- int exec() override;
- void open() override;
+ ~BranchWatchDialog() override;
+
+protected:
+ void hideEvent(QHideEvent* event) override;
+ void showEvent(QShowEvent* event) override;
private:
void OnStartPause(bool checked);
@@ -82,6 +84,8 @@ private:
void OnTableSetNOP(QModelIndexList index_list);
void OnTableCopyAddress(QModelIndexList index_list);
+ void SaveSettings();
+
public:
// TODO: Step doesn't cause EmulationStateChanged to be emitted, so it has to call this manually.
void Update();
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
index 94662bba71..382ec03861 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
@@ -36,10 +36,7 @@ static const QString BOX_SPLITTER_STYLESHEET = QStringLiteral(
"QSplitter::handle { border-top: 1px dashed black; width: 1px; margin-left: 10px; "
"margin-right: 10px; }");
-CodeWidget::CodeWidget(QWidget* parent)
- : QDockWidget(parent), m_system(Core::System::GetInstance()),
- m_branch_watch_dialog(
- new BranchWatchDialog(m_system, m_system.GetPowerPC().GetBranchWatch(), this))
+CodeWidget::CodeWidget(QWidget* parent) : QDockWidget(parent), m_system(Core::System::GetInstance())
{
setWindowTitle(tr("Code"));
setObjectName(QStringLiteral("code"));
@@ -215,7 +212,12 @@ void CodeWidget::ConnectWidgets()
void CodeWidget::OnBranchWatchDialog()
{
- m_branch_watch_dialog->open();
+ if (m_branch_watch_dialog == nullptr)
+ {
+ m_branch_watch_dialog =
+ new BranchWatchDialog(m_system, m_system.GetPowerPC().GetBranchWatch(), this, this);
+ }
+ m_branch_watch_dialog->show();
m_branch_watch_dialog->raise();
m_branch_watch_dialog->activateWindow();
}
@@ -397,7 +399,8 @@ void CodeWidget::UpdateSymbols()
// TODO: There seems to be a lack of a ubiquitous signal for when symbols change.
// This is the best location to catch the signals from MenuBar and CodeViewWidget.
- m_branch_watch_dialog->UpdateSymbols();
+ if (m_branch_watch_dialog != nullptr)
+ m_branch_watch_dialog->UpdateSymbols();
}
void CodeWidget::UpdateFunctionCalls(const Common::Symbol* symbol)
@@ -470,7 +473,8 @@ void CodeWidget::Step()
// Will get a UpdateDisasmDialog(), don't update the GUI here.
// TODO: Step doesn't cause EmulationStateChanged to be emitted, so it has to call this manually.
- m_branch_watch_dialog->Update();
+ if (m_branch_watch_dialog != nullptr)
+ m_branch_watch_dialog->Update();
}
void CodeWidget::StepOver()
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.h b/Source/Core/DolphinQt/Debugger/CodeWidget.h
index e0a5679bfb..7ccd2af2f3 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.h
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.h
@@ -72,7 +72,7 @@ private:
Core::System& m_system;
- BranchWatchDialog* m_branch_watch_dialog;
+ BranchWatchDialog* m_branch_watch_dialog = nullptr;
QLineEdit* m_search_address;
QPushButton* m_branch_watch;