Remove hardcoded esc hotkey, make pause/stop hotkey actually toggle rather than just pausing, fix frame advance hotkey

This commit is contained in:
Rukai 2018-02-09 22:54:35 +11:00
parent fa91d74e2c
commit 4b5373b25b
5 changed files with 27 additions and 15 deletions

View File

@ -629,7 +629,7 @@ State GetState()
if (s_hardware_initialized)
{
if (CPU::IsStepping())
if (CPU::IsStepping() || s_frame_step)
return State::Paused;
return State::Running;

View File

@ -89,14 +89,16 @@ static void HandleFrameskipHotkeys()
if (frame_step_delay_count < frame_step_delay && frame_step_hold)
frame_step_delay_count++;
// TODO GUI Update (Depends on an unimplemented feature)
// 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)
{
Core::DoFrameStep();
frame_step_hold = true;
}
if (frame_step_count < FRAME_STEP_DELAY)
{
++frame_step_count;
if (frame_step_hold)
frame_step_hold = false;
frame_step_count++;
frame_step_hold = false;
}
if (frame_step_count == FRAME_STEP_DELAY && frame_step_hold &&
@ -108,8 +110,7 @@ static void HandleFrameskipHotkeys()
return;
}
if (frame_step_count > 0)
else if (frame_step_count > 0)
{
// Reset frame advance
frame_step_count = 0;
@ -143,7 +144,7 @@ void HotkeyScheduler::Run()
// Pause and Unpause
if (IsHotkey(HK_PLAY_PAUSE))
emit PauseHotkey();
emit TogglePauseHotkey();
// Stop
if (IsHotkey(HK_STOP))

View File

@ -23,7 +23,7 @@ signals:
void ExitHotkey();
void FullScreenHotkey();
void StopHotkey();
void PauseHotkey();
void TogglePauseHotkey();
void ScreenShotHotkey();
void SetStateSlotHotkey(int slot);
void StateLoadSlotHotkey();

View File

@ -271,7 +271,7 @@ void MainWindow::ConnectMenuBar()
void MainWindow::ConnectHotkeys()
{
connect(m_hotkey_scheduler, &HotkeyScheduler::ExitHotkey, this, &MainWindow::close);
connect(m_hotkey_scheduler, &HotkeyScheduler::PauseHotkey, this, &MainWindow::Pause);
connect(m_hotkey_scheduler, &HotkeyScheduler::TogglePauseHotkey, this, &MainWindow::TogglePause);
connect(m_hotkey_scheduler, &HotkeyScheduler::StopHotkey, this, &MainWindow::RequestStop);
connect(m_hotkey_scheduler, &HotkeyScheduler::ScreenShotHotkey, this, &MainWindow::ScreenShot);
connect(m_hotkey_scheduler, &HotkeyScheduler::FullScreenHotkey, this, &MainWindow::FullScreen);
@ -322,7 +322,6 @@ void MainWindow::ConnectRenderWidget()
{
m_rendering_to_main = false;
m_render_widget->hide();
connect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop);
connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
}
@ -397,6 +396,18 @@ void MainWindow::Pause()
EnableScreenSaver(true);
}
void MainWindow::TogglePause()
{
if (Core::GetState() == Core::State::Paused)
{
Play();
}
else
{
Pause();
}
}
void MainWindow::OnStopComplete()
{
m_stop_requested = false;
@ -577,8 +588,8 @@ void MainWindow::HideRenderWidget()
}
// The following code works around a driver bug that would lead to Dolphin crashing when changing
// graphics backends (e.g. OpenGL to Vulkan). To avoid this the render widget is (safely) recreated
disconnect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop);
// graphics backends (e.g. OpenGL to Vulkan). To avoid this the render widget is (safely)
// recreated
disconnect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
m_render_widget->hide();
@ -588,7 +599,6 @@ void MainWindow::HideRenderWidget()
m_render_widget = new RenderWidget;
m_render_widget->installEventFilter(this);
connect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop);
connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
}

View File

@ -53,6 +53,7 @@ private:
void Open();
void Play(const std::optional<std::string>& savestate_path = {});
void Pause();
void TogglePause();
// May ask for confirmation. Returns whether or not it actually stopped.
bool RequestStop();