mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-07 12:05:52 +00:00
FullscreenUI: Fix various issues
- Pause menu losing key focus the first time it's opened. - Pause menu being unopenable after close when paused. - Key nav not being enabled after closing game via main UI.
This commit is contained in:
parent
a3e840526a
commit
3bf5ded0d2
@ -747,7 +747,6 @@ bool FullscreenUI::Initialize()
|
|||||||
else
|
else
|
||||||
UpdateRunIdleState();
|
UpdateRunIdleState();
|
||||||
|
|
||||||
ForceKeyNavEnabled();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -797,6 +796,20 @@ void FullscreenUI::OnSystemStarting()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FullscreenUI::OnSystemPaused()
|
||||||
|
{
|
||||||
|
// NOTE: Called on CPU thread.
|
||||||
|
if (!IsInitialized())
|
||||||
|
return;
|
||||||
|
|
||||||
|
GPUThread::RunOnThread([]() {
|
||||||
|
if (!IsInitialized())
|
||||||
|
return;
|
||||||
|
|
||||||
|
UpdateRunIdleState();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void FullscreenUI::OnSystemResumed()
|
void FullscreenUI::OnSystemResumed()
|
||||||
{
|
{
|
||||||
// NOTE: Called on CPU thread.
|
// NOTE: Called on CPU thread.
|
||||||
@ -927,9 +940,14 @@ void FullscreenUI::ClosePauseMenu()
|
|||||||
s_state.current_main_window = MainWindowType::None;
|
s_state.current_main_window = MainWindowType::None;
|
||||||
s_state.current_pause_submenu = PauseSubMenu::None;
|
s_state.current_pause_submenu = PauseSubMenu::None;
|
||||||
s_state.pause_menu_was_open = false;
|
s_state.pause_menu_was_open = false;
|
||||||
|
ImGui::SetWindowFocus(nullptr);
|
||||||
QueueResetFocus(FocusResetType::ViewChanged);
|
QueueResetFocus(FocusResetType::ViewChanged);
|
||||||
UpdateRunIdleState();
|
UpdateRunIdleState();
|
||||||
FixStateIfPaused();
|
FixStateIfPaused();
|
||||||
|
|
||||||
|
// Present frame with menu closed. We have to defer this for a frame so imgui loses keyboard focus.
|
||||||
|
if (GPUThread::IsSystemPaused())
|
||||||
|
GPUThread::PresentCurrentFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::OpenPauseSubMenu(PauseSubMenu submenu)
|
void FullscreenUI::OpenPauseSubMenu(PauseSubMenu submenu)
|
||||||
@ -1122,12 +1140,23 @@ void FullscreenUI::ReturnToPreviousWindow()
|
|||||||
void FullscreenUI::ReturnToMainWindow()
|
void FullscreenUI::ReturnToMainWindow()
|
||||||
{
|
{
|
||||||
ClosePauseMenu();
|
ClosePauseMenu();
|
||||||
|
|
||||||
if (GPUThread::HasGPUBackend())
|
if (GPUThread::HasGPUBackend())
|
||||||
|
{
|
||||||
s_state.current_main_window = MainWindowType::None;
|
s_state.current_main_window = MainWindowType::None;
|
||||||
|
ImGui::SetWindowFocus(nullptr);
|
||||||
|
}
|
||||||
else if (ShouldOpenToGameList())
|
else if (ShouldOpenToGameList())
|
||||||
|
{
|
||||||
SwitchToGameList();
|
SwitchToGameList();
|
||||||
|
ForceKeyNavEnabled();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
s_state.current_main_window = MainWindowType::Landing;
|
s_state.current_main_window = MainWindowType::Landing;
|
||||||
|
ForceKeyNavEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
UpdateRunIdleState();
|
UpdateRunIdleState();
|
||||||
FixStateIfPaused();
|
FixStateIfPaused();
|
||||||
}
|
}
|
||||||
@ -1943,6 +1972,8 @@ void FullscreenUI::DrawLandingWindow()
|
|||||||
SwitchToGameList();
|
SwitchToGameList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::SetItemDefaultFocus();
|
||||||
|
|
||||||
if (UserThemeableHorizontalButton(
|
if (UserThemeableHorizontalButton(
|
||||||
"fullscreenui/cdrom.png", "fullscreenui/start-disc.svg", FSUI_CSTR("Start Game"),
|
"fullscreenui/cdrom.png", "fullscreenui/start-disc.svg", FSUI_CSTR("Start Game"),
|
||||||
FSUI_CSTR("Launch a game from a file, disc, or starts the console without any disc inserted.")))
|
FSUI_CSTR("Launch a game from a file, disc, or starts the console without any disc inserted.")))
|
||||||
@ -6600,8 +6631,7 @@ void FullscreenUI::DrawPauseMenu()
|
|||||||
|
|
||||||
if (MenuButtonWithoutSummary(FSUI_ICONSTR(ICON_FA_PLAY, "Resume Game")) || WantsToCloseMenu())
|
if (MenuButtonWithoutSummary(FSUI_ICONSTR(ICON_FA_PLAY, "Resume Game")) || WantsToCloseMenu())
|
||||||
ClosePauseMenu();
|
ClosePauseMenu();
|
||||||
else
|
ImGui::SetItemDefaultFocus();
|
||||||
ImGui::SetItemDefaultFocus();
|
|
||||||
|
|
||||||
if (MenuButtonWithoutSummary(FSUI_ICONSTR(ICON_FA_FAST_FORWARD, "Toggle Fast Forward"), false))
|
if (MenuButtonWithoutSummary(FSUI_ICONSTR(ICON_FA_FAST_FORWARD, "Toggle Fast Forward"), false))
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@ bool IsInitialized();
|
|||||||
bool HasActiveWindow();
|
bool HasActiveWindow();
|
||||||
void CheckForConfigChanges(const GPUSettings& old_settings);
|
void CheckForConfigChanges(const GPUSettings& old_settings);
|
||||||
void OnSystemStarting();
|
void OnSystemStarting();
|
||||||
|
void OnSystemPaused();
|
||||||
void OnSystemResumed();
|
void OnSystemResumed();
|
||||||
void OnSystemDestroyed();
|
void OnSystemDestroyed();
|
||||||
void OnRunningGameChanged(const std::string& path, const std::string& serial, const std::string& title, GameHash hash);
|
void OnRunningGameChanged(const std::string& path, const std::string& serial, const std::string& title, GameHash hash);
|
||||||
|
@ -626,7 +626,8 @@ void ImGuiManager::DrawFrameTimeOverlay(float& position_y, float scale, float ma
|
|||||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f));
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
|
||||||
if (ImGui::Begin("##frame_times", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoInputs))
|
if (ImGui::Begin("##frame_times", nullptr,
|
||||||
|
ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoFocusOnAppearing))
|
||||||
{
|
{
|
||||||
ImGui::PushFont(fixed_font);
|
ImGui::PushFont(fixed_font);
|
||||||
|
|
||||||
|
@ -1591,6 +1591,8 @@ void System::PauseSystem(bool paused)
|
|||||||
|
|
||||||
if (paused)
|
if (paused)
|
||||||
{
|
{
|
||||||
|
FullscreenUI::OnSystemPaused();
|
||||||
|
|
||||||
InputManager::PauseVibration();
|
InputManager::PauseVibration();
|
||||||
InputManager::UpdateHostMouseMode();
|
InputManager::UpdateHostMouseMode();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user