summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2024-06-02 16:45:30 +0200
committerJosJuice <josjuice@gmail.com>2024-06-21 20:52:55 +0200
commit72cf2bdb87f09deff22e1085de3290126aa4ad05 (patch)
treea3c399edfaa7ee17bf9b08cf95f2862a5d8edff9 /Source/Core
parent962230f91e06a60b2395de6f0974fdd213854d4c (diff)
Audit uses of IsRunning and GetState
Some pieces of code are calling IsRunning because there's some particular action that only makes sense when emulation is running, for instance showing the state of the emulated CPU. IsRunning is appropriate to use for this. Then there are pieces of code that are calling IsRunning because there's some particular thing they must avoid doing e.g. when the CPU thread is running or IOS is running. IsRunning isn't quite appropriate for this. Such code should also be checking for the states Starting and Stopping. Keep in mind that: * When the state is Starting, the state can asynchronously change to Running at any time. * When we try to stop the core, the state gets set to Stopping before we take any action to actually stop things. This commit adds a new method Core::IsUninitialized, and changes all callers of IsRunning and GetState that look to me like they should be changed.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp4
-rw-r--r--Source/Core/Core/Core.cpp7
-rw-r--r--Source/Core/Core/Core.h5
-rw-r--r--Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp11
-rw-r--r--Source/Core/DolphinQt/CheatSearchFactoryWidget.cpp3
-rw-r--r--Source/Core/DolphinQt/CheatsManager.cpp5
-rw-r--r--Source/Core/DolphinQt/Config/CheatWarningWidget.cpp5
-rw-r--r--Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp3
-rw-r--r--Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp6
-rw-r--r--Source/Core/DolphinQt/Debugger/AssemblerWidget.cpp2
-rw-r--r--Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp2
-rw-r--r--Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp2
-rw-r--r--Source/Core/DolphinQt/Debugger/ThreadWidget.cpp2
-rw-r--r--Source/Core/DolphinQt/Debugger/WatchWidget.cpp5
-rw-r--r--Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp27
-rw-r--r--Source/Core/DolphinQt/GameList/GameList.cpp12
-rw-r--r--Source/Core/DolphinQt/HotkeyScheduler.cpp2
-rw-r--r--Source/Core/DolphinQt/MainWindow.cpp15
-rw-r--r--Source/Core/DolphinQt/MenuBar.cpp56
-rw-r--r--Source/Core/DolphinQt/MenuBar.h2
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp2
-rw-r--r--Source/Core/DolphinQt/Settings/AdvancedPane.cpp2
-rw-r--r--Source/Core/DolphinQt/Settings/AudioPane.cpp3
-rw-r--r--Source/Core/DolphinQt/Settings/WiiPane.cpp3
-rw-r--r--Source/Core/VideoCommon/VideoConfig.cpp7
25 files changed, 108 insertions, 85 deletions
diff --git a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp
index 88fa7c0696..81e373b422 100644
--- a/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp
+++ b/Source/Core/Core/ConfigLoaders/BaseConfigLoader.cpp
@@ -33,7 +33,7 @@ namespace ConfigLoaders
{
void SaveToSYSCONF(Config::LayerType layer, std::function<bool(const Config::Location&)> predicate)
{
- if (Core::IsRunning(Core::System::GetInstance()))
+ if (!Core::IsUninitialized(Core::System::GetInstance()))
return;
IOS::HLE::Kernel ios;
@@ -183,7 +183,7 @@ public:
private:
void LoadFromSYSCONF(Config::Layer* layer)
{
- if (Core::IsRunning(Core::System::GetInstance()))
+ if (!Core::IsUninitialized(Core::System::GetInstance()))
return;
IOS::HLE::Kernel ios;
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index 58423377be..90d90c9d18 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -211,6 +211,11 @@ bool IsRunningOrStarting(Core::System& system)
return state == State::Running || state == State::Starting;
}
+bool IsUninitialized(Core::System& system)
+{
+ return s_state.load() == State::Uninitialized;
+}
+
bool IsCPUThread()
{
return tls_is_cpu_thread;
@@ -237,7 +242,7 @@ bool Init(Core::System& system, std::unique_ptr<BootParameters> boot, const Wind
{
if (s_emu_thread.joinable())
{
- if (IsRunning(system))
+ if (!IsUninitialized(system))
{
PanicAlertFmtT("Emu Thread already running");
return false;
diff --git a/Source/Core/Core/Core.h b/Source/Core/Core/Core.h
index e6c440566c..cf30cf3866 100644
--- a/Source/Core/Core/Core.h
+++ b/Source/Core/Core/Core.h
@@ -134,8 +134,13 @@ void UndeclareAsHostThread();
std::string StopMessage(bool main_thread, std::string_view message);
+// Returns true when GetState returns Running or Paused.
bool IsRunning(Core::System& system);
+// Returns true when GetState returns Starting, Running or Paused.
bool IsRunningOrStarting(Core::System& system);
+// Returns true when GetState returns Uninitialized.
+bool IsUninitialized(Core::System& system);
+
bool IsCPUThread(); // this tells us whether we are the CPU thread.
bool IsGPUThread();
bool IsHostThread();
diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
index 5b8a07d24f..c3bbd350f8 100644
--- a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
+++ b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
@@ -159,6 +159,8 @@ void AchievementSettingsWidget::OnControllerInterfaceConfigure()
void AchievementSettingsWidget::LoadSettings()
{
+ Core::System& system = Core::System::GetInstance();
+
bool enabled = Config::Get(Config::RA_ENABLED);
bool hardcore_enabled = Config::Get(Config::RA_HARDCORE_ENABLED);
bool logged_out = Config::Get(Config::RA_API_TOKEN).empty();
@@ -174,18 +176,15 @@ void AchievementSettingsWidget::LoadSettings()
SignalBlocking(m_common_password_input)->setVisible(logged_out);
SignalBlocking(m_common_password_input)->setEnabled(enabled);
SignalBlocking(m_common_login_button)->setVisible(logged_out);
- SignalBlocking(m_common_login_button)
- ->setEnabled(enabled && !Core::IsRunning(Core::System::GetInstance()));
+ SignalBlocking(m_common_login_button)->setEnabled(enabled && Core::IsUninitialized(system));
SignalBlocking(m_common_logout_button)->setVisible(!logged_out);
SignalBlocking(m_common_logout_button)->setEnabled(enabled);
SignalBlocking(m_common_hardcore_enabled_input)
->setChecked(Config::Get(Config::RA_HARDCORE_ENABLED));
- auto& system = Core::System::GetInstance();
SignalBlocking(m_common_hardcore_enabled_input)
- ->setEnabled(enabled &&
- (hardcore_enabled || (Core::GetState(system) == Core::State::Uninitialized &&
- !system.GetMovie().IsPlayingInput())));
+ ->setEnabled(enabled && (hardcore_enabled || (Core::IsUninitialized(system) &&
+ !system.GetMovie().IsPlayingInput())));
SignalBlocking(m_common_unofficial_enabled_input)
->setChecked(Config::Get(Config::RA_UNOFFICIAL_ENABLED));
diff --git a/Source/Core/DolphinQt/CheatSearchFactoryWidget.cpp b/Source/Core/DolphinQt/CheatSearchFactoryWidget.cpp
index e1970dacc5..fd713b6695 100644
--- a/Source/Core/DolphinQt/CheatSearchFactoryWidget.cpp
+++ b/Source/Core/DolphinQt/CheatSearchFactoryWidget.cpp
@@ -159,8 +159,7 @@ void CheatSearchFactoryWidget::OnNewSearchClicked()
if (m_standard_address_space->isChecked())
{
auto& system = Core::System::GetInstance();
- const Core::State core_state = Core::GetState(system);
- if (core_state != Core::State::Running && core_state != Core::State::Paused)
+ if (!Core::IsRunning(system))
{
ModalMessageBox::warning(
this, tr("No game running."),
diff --git a/Source/Core/DolphinQt/CheatsManager.cpp b/Source/Core/DolphinQt/CheatsManager.cpp
index 53f051785c..4fea9120b4 100644
--- a/Source/Core/DolphinQt/CheatsManager.cpp
+++ b/Source/Core/DolphinQt/CheatsManager.cpp
@@ -104,8 +104,9 @@ void CheatsManager::RefreshCodeTabs(Core::State state, bool force)
if (!force && (state == Core::State::Starting || state == Core::State::Stopping))
return;
- const auto& game_id =
- state != Core::State::Uninitialized ? SConfig::GetInstance().GetGameID() : std::string();
+ const auto& game_id = state == Core::State::Running || state == Core::State::Paused ?
+ SConfig::GetInstance().GetGameID() :
+ std::string();
const auto& game_tdb_id = SConfig::GetInstance().GetGameTDBID();
const u16 revision = SConfig::GetInstance().GetRevision();
diff --git a/Source/Core/DolphinQt/Config/CheatWarningWidget.cpp b/Source/Core/DolphinQt/Config/CheatWarningWidget.cpp
index ee52bf9662..6c3b9638da 100644
--- a/Source/Core/DolphinQt/Config/CheatWarningWidget.cpp
+++ b/Source/Core/DolphinQt/Config/CheatWarningWidget.cpp
@@ -24,8 +24,9 @@ CheatWarningWidget::CheatWarningWidget(const std::string& game_id, bool restart_
connect(&Settings::Instance(), &Settings::EnableCheatsChanged, this,
[this] { Update(Core::IsRunning(Core::System::GetInstance())); });
- connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
- [this](Core::State state) { Update(state == Core::State::Running); });
+ connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
+ Update(state == Core::State::Running || state == Core::State::Paused);
+ });
Update(Core::IsRunning(Core::System::GetInstance()));
}
diff --git a/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
index 0d93614021..ccc63fe326 100644
--- a/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
+++ b/Source/Core/DolphinQt/Config/Graphics/AdvancedWidget.cpp
@@ -43,8 +43,7 @@ AdvancedWidget::AdvancedWidget(GraphicsWindow* parent)
});
OnBackendChanged();
- OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
- Core::State::Uninitialized);
+ OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void AdvancedWidget::CreateWidgets()
diff --git a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp
index 52f09a6f41..3574e6893a 100644
--- a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp
+++ b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp
@@ -44,8 +44,7 @@ GeneralWidget::GeneralWidget(GraphicsWindow* parent)
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
OnEmulationStateChanged(state != Core::State::Uninitialized);
});
- OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
- Core::State::Uninitialized);
+ OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void GeneralWidget::CreateWidgets()
@@ -361,7 +360,8 @@ void GeneralWidget::OnBackendChanged(const QString& backend_name)
const bool supports_adapters = !adapters.empty();
m_adapter_combo->setCurrentIndex(g_Config.iAdapter);
- m_adapter_combo->setEnabled(supports_adapters && !Core::IsRunning(Core::System::GetInstance()));
+ m_adapter_combo->setEnabled(supports_adapters &&
+ Core::IsUninitialized(Core::System::GetInstance()));
static constexpr char TR_ADAPTER_AVAILABLE_DESCRIPTION[] =
QT_TR_NOOP("Selects a hardware adapter to use.<br><br>"
diff --git a/Source/Core/DolphinQt/Debugger/AssemblerWidget.cpp b/Source/Core/DolphinQt/Debugger/AssemblerWidget.cpp
index 8dba286c01..fc78b5b613 100644
--- a/Source/Core/DolphinQt/Debugger/AssemblerWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/AssemblerWidget.cpp
@@ -791,7 +791,7 @@ bool AssemblerWidget::SaveEditor(AsmEditor* editor)
void AssemblerWidget::OnEmulationStateChanged(Core::State state)
{
- m_inject->setEnabled(state != Core::State::Uninitialized);
+ m_inject->setEnabled(state == Core::State::Running || state == Core::State::Paused);
}
void AssemblerWidget::OnTabClose(int index)
diff --git a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
index 130e68e860..1b74cd8ee9 100644
--- a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
@@ -251,7 +251,7 @@ void BreakpointWidget::UpdateButtonsEnabled()
if (!isVisible())
return;
- const bool is_initialised = Core::GetState(m_system) != Core::State::Uninitialized;
+ const bool is_initialised = Core::IsRunning(m_system);
m_new->setEnabled(is_initialised);
m_load->setEnabled(is_initialised);
m_save->setEnabled(is_initialised);
diff --git a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
index 51f2814d9b..7f0e50db74 100644
--- a/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/CodeViewWidget.cpp
@@ -560,7 +560,7 @@ void CodeViewWidget::OnContextMenu()
QMenu* menu = new QMenu(this);
menu->setAttribute(Qt::WA_DeleteOnClose, true);
- const bool running = Core::GetState(m_system) != Core::State::Uninitialized;
+ const bool running = Core::IsRunning(m_system);
const bool paused = Core::GetState(m_system) == Core::State::Paused;
const u32 addr = GetContextAddress();
diff --git a/Source/Core/DolphinQt/Debugger/ThreadWidget.cpp b/Source/Core/DolphinQt/Debugger/ThreadWidget.cpp
index e48097d0e4..55704e31ad 100644
--- a/Source/Core/DolphinQt/Debugger/ThreadWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/ThreadWidget.cpp
@@ -258,7 +258,7 @@ void ThreadWidget::Update()
auto& system = Core::System::GetInstance();
const auto emu_state = Core::GetState(system);
- if (emu_state == Core::State::Stopping)
+ if (emu_state == Core::State::Stopping || emu_state == Core::State::Uninitialized)
{
m_thread_table->setRowCount(0);
UpdateThreadContext({});
diff --git a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
index 75d3f13ee6..170bfcc792 100644
--- a/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/WatchWidget.cpp
@@ -195,10 +195,11 @@ void WatchWidget::Update()
QBrush brush = QPalette().brush(QPalette::Text);
- if (!Core::IsRunning(m_system) || !PowerPC::MMU::HostIsRAMAddress(guard, entry.address))
+ const bool core_is_running = Core::IsRunning(m_system);
+ if (!core_is_running || !PowerPC::MMU::HostIsRAMAddress(guard, entry.address))
brush.setColor(Qt::red);
- if (Core::IsRunning(m_system))
+ if (core_is_running)
{
if (PowerPC::MMU::HostIsRAMAddress(guard, entry.address))
{
diff --git a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp
index 4d2cadb6ca..30c4b44a86 100644
--- a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp
+++ b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp
@@ -59,11 +59,14 @@ FIFOPlayerWindow::FIFOPlayerWindow(FifoPlayer& fifo_player, FifoRecorder& fifo_r
});
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
- if (state == Core::State::Running && m_emu_state != Core::State::Paused)
- OnEmulationStarted();
- else if (state == Core::State::Uninitialized)
- OnEmulationStopped();
- m_emu_state = state;
+ if (state != m_emu_state)
+ {
+ if (state == Core::State::Running && m_emu_state != Core::State::Paused)
+ OnEmulationStarted();
+ else if (state == Core::State::Uninitialized)
+ OnEmulationStopped();
+ m_emu_state = state;
+ }
});
installEventFilter(this);
@@ -376,9 +379,11 @@ void FIFOPlayerWindow::UpdateLimits()
void FIFOPlayerWindow::UpdateControls()
{
- bool running = Core::IsRunning(Core::System::GetInstance());
- bool is_recording = m_fifo_recorder.IsRecording();
- bool is_playing = m_fifo_player.IsPlaying();
+ Core::System& system = Core::System::GetInstance();
+ const bool core_is_uninitialized = Core::IsUninitialized(system);
+ const bool core_is_running = Core::IsRunning(system);
+ const bool is_recording = m_fifo_recorder.IsRecording();
+ const bool is_playing = m_fifo_player.IsPlaying();
m_frame_range_from->setEnabled(is_playing);
m_frame_range_from_label->setEnabled(is_playing);
@@ -394,10 +399,10 @@ void FIFOPlayerWindow::UpdateControls()
m_frame_record_count_label->setEnabled(enable_frame_record_count);
m_frame_record_count->setEnabled(enable_frame_record_count);
- m_load->setEnabled(!running);
- m_record->setEnabled(running && !is_playing);
+ m_load->setEnabled(core_is_uninitialized);
+ m_record->setEnabled(core_is_running && !is_playing);
- m_stop->setVisible(running && is_recording);
+ m_stop->setVisible(core_is_running && is_recording);
m_record->setVisible(!m_stop->isVisible());
m_save->setEnabled(m_fifo_recorder.IsRecordingDone());
diff --git a/Source/Core/DolphinQt/GameList/GameList.cpp b/Source/Core/DolphinQt/GameList/GameList.cpp
index 1003cff599..05ca541ef3 100644
--- a/Source/Core/DolphinQt/GameList/GameList.cpp
+++ b/Source/Core/DolphinQt/GameList/GameList.cpp
@@ -438,7 +438,7 @@ void GameList::ShowContextMenu(const QPoint&)
// system menu, trigger a refresh.
Settings::Instance().NANDRefresh();
});
- perform_disc_update->setEnabled(!Core::IsRunning(system) || !system.IsWii());
+ perform_disc_update->setEnabled(Core::IsUninitialized(system) || !system.IsWii());
}
if (!is_mod_descriptor && platform == DiscIO::Platform::WiiWAD)
@@ -451,10 +451,10 @@ void GameList::ShowContextMenu(const QPoint&)
for (QAction* a : {wad_install_action, wad_uninstall_action})
{
- a->setEnabled(!Core::IsRunning(system));
+ a->setEnabled(Core::IsUninitialized(system));
menu->addAction(a);
}
- if (!Core::IsRunning(system))
+ if (Core::IsUninitialized(system))
wad_uninstall_action->setEnabled(WiiUtils::IsTitleInstalled(game->GetTitleID()));
connect(&Settings::Instance(), &Settings::EmulationStateChanged, menu,
@@ -475,8 +475,8 @@ void GameList::ShowContextMenu(const QPoint&)
QAction* export_wii_save =
menu->addAction(tr("Export Wii Save"), this, &GameList::ExportWiiSave);
- open_wii_save_folder->setEnabled(!Core::IsRunning(system));
- export_wii_save->setEnabled(!Core::IsRunning(system));
+ open_wii_save_folder->setEnabled(Core::IsUninitialized(system));
+ export_wii_save->setEnabled(Core::IsUninitialized(system));
menu->addSeparator();
}
@@ -533,7 +533,7 @@ void GameList::ShowContextMenu(const QPoint&)
connect(&Settings::Instance(), &Settings::EmulationStateChanged, menu, [=](Core::State state) {
netplay_host->setEnabled(state == Core::State::Uninitialized);
});
- netplay_host->setEnabled(!Core::IsRunning(system));
+ netplay_host->setEnabled(Core::IsUninitialized(system));
menu->addAction(netplay_host);
}
diff --git a/Source/Core/DolphinQt/HotkeyScheduler.cpp b/Source/Core/DolphinQt/HotkeyScheduler.cpp
index 0a6d13e6c0..91ee3c5455 100644
--- a/Source/Core/DolphinQt/HotkeyScheduler.cpp
+++ b/Source/Core/DolphinQt/HotkeyScheduler.cpp
@@ -188,7 +188,7 @@ void HotkeyScheduler::Run()
if (IsHotkey(HK_EXIT))
emit ExitHotkey();
- if (!Core::IsRunning(system))
+ if (Core::IsUninitialized(system))
{
// Only check for Play Recording hotkey when no game is running
if (IsHotkey(HK_PLAY_RECORDING))
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index f62a7496e7..0bef377f07 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -905,7 +905,7 @@ void MainWindow::OnStopComplete()
bool MainWindow::RequestStop()
{
- if (!Core::IsRunning(Core::System::GetInstance()))
+ if (Core::IsUninitialized(Core::System::GetInstance()))
{
Core::QueueHostJob([this](Core::System&) { OnStopComplete(); }, true);
return true;
@@ -1112,7 +1112,7 @@ void MainWindow::StartGame(std::unique_ptr<BootParameters>&& parameters)
}
// If we're running, only start a new game once we've stopped the last.
- if (Core::GetState(Core::System::GetInstance()) != Core::State::Uninitialized)
+ if (!Core::IsUninitialized(Core::System::GetInstance()))
{
if (!RequestStop())
return;
@@ -1536,7 +1536,7 @@ void MainWindow::NetPlayInit()
bool MainWindow::NetPlayJoin()
{
- if (Core::IsRunning(Core::System::GetInstance()))
+ if (!Core::IsUninitialized(Core::System::GetInstance()))
{
ModalMessageBox::critical(nullptr, tr("Error"),
tr("Can't start a NetPlay Session while a game is still running!"));
@@ -1603,7 +1603,7 @@ bool MainWindow::NetPlayJoin()
bool MainWindow::NetPlayHost(const UICommon::GameFile& game)
{
- if (Core::IsRunning(Core::System::GetInstance()))
+ if (!Core::IsUninitialized(Core::System::GetInstance()))
{
ModalMessageBox::critical(nullptr, tr("Error"),
tr("Can't start a NetPlay Session while a game is still running!"));
@@ -1850,7 +1850,7 @@ void MainWindow::OnImportNANDBackup()
result.wait();
- m_menu_bar->UpdateToolsMenu(Core::IsRunning(Core::System::GetInstance()));
+ m_menu_bar->UpdateToolsMenu(Core::State::Uninitialized);
}
void MainWindow::OnPlayRecording()
@@ -1882,7 +1882,8 @@ void MainWindow::OnStartRecording()
{
auto& system = Core::System::GetInstance();
auto& movie = system.GetMovie();
- if (Core::GetState(system) == Core::State::Starting || movie.IsRecordingInput() ||
+ if (Core::GetState(system) == Core::State::Starting ||
+ Core::GetState(system) == Core::State::Stopping || movie.IsRecordingInput() ||
movie.IsPlayingInput())
{
return;
@@ -1914,7 +1915,7 @@ void MainWindow::OnStartRecording()
{
emit RecordingStatusChanged(true);
- if (!Core::IsRunning(system))
+ if (Core::IsUninitialized(system))
Play();
}
}
diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp
index 75b279db67..b7528272a6 100644
--- a/Source/Core/DolphinQt/MenuBar.cpp
+++ b/Source/Core/DolphinQt/MenuBar.cpp
@@ -138,9 +138,11 @@ void MenuBar::OnEmulationStateChanged(Core::State state)
m_recording_stop->setEnabled(false);
m_recording_export->setEnabled(false);
}
- m_recording_play->setEnabled(m_game_selected && !running);
- m_recording_play->setEnabled(m_game_selected && !running && !hardcore);
- m_recording_start->setEnabled((m_game_selected || running) &&
+ const bool can_start_from_boot = m_game_selected && state == Core::State::Uninitialized;
+ const bool can_start_from_savestate =
+ state == Core::State::Running || state == Core::State::Paused;
+ m_recording_play->setEnabled(can_start_from_boot && !hardcore);
+ m_recording_start->setEnabled((can_start_from_boot || can_start_from_savestate) &&
!Core::System::GetInstance().GetMovie().IsPlayingInput());
// JIT
@@ -159,7 +161,7 @@ void MenuBar::OnEmulationStateChanged(Core::State state)
m_symbols->setEnabled(running);
UpdateStateSlotMenu();
- UpdateToolsMenu(running);
+ UpdateToolsMenu(state);
OnDebugModeToggled(Settings::Instance().IsDebugModeEnabled());
}
@@ -300,7 +302,8 @@ void MenuBar::AddToolsMenu()
m_boot_sysmenu->setEnabled(false);
- connect(&Settings::Instance(), &Settings::NANDRefresh, this, [this] { UpdateToolsMenu(false); });
+ connect(&Settings::Instance(), &Settings::NANDRefresh, this,
+ [this] { UpdateToolsMenu(Core::State::Uninitialized); });
m_perform_online_update_menu = tools_menu->addMenu(tr("Perform Online System Update"));
m_perform_online_update_for_current_region = m_perform_online_update_menu->addAction(
@@ -1050,20 +1053,23 @@ void MenuBar::AddSymbolsMenu()
m_symbols->addAction(tr("&Patch HLE Functions"), this, &MenuBar::PatchHLEFunctions);
}
-void MenuBar::UpdateToolsMenu(bool emulation_started)
+void MenuBar::UpdateToolsMenu(Core::State state)
{
- m_boot_sysmenu->setEnabled(!emulation_started);
- m_perform_online_update_menu->setEnabled(!emulation_started);
- m_ntscj_ipl->setEnabled(!emulation_started && File::Exists(Config::GetBootROMPath(JAP_DIR)));
- m_ntscu_ipl->setEnabled(!emulation_started && File::Exists(Config::GetBootROMPath(USA_DIR)));
- m_pal_ipl->setEnabled(!emulation_started && File::Exists(Config::GetBootROMPath(EUR_DIR)));
- m_wad_install_action->setEnabled(!emulation_started);
- m_import_backup->setEnabled(!emulation_started);
- m_check_nand->setEnabled(!emulation_started);
- m_import_wii_save->setEnabled(!emulation_started);
- m_export_wii_saves->setEnabled(!emulation_started);
-
- if (!emulation_started)
+ const bool is_uninitialized = state == Core::State::Uninitialized;
+ const bool is_running = state == Core::State::Running || state == Core::State::Paused;
+
+ m_boot_sysmenu->setEnabled(is_uninitialized);
+ m_perform_online_update_menu->setEnabled(is_uninitialized);
+ m_ntscj_ipl->setEnabled(is_uninitialized && File::Exists(Config::GetBootROMPath(JAP_DIR)));
+ m_ntscu_ipl->setEnabled(is_uninitialized && File::Exists(Config::GetBootROMPath(USA_DIR)));
+ m_pal_ipl->setEnabled(is_uninitialized && File::Exists(Config::GetBootROMPath(EUR_DIR)));
+ m_wad_install_action->setEnabled(is_uninitialized);
+ m_import_backup->setEnabled(is_uninitialized);
+ m_check_nand->setEnabled(is_uninitialized);
+ m_import_wii_save->setEnabled(is_uninitialized);
+ m_export_wii_saves->setEnabled(is_uninitialized);
+
+ if (is_uninitialized)
{
IOS::HLE::Kernel ios;
const auto tmd = ios.GetESCore().FindInstalledTMD(Titles::SYSTEM_MENU);
@@ -1086,7 +1092,7 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)
}
const auto bt = WiiUtils::GetBluetoothEmuDevice();
- const bool enable_wiimotes = emulation_started && bt != nullptr;
+ const bool enable_wiimotes = is_running && bt != nullptr;
for (std::size_t i = 0; i < m_wii_remotes.size(); i++)
{
@@ -1257,16 +1263,20 @@ void MenuBar::OnSelectionChanged(std::shared_ptr<const UICommon::GameFile> game_
m_game_selected = !!game_file;
auto& system = Core::System::GetInstance();
- const bool core_is_running = Core::IsRunning(system);
- m_recording_play->setEnabled(m_game_selected && !core_is_running);
- m_recording_start->setEnabled((m_game_selected || core_is_running) &&
+ const bool can_start_from_boot = m_game_selected && Core::IsUninitialized(system);
+ const bool can_start_from_savestate = Core::IsRunning(system);
+ m_recording_play->setEnabled(can_start_from_boot);
+ m_recording_start->setEnabled((can_start_from_boot || can_start_from_savestate) &&
!system.GetMovie().IsPlayingInput());
}
void MenuBar::OnRecordingStatusChanged(bool recording)
{
auto& system = Core::System::GetInstance();
- m_recording_start->setEnabled(!recording && (m_game_selected || Core::IsRunning(system)));
+ const bool can_start_from_boot = m_game_selected && Core::IsUninitialized(system);
+ const bool can_start_from_savestate = Core::IsRunning(system);
+
+ m_recording_start->setEnabled(!recording && (can_start_from_boot || can_start_from_savestate));
m_recording_stop->setEnabled(recording);
m_recording_export->setEnabled(recording);
}
diff --git a/Source/Core/DolphinQt/MenuBar.h b/Source/Core/DolphinQt/MenuBar.h
index b6620291d2..538ca29bb5 100644
--- a/Source/Core/DolphinQt/MenuBar.h
+++ b/Source/Core/DolphinQt/MenuBar.h
@@ -43,7 +43,7 @@ public:
explicit MenuBar(QWidget* parent = nullptr);
- void UpdateToolsMenu(bool emulation_started);
+ void UpdateToolsMenu(Core::State state);
QMenu* GetListColumnsMenu() const { return m_cols_menu; }
diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp
index 4ae4b5f315..2bbf52d11d 100644
--- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp
+++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp
@@ -804,9 +804,11 @@ void NetPlayDialog::DisplayMessage(const QString& msg, const std::string& color,
QColor c(color.empty() ? QStringLiteral("white") : QString::fromStdString(color));
if (g_ActiveConfig.bShowNetPlayMessages && Core::IsRunning(Core::System::GetInstance()))
+ {
g_netplay_chat_ui->AppendChat(msg.toStdString(),
{static_cast<float>(c.redF()), static_cast<float>(c.greenF()),
static_cast<float>(c.blueF())});
+ }
}
void NetPlayDialog::AppendChat(const std::string& msg)
diff --git a/Source/Core/DolphinQt/Settings/AdvancedPane.cpp b/Source/Core/DolphinQt/Settings/AdvancedPane.cpp
index 9aaef7be2d..2f4c163674 100644
--- a/Source/Core/DolphinQt/Settings/AdvancedPane.cpp
+++ b/Source/Core/DolphinQt/Settings/AdvancedPane.cpp
@@ -240,7 +240,7 @@ void AdvancedPane::ConnectLayout()
void AdvancedPane::Update()
{
- const bool running = Core::GetState(Core::System::GetInstance()) != Core::State::Uninitialized;
+ const bool running = !Core::IsUninitialized(Core::System::GetInstance());
const bool enable_cpu_clock_override_widgets = Config::Get(Config::MAIN_OVERCLOCK_ENABLE);
const bool enable_ram_override_widgets = Config::Get(Config::MAIN_RAM_OVERRIDE_ENABLE);
const bool enable_custom_rtc_widgets = Config::Get(Config::MAIN_CUSTOM_RTC_ENABLE) && !running;
diff --git a/Source/Core/DolphinQt/Settings/AudioPane.cpp b/Source/Core/DolphinQt/Settings/AudioPane.cpp
index 289dc28e7d..d2290025ed 100644
--- a/Source/Core/DolphinQt/Settings/AudioPane.cpp
+++ b/Source/Core/DolphinQt/Settings/AudioPane.cpp
@@ -40,8 +40,7 @@ AudioPane::AudioPane()
OnEmulationStateChanged(state != Core::State::Uninitialized);
});
- OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
- Core::State::Uninitialized);
+ OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void AudioPane::CreateWidgets()
diff --git a/Source/Core/DolphinQt/Settings/WiiPane.cpp b/Source/Core/DolphinQt/Settings/WiiPane.cpp
index b6ad36654f..0e432855af 100644
--- a/Source/Core/DolphinQt/Settings/WiiPane.cpp
+++ b/Source/Core/DolphinQt/Settings/WiiPane.cpp
@@ -93,8 +93,7 @@ WiiPane::WiiPane(QWidget* parent) : QWidget(parent)
LoadConfig();
ConnectLayout();
ValidateSelectionState();
- OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
- Core::State::Uninitialized);
+ OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void WiiPane::CreateLayout()
diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp
index efa159795c..0e2e3566ea 100644
--- a/Source/Core/VideoCommon/VideoConfig.cpp
+++ b/Source/Core/VideoCommon/VideoConfig.cpp
@@ -66,15 +66,12 @@ void VideoConfig::Refresh()
CPUThreadConfigCallback::AddConfigChangedCallback([]() {
auto& system = Core::System::GetInstance();
- const bool lock_gpu_thread = Core::IsRunning(system);
- if (lock_gpu_thread)
- system.GetFifo().PauseAndLock(true, false);
+ system.GetFifo().PauseAndLock(true, false);
g_Config.Refresh();
g_Config.VerifyValidity();
- if (lock_gpu_thread)
- system.GetFifo().PauseAndLock(false, true);
+ system.GetFifo().PauseAndLock(false, true);
});
s_has_registered_callback = true;
}