Merge pull request #12784 from TryTwo/PR_Frame_Advance_Fix
Frame Advance: Fix UI update spam when continuously advancing.
This commit is contained in:
commit
1fb4dbcea4
|
@ -250,6 +250,9 @@ void Host_YieldToUI()
|
||||||
|
|
||||||
void Host_UpdateDisasmDialog()
|
void Host_UpdateDisasmDialog()
|
||||||
{
|
{
|
||||||
|
if (Settings::Instance().GetIsContinuouslyFrameStepping())
|
||||||
|
return;
|
||||||
|
|
||||||
QueueOnObject(QApplication::instance(), [] { emit Host::GetInstance()->UpdateDisasmDialog(); });
|
QueueOnObject(QApplication::instance(), [] { emit Host::GetInstance()->UpdateDisasmDialog(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,8 @@ static void HandleFrameStepHotkeys()
|
||||||
|
|
||||||
if ((frame_step_count == 0 || frame_step_count == FRAME_STEP_DELAY) && !frame_step_hold)
|
if ((frame_step_count == 0 || frame_step_count == FRAME_STEP_DELAY) && !frame_step_hold)
|
||||||
{
|
{
|
||||||
|
if (frame_step_count > 0)
|
||||||
|
Settings::Instance().SetIsContinuouslyFrameStepping(true);
|
||||||
Core::QueueHostJob([](auto& system) { Core::DoFrameStep(system); });
|
Core::QueueHostJob([](auto& system) { Core::DoFrameStep(system); });
|
||||||
frame_step_hold = true;
|
frame_step_hold = true;
|
||||||
}
|
}
|
||||||
|
@ -138,6 +140,8 @@ static void HandleFrameStepHotkeys()
|
||||||
frame_step_count = 0;
|
frame_step_count = 0;
|
||||||
frame_step_hold = false;
|
frame_step_hold = false;
|
||||||
frame_step_delay_count = 0;
|
frame_step_delay_count = 0;
|
||||||
|
Settings::Instance().SetIsContinuouslyFrameStepping(false);
|
||||||
|
emit Settings::Instance().EmulationStateChanged(Core::GetState(Core::System::GetInstance()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,12 @@ Settings::Settings()
|
||||||
{
|
{
|
||||||
qRegisterMetaType<Core::State>();
|
qRegisterMetaType<Core::State>();
|
||||||
Core::AddOnStateChangedCallback([this](Core::State new_state) {
|
Core::AddOnStateChangedCallback([this](Core::State new_state) {
|
||||||
QueueOnObject(this, [this, new_state] { emit EmulationStateChanged(new_state); });
|
QueueOnObject(this, [this, new_state] {
|
||||||
|
// Avoid signal spam while continuously frame stepping. Will still send a signal for the first
|
||||||
|
// and last framestep.
|
||||||
|
if (!m_continuously_frame_stepping)
|
||||||
|
emit EmulationStateChanged(new_state);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
Config::AddConfigChangedCallback([this] {
|
Config::AddConfigChangedCallback([this] {
|
||||||
|
@ -827,3 +832,13 @@ void Settings::SetUSBKeyboardConnected(bool connected)
|
||||||
emit USBKeyboardConnectionChanged(connected);
|
emit USBKeyboardConnectionChanged(connected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::SetIsContinuouslyFrameStepping(bool is_stepping)
|
||||||
|
{
|
||||||
|
m_continuously_frame_stepping = is_stepping;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Settings::GetIsContinuouslyFrameStepping() const
|
||||||
|
{
|
||||||
|
return m_continuously_frame_stepping;
|
||||||
|
}
|
||||||
|
|
|
@ -120,6 +120,9 @@ public:
|
||||||
bool IsUSBKeyboardConnected() const;
|
bool IsUSBKeyboardConnected() const;
|
||||||
void SetUSBKeyboardConnected(bool connected);
|
void SetUSBKeyboardConnected(bool connected);
|
||||||
|
|
||||||
|
void SetIsContinuouslyFrameStepping(bool is_stepping);
|
||||||
|
bool GetIsContinuouslyFrameStepping() const;
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
Config::ShowCursor GetCursorVisibility() const;
|
Config::ShowCursor GetCursorVisibility() const;
|
||||||
bool GetLockCursor() const;
|
bool GetLockCursor() const;
|
||||||
|
@ -229,6 +232,8 @@ private:
|
||||||
Settings();
|
Settings();
|
||||||
|
|
||||||
bool m_batch = false;
|
bool m_batch = false;
|
||||||
|
std::atomic<bool> m_continuously_frame_stepping = false;
|
||||||
|
|
||||||
std::shared_ptr<NetPlay::NetPlayClient> m_client;
|
std::shared_ptr<NetPlay::NetPlayClient> m_client;
|
||||||
std::shared_ptr<NetPlay::NetPlayServer> m_server;
|
std::shared_ptr<NetPlay::NetPlayServer> m_server;
|
||||||
ControllerInterface::HotplugCallbackHandle m_hotplug_callback_handle;
|
ControllerInterface::HotplugCallbackHandle m_hotplug_callback_handle;
|
||||||
|
|
Loading…
Reference in New Issue