mirror of https://github.com/PCSX2/pcsx2.git
FullscreenUI: Fix popup close resetting window scroll
Backport from 13a37418e6
This commit is contained in:
parent
4f405adea9
commit
c72d98d4cd
|
@ -81,6 +81,7 @@ namespace
|
||||||
#define FSUI_FSTR(str) fmt::runtime(Host::TranslateToStringView(TR_CONTEXT, str))
|
#define FSUI_FSTR(str) fmt::runtime(Host::TranslateToStringView(TR_CONTEXT, str))
|
||||||
#define FSUI_NSTR(str) str
|
#define FSUI_NSTR(str) str
|
||||||
|
|
||||||
|
using ImGuiFullscreen::FocusResetType;
|
||||||
using ImGuiFullscreen::g_large_font;
|
using ImGuiFullscreen::g_large_font;
|
||||||
using ImGuiFullscreen::g_layout_padding_left;
|
using ImGuiFullscreen::g_layout_padding_left;
|
||||||
using ImGuiFullscreen::g_layout_padding_top;
|
using ImGuiFullscreen::g_layout_padding_top;
|
||||||
|
@ -134,6 +135,7 @@ using ImGuiFullscreen::ForceKeyNavEnabled;
|
||||||
using ImGuiFullscreen::GetCachedTexture;
|
using ImGuiFullscreen::GetCachedTexture;
|
||||||
using ImGuiFullscreen::GetCachedTextureAsync;
|
using ImGuiFullscreen::GetCachedTextureAsync;
|
||||||
using ImGuiFullscreen::GetPlaceholderTexture;
|
using ImGuiFullscreen::GetPlaceholderTexture;
|
||||||
|
using ImGuiFullscreen::GetQueuedFocusResetType;
|
||||||
using ImGuiFullscreen::HorizontalMenuItem;
|
using ImGuiFullscreen::HorizontalMenuItem;
|
||||||
using ImGuiFullscreen::IsFocusResetQueued;
|
using ImGuiFullscreen::IsFocusResetQueued;
|
||||||
using ImGuiFullscreen::IsGamepadInputSource;
|
using ImGuiFullscreen::IsGamepadInputSource;
|
||||||
|
@ -655,7 +657,7 @@ void FullscreenUI::OnVMStarted()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s_current_main_window = MainWindowType::None;
|
s_current_main_window = MainWindowType::None;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -723,7 +725,7 @@ void FullscreenUI::OpenPauseMenu()
|
||||||
ForceKeyNavEnabled();
|
ForceKeyNavEnabled();
|
||||||
s_current_main_window = MainWindowType::PauseMenu;
|
s_current_main_window = MainWindowType::PauseMenu;
|
||||||
s_current_pause_submenu = PauseSubMenu::None;
|
s_current_pause_submenu = PauseSubMenu::None;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -738,14 +740,14 @@ void FullscreenUI::ClosePauseMenu()
|
||||||
s_current_main_window = MainWindowType::None;
|
s_current_main_window = MainWindowType::None;
|
||||||
s_current_pause_submenu = PauseSubMenu::None;
|
s_current_pause_submenu = PauseSubMenu::None;
|
||||||
s_pause_menu_was_open = false;
|
s_pause_menu_was_open = false;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::OpenPauseSubMenu(PauseSubMenu submenu)
|
void FullscreenUI::OpenPauseSubMenu(PauseSubMenu submenu)
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::PauseMenu;
|
s_current_main_window = MainWindowType::PauseMenu;
|
||||||
s_current_pause_submenu = submenu;
|
s_current_pause_submenu = submenu;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::Shutdown(bool clear_state)
|
void FullscreenUI::Shutdown(bool clear_state)
|
||||||
|
@ -901,7 +903,7 @@ void FullscreenUI::ReturnToPreviousWindow()
|
||||||
if (VMManager::HasValidVM() && s_pause_menu_was_open)
|
if (VMManager::HasValidVM() && s_pause_menu_was_open)
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::PauseMenu;
|
s_current_main_window = MainWindowType::PauseMenu;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -976,7 +978,6 @@ void FullscreenUI::DoStartFile()
|
||||||
if (!path.empty())
|
if (!path.empty())
|
||||||
DoStartPath(path);
|
DoStartPath(path);
|
||||||
|
|
||||||
QueueResetFocus();
|
|
||||||
CloseFileSelector();
|
CloseFileSelector();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1040,7 +1041,6 @@ void FullscreenUI::DoStartDisc()
|
||||||
FSUI_ICONSTR(ICON_FA_COMPACT_DISC, "Select Disc Drive"), false, std::move(options), [](s32, const std::string& path, bool) {
|
FSUI_ICONSTR(ICON_FA_COMPACT_DISC, "Select Disc Drive"), false, std::move(options), [](s32, const std::string& path, bool) {
|
||||||
DoStartDisc(path);
|
DoStartDisc(path);
|
||||||
CloseChoiceDialog();
|
CloseChoiceDialog();
|
||||||
QueueResetFocus();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,7 +1115,6 @@ void FullscreenUI::DoChangeDiscFromFile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueResetFocus();
|
|
||||||
CloseFileSelector();
|
CloseFileSelector();
|
||||||
ReturnToPreviousWindow();
|
ReturnToPreviousWindow();
|
||||||
ClosePauseMenu();
|
ClosePauseMenu();
|
||||||
|
@ -1170,7 +1169,7 @@ void FullscreenUI::ConfirmShutdownIfMemcardBusy(std::function<void(bool)> callba
|
||||||
void FullscreenUI::SwitchToLanding()
|
void FullscreenUI::SwitchToLanding()
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::Landing;
|
s_current_main_window = MainWindowType::Landing;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::DrawLandingTemplate(ImVec2* menu_pos, ImVec2* menu_size)
|
void FullscreenUI::DrawLandingTemplate(ImVec2* menu_pos, ImVec2* menu_size)
|
||||||
|
@ -1267,7 +1266,7 @@ void FullscreenUI::DrawLandingWindow()
|
||||||
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.")))
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::StartGame;
|
s_current_main_window = MainWindowType::StartGame;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HorizontalMenuItem(GetCachedTexture("fullscreenui/applications-system.png"), FSUI_CSTR("Settings"),
|
if (HorizontalMenuItem(GetCachedTexture("fullscreenui/applications-system.png"), FSUI_CSTR("Settings"),
|
||||||
|
@ -1281,7 +1280,7 @@ void FullscreenUI::DrawLandingWindow()
|
||||||
(!AreAnyDialogsOpen() && WantsToCloseMenu()))
|
(!AreAnyDialogsOpen() && WantsToCloseMenu()))
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::Exit;
|
s_current_main_window = MainWindowType::Exit;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EndHorizontalMenu();
|
EndHorizontalMenu();
|
||||||
|
@ -1349,7 +1348,7 @@ void FullscreenUI::DrawStartGameWindow()
|
||||||
(!AreAnyDialogsOpen() && WantsToCloseMenu()))
|
(!AreAnyDialogsOpen() && WantsToCloseMenu()))
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::Landing;
|
s_current_main_window = MainWindowType::Landing;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EndHorizontalMenu();
|
EndHorizontalMenu();
|
||||||
|
@ -1395,7 +1394,7 @@ void FullscreenUI::DrawExitWindow()
|
||||||
WantsToCloseMenu())
|
WantsToCloseMenu())
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::Landing;
|
s_current_main_window = MainWindowType::Landing;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HorizontalMenuItem(GetCachedTexture("fullscreenui/exit.png"), FSUI_CSTR("Exit PCSX2"),
|
if (HorizontalMenuItem(GetCachedTexture("fullscreenui/exit.png"), FSUI_CSTR("Exit PCSX2"),
|
||||||
|
@ -2701,7 +2700,7 @@ void FullscreenUI::SwitchToGameSettings(const std::string_view serial, u32 crc)
|
||||||
PopulatePatchesAndCheatsList(serial, crc);
|
PopulatePatchesAndCheatsList(serial, crc);
|
||||||
s_current_main_window = MainWindowType::Settings;
|
s_current_main_window = MainWindowType::Settings;
|
||||||
s_settings_page = SettingsPage::Summary;
|
s_settings_page = SettingsPage::Summary;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::SwitchToGameSettings()
|
void FullscreenUI::SwitchToGameSettings()
|
||||||
|
@ -2844,7 +2843,7 @@ void FullscreenUI::DrawSettingsWindow()
|
||||||
{
|
{
|
||||||
index = (index == 0) ? (count - 1) : (index - 1);
|
index = (index == 0) ? (count - 1) : (index - 1);
|
||||||
s_settings_page = pages[index];
|
s_settings_page = pages[index];
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
else if (ImGui::IsKeyPressed(ImGuiKey_GamepadDpadRight, true) ||
|
else if (ImGui::IsKeyPressed(ImGuiKey_GamepadDpadRight, true) ||
|
||||||
ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, true) ||
|
ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, true) ||
|
||||||
|
@ -2852,7 +2851,7 @@ void FullscreenUI::DrawSettingsWindow()
|
||||||
{
|
{
|
||||||
index = (index + 1) % count;
|
index = (index + 1) % count;
|
||||||
s_settings_page = pages[index];
|
s_settings_page = pages[index];
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2876,6 +2875,7 @@ void FullscreenUI::DrawSettingsWindow()
|
||||||
if (NavButton(icons[i], i == index, true, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY))
|
if (NavButton(icons[i], i == index, true, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY))
|
||||||
{
|
{
|
||||||
s_settings_page = pages[i];
|
s_settings_page = pages[i];
|
||||||
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2886,7 +2886,12 @@ void FullscreenUI::DrawSettingsWindow()
|
||||||
|
|
||||||
// we have to do this here, because otherwise it uses target, and jumps a frame later.
|
// we have to do this here, because otherwise it uses target, and jumps a frame later.
|
||||||
if (IsFocusResetQueued())
|
if (IsFocusResetQueued())
|
||||||
ImGui::SetNextWindowScroll(ImVec2(0.0f, 0.0f));
|
if (FocusResetType focus_reset = GetQueuedFocusResetType(); focus_reset != FocusResetType::None &&
|
||||||
|
focus_reset != FocusResetType::PopupOpened &&
|
||||||
|
focus_reset != FocusResetType::PopupClosed)
|
||||||
|
{
|
||||||
|
ImGui::SetNextWindowScroll(ImVec2(0.0f, 0.0f));
|
||||||
|
}
|
||||||
|
|
||||||
if (BeginFullscreenWindow(
|
if (BeginFullscreenWindow(
|
||||||
ImVec2(0.0f, heading_size.y),
|
ImVec2(0.0f, heading_size.y),
|
||||||
|
@ -3046,7 +3051,7 @@ void FullscreenUI::DrawSummarySettingsPage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupClosed);
|
||||||
CloseFileSelector();
|
CloseFileSelector();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5517,7 +5522,7 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
|
||||||
{
|
{
|
||||||
s_save_state_selector_submenu_index = -1;
|
s_save_state_selector_submenu_index = -1;
|
||||||
if (!closed)
|
if (!closed)
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::PopStyleColor(4);
|
ImGui::PopStyleColor(4);
|
||||||
|
@ -5900,7 +5905,7 @@ void FullscreenUI::DrawGameListWindow()
|
||||||
else if (ImGui::IsKeyPressed(ImGuiKey_GamepadStart, false) || ImGui::IsKeyPressed(ImGuiKey_F2))
|
else if (ImGui::IsKeyPressed(ImGuiKey_GamepadStart, false) || ImGui::IsKeyPressed(ImGuiKey_F2))
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::GameListSettings;
|
s_current_main_window = MainWindowType::GameListSettings;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (s_game_list_view)
|
switch (s_game_list_view)
|
||||||
|
@ -6318,7 +6323,7 @@ void FullscreenUI::DrawGameListSettingsWindow()
|
||||||
if (NavButton(ICON_PF_BACKWARD, true, true))
|
if (NavButton(ICON_PF_BACKWARD, true, true))
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::GameList;
|
s_current_main_window = MainWindowType::GameList;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
NavTitle(FSUI_CSTR("Game List Settings"));
|
NavTitle(FSUI_CSTR("Game List Settings"));
|
||||||
|
@ -6339,7 +6344,7 @@ void FullscreenUI::DrawGameListSettingsWindow()
|
||||||
if (ImGui::IsWindowFocused() && WantsToCloseMenu())
|
if (ImGui::IsWindowFocused() && WantsToCloseMenu())
|
||||||
{
|
{
|
||||||
s_current_main_window = MainWindowType::GameList;
|
s_current_main_window = MainWindowType::GameList;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto lock = Host::GetSettingsLock();
|
auto lock = Host::GetSettingsLock();
|
||||||
|
@ -6495,7 +6500,7 @@ void FullscreenUI::SwitchToGameList()
|
||||||
auto lock = Host::GetSettingsLock();
|
auto lock = Host::GetSettingsLock();
|
||||||
PopulateGameListDirectoryCache(Host::Internal::GetBaseSettingsLayer());
|
PopulateGameListDirectoryCache(Host::Internal::GetBaseSettingsLayer());
|
||||||
}
|
}
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
GSTexture* FullscreenUI::GetGameListCover(const GameList::Entry* entry)
|
GSTexture* FullscreenUI::GetGameListCover(const GameList::Entry* entry)
|
||||||
|
@ -6665,7 +6670,7 @@ void FullscreenUI::SwitchToAchievementsWindow()
|
||||||
}
|
}
|
||||||
|
|
||||||
s_current_main_window = MainWindowType::Achievements;
|
s_current_main_window = MainWindowType::Achievements;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FullscreenUI::OpenLeaderboardsWindow()
|
bool FullscreenUI::OpenLeaderboardsWindow()
|
||||||
|
@ -6709,7 +6714,7 @@ void FullscreenUI::SwitchToLeaderboardsWindow()
|
||||||
}
|
}
|
||||||
|
|
||||||
s_current_main_window = MainWindowType::Leaderboards;
|
s_current_main_window = MainWindowType::Leaderboards;
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::WindowChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullscreenUI::DrawAchievementsSettingsPage(std::unique_lock<std::mutex>& settings_lock)
|
void FullscreenUI::DrawAchievementsSettingsPage(std::unique_lock<std::mutex>& settings_lock)
|
||||||
|
|
|
@ -85,7 +85,7 @@ namespace ImGuiFullscreen
|
||||||
|
|
||||||
static u32 s_menu_button_index = 0;
|
static u32 s_menu_button_index = 0;
|
||||||
static u32 s_close_button_state = 0;
|
static u32 s_close_button_state = 0;
|
||||||
static bool s_focus_reset_queued = false;
|
static FocusResetType s_focus_reset_queued = FocusResetType::None;
|
||||||
static bool s_light_theme = false;
|
static bool s_light_theme = false;
|
||||||
|
|
||||||
static LRUCache<std::string, std::shared_ptr<GSTexture>> s_texture_cache(128, true);
|
static LRUCache<std::string, std::shared_ptr<GSTexture>> s_texture_cache(128, true);
|
||||||
|
@ -204,7 +204,7 @@ void ImGuiFullscreen::SetFonts(ImFont* standard_font, ImFont* medium_font, ImFon
|
||||||
|
|
||||||
bool ImGuiFullscreen::Initialize(const char* placeholder_image_path)
|
bool ImGuiFullscreen::Initialize(const char* placeholder_image_path)
|
||||||
{
|
{
|
||||||
s_focus_reset_queued = true;
|
s_focus_reset_queued = FocusResetType::WindowChanged;
|
||||||
s_close_button_state = 0;
|
s_close_button_state = 0;
|
||||||
|
|
||||||
s_placeholder_texture = LoadTexture(placeholder_image_path);
|
s_placeholder_texture = LoadTexture(placeholder_image_path);
|
||||||
|
@ -552,22 +552,22 @@ void ImGuiFullscreen::PopResetLayout()
|
||||||
ImGui::PopStyleVar(12);
|
ImGui::PopStyleVar(12);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::QueueResetFocus()
|
void ImGuiFullscreen::QueueResetFocus(FocusResetType type)
|
||||||
{
|
{
|
||||||
s_focus_reset_queued = true;
|
s_focus_reset_queued = type;
|
||||||
s_close_button_state = 0;
|
s_close_button_state = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGuiFullscreen::ResetFocusHere()
|
bool ImGuiFullscreen::ResetFocusHere()
|
||||||
{
|
{
|
||||||
if (!s_focus_reset_queued)
|
if (s_focus_reset_queued == FocusResetType::None)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// don't take focus from dialogs
|
// don't take focus from dialogs
|
||||||
if (ImGui::FindBlockingModal(ImGui::GetCurrentWindow()))
|
if (ImGui::FindBlockingModal(ImGui::GetCurrentWindow()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
s_focus_reset_queued = false;
|
s_focus_reset_queued = FocusResetType::None;
|
||||||
ImGui::SetWindowFocus();
|
ImGui::SetWindowFocus();
|
||||||
|
|
||||||
// only do the active selection magic when we're using keyboard/gamepad
|
// only do the active selection magic when we're using keyboard/gamepad
|
||||||
|
@ -575,6 +575,11 @@ bool ImGuiFullscreen::ResetFocusHere()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGuiFullscreen::IsFocusResetQueued()
|
bool ImGuiFullscreen::IsFocusResetQueued()
|
||||||
|
{
|
||||||
|
return (s_focus_reset_queued != FocusResetType::None);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGuiFullscreen::FocusResetType ImGuiFullscreen::GetQueuedFocusResetType()
|
||||||
{
|
{
|
||||||
return s_focus_reset_queued;
|
return s_focus_reset_queued;
|
||||||
}
|
}
|
||||||
|
@ -1924,7 +1929,7 @@ void ImGuiFullscreen::OpenFileSelector(std::string_view title, bool select_direc
|
||||||
s_file_selector_filters = std::move(filters);
|
s_file_selector_filters = std::move(filters);
|
||||||
|
|
||||||
SetFileSelectorDirectory(std::move(initial_directory));
|
SetFileSelectorDirectory(std::move(initial_directory));
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::CloseFileSelector()
|
void ImGuiFullscreen::CloseFileSelector()
|
||||||
|
@ -1940,7 +1945,7 @@ void ImGuiFullscreen::CloseFileSelector()
|
||||||
std::string().swap(s_file_selector_current_directory);
|
std::string().swap(s_file_selector_current_directory);
|
||||||
s_file_selector_items.clear();
|
s_file_selector_items.clear();
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::DrawFileSelector()
|
void ImGuiFullscreen::DrawFileSelector()
|
||||||
|
@ -2014,7 +2019,7 @@ void ImGuiFullscreen::DrawFileSelector()
|
||||||
if (selected->is_file)
|
if (selected->is_file)
|
||||||
{
|
{
|
||||||
s_file_selector_callback(selected->full_path);
|
s_file_selector_callback(selected->full_path);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::Other);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2039,7 +2044,7 @@ void ImGuiFullscreen::DrawFileSelector()
|
||||||
" <Parent Directory>")
|
" <Parent Directory>")
|
||||||
{
|
{
|
||||||
SetFileSelectorDirectory(std::move(s_file_selector_items.front().full_path));
|
SetFileSelectorDirectory(std::move(s_file_selector_items.front().full_path));
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::Other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2060,7 +2065,7 @@ void ImGuiFullscreen::OpenChoiceDialog(std::string_view title, bool checkable, C
|
||||||
s_choice_dialog_title = fmt::format("{}##choice_dialog", title);
|
s_choice_dialog_title = fmt::format("{}##choice_dialog", title);
|
||||||
s_choice_dialog_options = std::move(options);
|
s_choice_dialog_options = std::move(options);
|
||||||
s_choice_dialog_callback = std::move(callback);
|
s_choice_dialog_callback = std::move(callback);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::CloseChoiceDialog()
|
void ImGuiFullscreen::CloseChoiceDialog()
|
||||||
|
@ -2073,7 +2078,7 @@ void ImGuiFullscreen::CloseChoiceDialog()
|
||||||
std::string().swap(s_choice_dialog_title);
|
std::string().swap(s_choice_dialog_title);
|
||||||
ChoiceDialogOptions().swap(s_choice_dialog_options);
|
ChoiceDialogOptions().swap(s_choice_dialog_options);
|
||||||
ChoiceDialogCallback().swap(s_choice_dialog_callback);
|
ChoiceDialogCallback().swap(s_choice_dialog_callback);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::DrawChoiceDialog()
|
void ImGuiFullscreen::DrawChoiceDialog()
|
||||||
|
@ -2190,7 +2195,7 @@ void ImGuiFullscreen::OpenInputStringDialog(
|
||||||
s_input_dialog_caption = std::move(caption);
|
s_input_dialog_caption = std::move(caption);
|
||||||
s_input_dialog_ok_text = std::move(ok_button_text);
|
s_input_dialog_ok_text = std::move(ok_button_text);
|
||||||
s_input_dialog_callback = std::move(callback);
|
s_input_dialog_callback = std::move(callback);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::DrawInputDialog()
|
void ImGuiFullscreen::DrawInputDialog()
|
||||||
|
@ -2299,7 +2304,7 @@ void ImGuiFullscreen::OpenConfirmMessageDialog(
|
||||||
s_message_dialog_callback = std::move(callback);
|
s_message_dialog_callback = std::move(callback);
|
||||||
s_message_dialog_buttons[0] = std::move(yes_button_text);
|
s_message_dialog_buttons[0] = std::move(yes_button_text);
|
||||||
s_message_dialog_buttons[1] = std::move(no_button_text);
|
s_message_dialog_buttons[1] = std::move(no_button_text);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::OpenInfoMessageDialog(
|
void ImGuiFullscreen::OpenInfoMessageDialog(
|
||||||
|
@ -2312,7 +2317,7 @@ void ImGuiFullscreen::OpenInfoMessageDialog(
|
||||||
s_message_dialog_message = std::move(message);
|
s_message_dialog_message = std::move(message);
|
||||||
s_message_dialog_callback = std::move(callback);
|
s_message_dialog_callback = std::move(callback);
|
||||||
s_message_dialog_buttons[0] = std::move(button_text);
|
s_message_dialog_buttons[0] = std::move(button_text);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::OpenMessageDialog(std::string title, std::string message, MessageDialogCallback callback,
|
void ImGuiFullscreen::OpenMessageDialog(std::string title, std::string message, MessageDialogCallback callback,
|
||||||
|
@ -2327,7 +2332,7 @@ void ImGuiFullscreen::OpenMessageDialog(std::string title, std::string message,
|
||||||
s_message_dialog_buttons[0] = std::move(first_button_text);
|
s_message_dialog_buttons[0] = std::move(first_button_text);
|
||||||
s_message_dialog_buttons[1] = std::move(second_button_text);
|
s_message_dialog_buttons[1] = std::move(second_button_text);
|
||||||
s_message_dialog_buttons[2] = std::move(third_button_text);
|
s_message_dialog_buttons[2] = std::move(third_button_text);
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupOpened);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::CloseMessageDialog()
|
void ImGuiFullscreen::CloseMessageDialog()
|
||||||
|
@ -2340,7 +2345,7 @@ void ImGuiFullscreen::CloseMessageDialog()
|
||||||
s_message_dialog_message = {};
|
s_message_dialog_message = {};
|
||||||
s_message_dialog_buttons = {};
|
s_message_dialog_buttons = {};
|
||||||
s_message_dialog_callback = {};
|
s_message_dialog_callback = {};
|
||||||
QueueResetFocus();
|
QueueResetFocus(FocusResetType::PopupClosed);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiFullscreen::DrawMessageDialog()
|
void ImGuiFullscreen::DrawMessageDialog()
|
||||||
|
|
|
@ -112,9 +112,18 @@ namespace ImGuiFullscreen
|
||||||
void PushResetLayout();
|
void PushResetLayout();
|
||||||
void PopResetLayout();
|
void PopResetLayout();
|
||||||
|
|
||||||
void QueueResetFocus();
|
enum class FocusResetType : u8
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
PopupOpened,
|
||||||
|
PopupClosed,
|
||||||
|
WindowChanged,
|
||||||
|
Other,
|
||||||
|
};
|
||||||
|
void QueueResetFocus(FocusResetType type);
|
||||||
bool ResetFocusHere();
|
bool ResetFocusHere();
|
||||||
bool IsFocusResetQueued();
|
bool IsFocusResetQueued();
|
||||||
|
FocusResetType GetQueuedFocusResetType();
|
||||||
void ForceKeyNavEnabled();
|
void ForceKeyNavEnabled();
|
||||||
|
|
||||||
bool WantsToCloseMenu();
|
bool WantsToCloseMenu();
|
||||||
|
|
Loading…
Reference in New Issue