Skip to content
Permalink
Browse files

Merge pull request #6371 from rukai/dolphinQtHotkeyFixes

Qt: Various fixes to hotkeys
  • Loading branch information...
Helios747 committed Feb 12, 2018
2 parents 5b74414 + 4b5373b commit 35c43e74d05a1f667c2e5f72e5c3a993adb8e101
@@ -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;
@@ -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))
@@ -23,7 +23,7 @@ class HotkeyScheduler : public QObject
void ExitHotkey();
void FullScreenHotkey();
void StopHotkey();
void PauseHotkey();
void TogglePauseHotkey();
void ScreenShotHotkey();
void SetStateSlotHotkey(int slot);
void StateLoadSlotHotkey();
@@ -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);
}

@@ -53,6 +53,7 @@ class MainWindow final : public QMainWindow
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();

0 comments on commit 35c43e7

Please sign in to comment.
You can’t perform that action at this time.