Skip to content

Commit

Permalink
Merge pull request #6371 from rukai/dolphinQtHotkeyFixes
Browse files Browse the repository at this point in the history
Qt: Various fixes to hotkeys
  • Loading branch information
Helios747 committed Feb 12, 2018
2 parents 5b74414 + 4b5373b commit 35c43e7
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Source/Core/Core/Core.cpp
Expand Up @@ -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;
Expand Down
17 changes: 9 additions & 8 deletions Source/Core/DolphinQt2/HotkeyScheduler.cpp
Expand Up @@ -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 &&
Expand All @@ -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;
Expand Down Expand Up @@ -143,7 +144,7 @@ void HotkeyScheduler::Run()

// Pause and Unpause
if (IsHotkey(HK_PLAY_PAUSE))
emit PauseHotkey();
emit TogglePauseHotkey();

// Stop
if (IsHotkey(HK_STOP))
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/DolphinQt2/HotkeyScheduler.h
Expand Up @@ -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();
Expand Down
20 changes: 15 additions & 5 deletions Source/Core/DolphinQt2/MainWindow.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand All @@ -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);
}

Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinQt2/MainWindow.h
Expand Up @@ -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();
Expand Down

0 comments on commit 35c43e7

Please sign in to comment.