mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-03 02:00:05 +00:00
FullscreenUI: Fix nav focus loss in leaderboards
Stops hotkeys triggering when using mouse navigation. Also fixes the first leaderboard entry not focusing on page swap.
This commit is contained in:
parent
1ad9ca7e90
commit
fc7934a2be
@ -2357,6 +2357,9 @@ void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::fun
|
||||
|
||||
void Achievements::ClearUIState()
|
||||
{
|
||||
if (!FullscreenUI::IsInitialized())
|
||||
return;
|
||||
|
||||
CloseLeaderboard();
|
||||
|
||||
s_state.achievement_badge_paths = {};
|
||||
@ -3339,7 +3342,7 @@ void Achievements::DrawLeaderboardsWindow()
|
||||
ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, false) || ImGui::IsKeyPressed(ImGuiKey_RightArrow, false))
|
||||
{
|
||||
s_state.is_showing_all_leaderboard_entries = !s_state.is_showing_all_leaderboard_entries;
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::Other);
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::ViewChanged);
|
||||
}
|
||||
|
||||
for (const bool show_all : {false, true})
|
||||
@ -3350,6 +3353,7 @@ void Achievements::DrawLeaderboardsWindow()
|
||||
tab_height_unscaled, heading_background))
|
||||
{
|
||||
s_state.is_showing_all_leaderboard_entries = show_all;
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::ViewChanged);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3461,14 +3465,8 @@ void Achievements::DrawLeaderboardsWindow()
|
||||
"leaderboard", background, 0.0f,
|
||||
ImVec2(ImGuiFullscreen::LAYOUT_MENU_WINDOW_X_PADDING, ImGuiFullscreen::LAYOUT_MENU_WINDOW_Y_PADDING), 0))
|
||||
{
|
||||
// Defer focus reset until loading finishes.
|
||||
if (!s_state.is_showing_all_leaderboard_entries ||
|
||||
(ImGuiFullscreen::IsFocusResetFromWindowChange() && !s_state.leaderboard_entry_lists.empty()))
|
||||
{
|
||||
ImGuiFullscreen::ResetFocusHere();
|
||||
}
|
||||
|
||||
ImGuiFullscreen::BeginMenuButtons();
|
||||
ImGuiFullscreen::ResetFocusHere();
|
||||
|
||||
if (!s_state.is_showing_all_leaderboard_entries)
|
||||
{
|
||||
@ -3725,6 +3723,7 @@ void Achievements::LeaderboardFetchNearbyCallback(int result, const char* error_
|
||||
if (s_state.leaderboard_nearby_entries)
|
||||
rc_client_destroy_leaderboard_entry_list(s_state.leaderboard_nearby_entries);
|
||||
s_state.leaderboard_nearby_entries = list;
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::Other);
|
||||
}
|
||||
|
||||
void Achievements::LeaderboardFetchAllCallback(int result, const char* error_message,
|
||||
@ -3742,6 +3741,9 @@ void Achievements::LeaderboardFetchAllCallback(int result, const char* error_mes
|
||||
return;
|
||||
}
|
||||
|
||||
if (s_state.leaderboard_entry_lists.empty())
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::Other);
|
||||
|
||||
s_state.leaderboard_entry_lists.push_back(list);
|
||||
}
|
||||
|
||||
@ -3781,6 +3783,7 @@ void Achievements::CloseLeaderboard()
|
||||
}
|
||||
|
||||
s_state.open_leaderboard = nullptr;
|
||||
ImGuiFullscreen::QueueResetFocus(ImGuiFullscreen::FocusResetType::ViewChanged);
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
Loading…
x
Reference in New Issue
Block a user