diff --git a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
index d855b1af3a..66d178c5b2 100644
--- a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
@@ -41,14 +41,8 @@ BreakpointWidget::BreakpointWidget(QWidget* parent) : QDockWidget(parent)
CreateWidgets();
connect(&Settings::Instance(), &Settings::EmulationStateChanged, [this](Core::State state) {
- if (!Settings::Instance().IsDebugModeEnabled())
- return;
-
- bool is_initialised = state != Core::State::Uninitialized;
- m_new->setEnabled(is_initialised);
- m_load->setEnabled(is_initialised);
- m_save->setEnabled(is_initialised);
- if (!is_initialised)
+ UpdateButtonsEnabled();
+ if (state == Core::State::Uninitialized)
{
PowerPC::breakpoints.Clear();
PowerPC::memchecks.Clear();
@@ -65,8 +59,6 @@ BreakpointWidget::BreakpointWidget(QWidget* parent) : QDockWidget(parent)
connect(&Settings::Instance(), &Settings::ThemeChanged, this, &BreakpointWidget::UpdateIcons);
UpdateIcons();
-
- Update();
}
BreakpointWidget::~BreakpointWidget()
@@ -138,8 +130,28 @@ void BreakpointWidget::closeEvent(QCloseEvent*)
Settings::Instance().SetBreakpointsVisible(false);
}
+void BreakpointWidget::showEvent(QShowEvent* event)
+{
+ UpdateButtonsEnabled();
+ Update();
+}
+
+void BreakpointWidget::UpdateButtonsEnabled()
+{
+ if (!isVisible())
+ return;
+
+ const bool is_initialised = Core::GetState() != Core::State::Uninitialized;
+ m_new->setEnabled(is_initialised);
+ m_load->setEnabled(is_initialised);
+ m_save->setEnabled(is_initialised);
+}
+
void BreakpointWidget::Update()
{
+ if (!isVisible())
+ return;
+
m_table->clear();
m_table->setHorizontalHeaderLabels(
diff --git a/Source/Core/DolphinQt/Debugger/BreakpointWidget.h b/Source/Core/DolphinQt/Debugger/BreakpointWidget.h
index ed93890670..87ca60679e 100644
--- a/Source/Core/DolphinQt/Debugger/BreakpointWidget.h
+++ b/Source/Core/DolphinQt/Debugger/BreakpointWidget.h
@@ -9,9 +9,10 @@
#include "Common/CommonTypes.h"
class QAction;
+class QCloseEvent;
+class QShowEvent;
class QTableWidget;
class QToolBar;
-class QCloseEvent;
class BreakpointWidget : public QDockWidget
{
@@ -25,6 +26,7 @@ public:
bool do_break = true);
void AddRangedMBP(u32 from, u32 to, bool do_read = true, bool do_write = true, bool do_log = true,
bool do_break = true);
+ void UpdateButtonsEnabled();
void Update();
signals:
@@ -33,6 +35,7 @@ signals:
protected:
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
private:
void CreateWidgets();
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index 2427101cb7..d413bb0cd0 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -92,6 +92,9 @@ void CodeViewWidget::FontBasedSizing()
void CodeViewWidget::Update()
{
+ if (!isVisible())
+ return;
+
if (m_updating)
return;
@@ -568,6 +571,11 @@ void CodeViewWidget::mousePressEvent(QMouseEvent* event)
}
}
+void CodeViewWidget::showEvent(QShowEvent* event)
+{
+ Update();
+}
+
void CodeViewWidget::ToggleBreakpoint()
{
if (PowerPC::debug_interface.IsBreakpoint(GetContextAddress()))
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.h b/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
index bf191649e0..50e8ccc365 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.h
@@ -13,6 +13,7 @@
class QKeyEvent;
class QMouseEvent;
class QResizeEvent;
+class QShowEvent;
class CodeViewWidget : public QTableWidget
{
@@ -56,6 +57,7 @@ private:
void keyPressEvent(QKeyEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void wheelEvent(QWheelEvent* event) override;
+ void showEvent(QShowEvent* event) override;
void OnContextMenu();
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
index 443da54042..def631f87e 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.cpp
@@ -64,8 +64,6 @@ CodeWidget::CodeWidget(QWidget* parent) : QDockWidget(parent)
settings.value(QStringLiteral("codewidget/codesplitter")).toByteArray());
m_box_splitter->restoreState(
settings.value(QStringLiteral("codewidget/boxsplitter")).toByteArray());
-
- Update();
}
CodeWidget::~CodeWidget()
@@ -83,6 +81,11 @@ void CodeWidget::closeEvent(QCloseEvent*)
Settings::Instance().SetCodeVisible(false);
}
+void CodeWidget::showEvent(QShowEvent* event)
+{
+ Update();
+}
+
void CodeWidget::CreateWidgets()
{
auto* layout = new QGridLayout;
@@ -265,6 +268,9 @@ void CodeWidget::SetAddress(u32 address, CodeViewWidget::SetAddressUpdate update
void CodeWidget::Update()
{
+ if (!isVisible())
+ return;
+
const Common::Symbol* symbol = g_symbolDB.GetSymbolFromAddr(m_code_view->GetAddress());
UpdateCallstack();
diff --git a/Source/Core/DolphinQt/Debugger/CodeWidget.h b/Source/Core/DolphinQt/Debugger/CodeWidget.h
index df7e41348d..82b8a6b1b6 100644
--- a/Source/Core/DolphinQt/Debugger/CodeWidget.h
+++ b/Source/Core/DolphinQt/Debugger/CodeWidget.h
@@ -12,6 +12,7 @@
class QCloseEvent;
class QLineEdit;
+class QShowEvent;
class QSplitter;
class QListWidget;
class QTableWidget;
@@ -61,6 +62,7 @@ private:
void OnSelectFunctionCalls();
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
QLineEdit* m_search_address;
QLineEdit* m_search_symbols;
diff --git a/Source/Core/DolphinQt/Debugger/JITWidget.cpp b/Source/Core/DolphinQt/Debugger/JITWidget.cpp
index 1ba4bc3bbd..c233f49d98 100644
--- a/Source/Core/DolphinQt/Debugger/JITWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/JITWidget.cpp
@@ -57,8 +57,6 @@ JITWidget::JITWidget(QWidget* parent) : QDockWidget(parent)
#else
m_disassembler = GetNewDisassembler("UNK");
#endif
-
- Update();
}
JITWidget::~JITWidget()
@@ -126,6 +124,9 @@ void JITWidget::Compare(u32 address)
void JITWidget::Update()
{
+ if (!isVisible())
+ return;
+
if (!m_address)
{
m_ppc_asm_widget->setHtml(QStringLiteral("%1").arg(tr("(ppc)")));
@@ -208,3 +209,8 @@ void JITWidget::closeEvent(QCloseEvent*)
{
Settings::Instance().SetJITVisible(false);
}
+
+void JITWidget::showEvent(QShowEvent* event)
+{
+ Update();
+}
diff --git a/Source/Core/DolphinQt/Debugger/JITWidget.h b/Source/Core/DolphinQt/Debugger/JITWidget.h
index 4549d39261..17012360b8 100644
--- a/Source/Core/DolphinQt/Debugger/JITWidget.h
+++ b/Source/Core/DolphinQt/Debugger/JITWidget.h
@@ -10,6 +10,7 @@
#include "Common/CommonTypes.h"
class QCloseEvent;
+class QShowEvent;
class QSplitter;
class QTextBrowser;
class QTableWidget;
@@ -31,6 +32,7 @@ private:
void ConnectWidgets();
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
QTableWidget* m_table_widget;
QTextBrowser* m_ppc_asm_widget;
diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp
index 8629a195ca..3bfa69b293 100644
--- a/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.cpp
@@ -57,7 +57,6 @@ MemoryWidget::MemoryWidget(QWidget* parent) : QDockWidget(parent)
LoadSettings();
ConnectWidgets();
- Update();
OnAddressSpaceChanged();
OnTypeChanged();
}
@@ -258,8 +257,16 @@ void MemoryWidget::closeEvent(QCloseEvent*)
Settings::Instance().SetMemoryVisible(false);
}
+void MemoryWidget::showEvent(QShowEvent* event)
+{
+ Update();
+}
+
void MemoryWidget::Update()
{
+ if (!isVisible())
+ return;
+
m_memory_view->Update();
update();
}
diff --git a/Source/Core/DolphinQt/Debugger/MemoryWidget.h b/Source/Core/DolphinQt/Debugger/MemoryWidget.h
index 77c10b88e7..071fbb998e 100644
--- a/Source/Core/DolphinQt/Debugger/MemoryWidget.h
+++ b/Source/Core/DolphinQt/Debugger/MemoryWidget.h
@@ -17,6 +17,7 @@ class QLabel;
class QLineEdit;
class QPushButton;
class QRadioButton;
+class QShowEvent;
class QSplitter;
class MemoryWidget : public QDockWidget
@@ -61,6 +62,7 @@ private:
void FindValue(bool next);
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
MemoryViewWidget* m_memory_view;
QSplitter* m_splitter;
diff --git a/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp b/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp
index 0c829ed6df..7d2c61d88b 100644
--- a/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/RegisterWidget.cpp
@@ -38,14 +38,7 @@ RegisterWidget::RegisterWidget(QWidget* parent) : QDockWidget(parent)
PopulateTable();
ConnectWidgets();
- connect(Host::GetInstance(), &Host::UpdateDisasmDialog, this, [this] {
- if (Settings::Instance().IsDebugModeEnabled() && Core::GetState() == Core::State::Paused)
- {
- m_updating = true;
- emit UpdateTable();
- m_updating = false;
- }
- });
+ connect(Host::GetInstance(), &Host::UpdateDisasmDialog, this, &RegisterWidget::Update);
connect(&Settings::Instance(), &Settings::RegistersVisibilityChanged,
[this](bool visible) { setHidden(!visible); });
@@ -68,6 +61,11 @@ void RegisterWidget::closeEvent(QCloseEvent*)
Settings::Instance().SetRegistersVisible(false);
}
+void RegisterWidget::showEvent(QShowEvent* event)
+{
+ Update();
+}
+
void RegisterWidget::CreateWidgets()
{
m_table = new QTableWidget;
@@ -375,3 +373,13 @@ void RegisterWidget::AddRegister(int row, int column, RegisterType type, std::st
connect(this, &RegisterWidget::UpdateTable, [value] { value->RefreshValue(); });
}
+
+void RegisterWidget::Update()
+{
+ if (isVisible() && Core::GetState() == Core::State::Paused)
+ {
+ m_updating = true;
+ emit UpdateTable();
+ m_updating = false;
+ }
+}
diff --git a/Source/Core/DolphinQt/Debugger/RegisterWidget.h b/Source/Core/DolphinQt/Debugger/RegisterWidget.h
index 7064c26e14..cf33915c03 100644
--- a/Source/Core/DolphinQt/Debugger/RegisterWidget.h
+++ b/Source/Core/DolphinQt/Debugger/RegisterWidget.h
@@ -13,6 +13,7 @@
class QTableWidget;
class QCloseEvent;
+class QShowEvent;
class RegisterWidget : public QDockWidget
{
@@ -30,6 +31,7 @@ signals:
protected:
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
private:
void CreateWidgets();
@@ -42,6 +44,8 @@ private:
void AddRegister(int row, int column, RegisterType type, std::string register_name,
std::function get_reg, std::function set_reg);
+ void Update();
+
QTableWidget* m_table;
bool m_updating = false;
};
diff --git a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
index c122318f20..3a19ed26a4 100644
--- a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
@@ -43,12 +43,7 @@ WatchWidget::WatchWidget(QWidget* parent) : QDockWidget(parent)
ConnectWidgets();
connect(&Settings::Instance(), &Settings::EmulationStateChanged, [this](Core::State state) {
- if (!Settings::Instance().IsDebugModeEnabled())
- return;
-
- m_load->setEnabled(Core::IsRunning());
- m_save->setEnabled(Core::IsRunning());
-
+ UpdateButtonsEnabled();
if (state != Core::State::Starting)
Update();
});
@@ -61,8 +56,6 @@ WatchWidget::WatchWidget(QWidget* parent) : QDockWidget(parent)
connect(&Settings::Instance(), &Settings::ThemeChanged, this, &WatchWidget::UpdateIcons);
UpdateIcons();
-
- Update();
}
WatchWidget::~WatchWidget()
@@ -117,8 +110,20 @@ void WatchWidget::UpdateIcons()
m_save->setIcon(Resources::GetScaledThemeIcon("debugger_save"));
}
+void WatchWidget::UpdateButtonsEnabled()
+{
+ if (!isVisible())
+ return;
+
+ m_load->setEnabled(Core::IsRunning());
+ m_save->setEnabled(Core::IsRunning());
+}
+
void WatchWidget::Update()
{
+ if (!isVisible())
+ return;
+
m_updating = true;
m_table->clear();
@@ -200,6 +205,12 @@ void WatchWidget::closeEvent(QCloseEvent*)
Settings::Instance().SetWatchVisible(false);
}
+void WatchWidget::showEvent(QShowEvent* event)
+{
+ UpdateButtonsEnabled();
+ Update();
+}
+
void WatchWidget::OnLoad()
{
IniFile ini;
diff --git a/Source/Core/DolphinQt/Debugger/WatchWidget.h b/Source/Core/DolphinQt/Debugger/WatchWidget.h
index dbd0b4d805..922f7c6b22 100644
--- a/Source/Core/DolphinQt/Debugger/WatchWidget.h
+++ b/Source/Core/DolphinQt/Debugger/WatchWidget.h
@@ -13,6 +13,7 @@ class QTableWidget;
class QTableWidgetItem;
class QToolBar;
class QCloseEvent;
+class QShowEvent;
class WatchWidget : public QDockWidget
{
@@ -27,6 +28,7 @@ signals:
protected:
void closeEvent(QCloseEvent*) override;
+ void showEvent(QShowEvent* event) override;
private:
void CreateWidgets();
@@ -35,6 +37,7 @@ private:
void OnLoad();
void OnSave();
+ void UpdateButtonsEnabled();
void Update();
void ShowContextMenu();