FullscreenUI: Untangle Escape button behaviour

Now it doesn't race against Open Pause Menu
This commit is contained in:
Silent 2022-07-23 11:38:46 +02:00
parent 4d89b52d3b
commit 3040ce7bbd
No known key found for this signature in database
GPG key ID: AE53149BB0C45AF1
3 changed files with 19 additions and 15 deletions

View file

@ -628,6 +628,8 @@ void FullscreenUI::Render()
GetEditingSettingsInterface()->Save(); GetEditingSettingsInterface()->Save();
Host::RunOnCPUThread([]() { System::ApplySettings(false); }); Host::RunOnCPUThread([]() { System::ApplySettings(false); });
} }
ImGuiFullscreen::ResetCloseMenuIfNeeded();
} }
void FullscreenUI::ReturnToMainWindow() void FullscreenUI::ReturnToMainWindow()
@ -2066,7 +2068,7 @@ void FullscreenUI::DrawSettingsWindow()
{ {
ResetFocusHere(); ResetFocusHere();
if (ImGui::IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed)) if (WantsToCloseMenu())
{ {
if (ImGui::IsWindowFocused()) if (ImGui::IsWindowFocused())
ReturnToMainWindow(); ReturnToMainWindow();

View file

@ -474,18 +474,26 @@ bool ImGuiFullscreen::WantsToCloseMenu()
// Wait for the Close button to be released, THEN pressed // Wait for the Close button to be released, THEN pressed
if (s_close_button_state == 0) if (s_close_button_state == 0)
{ {
if (!IsCancelButtonPressed()) if (ImGui::IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed))
s_close_button_state = 1; s_close_button_state = 1;
} }
else if (s_close_button_state == 1) else if (s_close_button_state == 1)
{ {
if (IsCancelButtonPressed()) if (ImGui::IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Released))
{ {
s_close_button_state = 0; s_close_button_state = 2;
return true;
} }
} }
return false; return s_close_button_state > 1;
}
void ImGuiFullscreen::ResetCloseMenuIfNeeded()
{
// If s_close_button_state reached the "Released" state, reset it after the tick
if (s_close_button_state > 1)
{
s_close_button_state = 0;
}
} }
void ImGuiFullscreen::PushPrimaryColor() void ImGuiFullscreen::PushPrimaryColor()
@ -516,11 +524,6 @@ void ImGuiFullscreen::PopSecondaryColor()
ImGui::PopStyleColor(5); ImGui::PopStyleColor(5);
} }
bool ImGuiFullscreen::IsCancelButtonPressed()
{
return ImGui::IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed);
}
bool ImGuiFullscreen::BeginFullscreenColumns(const char* title) bool ImGuiFullscreen::BeginFullscreenColumns(const char* title)
{ {
ImGui::SetNextWindowPos(ImVec2(g_layout_padding_left, 0.0f)); ImGui::SetNextWindowPos(ImVec2(g_layout_padding_left, 0.0f));
@ -1639,7 +1642,7 @@ void ImGuiFullscreen::DrawFileSelector()
ImGui::PushStyleColor(ImGuiCol_TitleBgActive, UIPrimaryColor); ImGui::PushStyleColor(ImGuiCol_TitleBgActive, UIPrimaryColor);
ImGui::PushStyleColor(ImGuiCol_PopupBg, UIBackgroundColor); ImGui::PushStyleColor(ImGuiCol_PopupBg, UIBackgroundColor);
bool is_open = !IsCancelButtonPressed(); bool is_open = !WantsToCloseMenu();
bool directory_selected = false; bool directory_selected = false;
if (ImGui::BeginPopupModal(s_file_selector_title.c_str(), &is_open, if (ImGui::BeginPopupModal(s_file_selector_title.c_str(), &is_open,
ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove)) ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove))
@ -1759,7 +1762,7 @@ void ImGuiFullscreen::DrawChoiceDialog()
ImGui::PushStyleColor(ImGuiCol_TitleBgActive, UIPrimaryColor); ImGui::PushStyleColor(ImGuiCol_TitleBgActive, UIPrimaryColor);
ImGui::PushStyleColor(ImGuiCol_PopupBg, UIBackgroundColor); ImGui::PushStyleColor(ImGuiCol_PopupBg, UIBackgroundColor);
bool is_open = !IsCancelButtonPressed(); bool is_open = !WantsToCloseMenu();
s32 choice = -1; s32 choice = -1;
if (ImGui::BeginPopupModal(s_choice_dialog_title.c_str(), &is_open, if (ImGui::BeginPopupModal(s_choice_dialog_title.c_str(), &is_open,

View file

@ -128,14 +128,13 @@ void EndLayout();
void QueueResetFocus(); void QueueResetFocus();
bool ResetFocusHere(); bool ResetFocusHere();
bool WantsToCloseMenu(); bool WantsToCloseMenu();
void ResetCloseMenuIfNeeded();
void PushPrimaryColor(); void PushPrimaryColor();
void PopPrimaryColor(); void PopPrimaryColor();
void PushSecondaryColor(); void PushSecondaryColor();
void PopSecondaryColor(); void PopSecondaryColor();
bool IsCancelButtonPressed();
void DrawWindowTitle(const char* title); void DrawWindowTitle(const char* title);
bool BeginFullscreenColumns(const char* title = nullptr); bool BeginFullscreenColumns(const char* title = nullptr);