[App] Misc App fixes
- Display xex filenames in title selection. - Fixed fullscreen controller hotkeys executing from a non-UI thread. - Fixed recent_titles_entry_amount not disabling if set to <= 0. - Use RunTitle instead of LaunchPath which does more error checking.
This commit is contained in:
parent
a620397b35
commit
7c5b9372e7
|
@ -59,8 +59,8 @@ DECLARE_bool(d3d12_clear_memory_page_state);
|
||||||
DEFINE_bool(fullscreen, false, "Whether to launch the emulator in fullscreen.",
|
DEFINE_bool(fullscreen, false, "Whether to launch the emulator in fullscreen.",
|
||||||
"Display");
|
"Display");
|
||||||
|
|
||||||
DEFINE_bool(controller_hotkeys, true,
|
DEFINE_bool(controller_hotkeys, true, "Hotkeys for Xbox and PS controllers.",
|
||||||
"Hotkeys for Xbox and PS controllers.", "General");
|
"General");
|
||||||
|
|
||||||
DEFINE_string(
|
DEFINE_string(
|
||||||
postprocess_antialiasing, "",
|
postprocess_antialiasing, "",
|
||||||
|
@ -1148,7 +1148,9 @@ const std::map<int, EmulatorWindow::ControllerHotKey> controller_hotkey_map = {
|
||||||
{X_INPUT_GAMEPAD_B | X_INPUT_GAMEPAD_GUIDE,
|
{X_INPUT_GAMEPAD_B | X_INPUT_GAMEPAD_GUIDE,
|
||||||
EmulatorWindow::ControllerHotKey(
|
EmulatorWindow::ControllerHotKey(
|
||||||
EmulatorWindow::ButtonFunctions::ToggleLogging,
|
EmulatorWindow::ButtonFunctions::ToggleLogging,
|
||||||
"B + Guide = Toggle between loglevel set in config and the 'Disabled' loglevel.", true, true)},
|
"B + Guide = Toggle between loglevel set in config and the 'Disabled' "
|
||||||
|
"loglevel.",
|
||||||
|
true, true)},
|
||||||
{X_INPUT_GAMEPAD_Y | X_INPUT_GAMEPAD_GUIDE,
|
{X_INPUT_GAMEPAD_Y | X_INPUT_GAMEPAD_GUIDE,
|
||||||
EmulatorWindow::ControllerHotKey(
|
EmulatorWindow::ControllerHotKey(
|
||||||
EmulatorWindow::ButtonFunctions::ToggleFullscreen,
|
EmulatorWindow::ButtonFunctions::ToggleFullscreen,
|
||||||
|
@ -1191,7 +1193,9 @@ const std::map<int, EmulatorWindow::ControllerHotKey> controller_hotkey_map = {
|
||||||
{X_INPUT_GAMEPAD_BACK | X_INPUT_GAMEPAD_START,
|
{X_INPUT_GAMEPAD_BACK | X_INPUT_GAMEPAD_START,
|
||||||
EmulatorWindow::ControllerHotKey(
|
EmulatorWindow::ControllerHotKey(
|
||||||
EmulatorWindow::ButtonFunctions::ToggleLogging,
|
EmulatorWindow::ButtonFunctions::ToggleLogging,
|
||||||
"Back + Start = Toggle between loglevel set in config and the 'Disabled' loglevel.", false, false)},
|
"Back + Start = Toggle between loglevel set in config and the "
|
||||||
|
"'Disabled' loglevel.",
|
||||||
|
false, false)},
|
||||||
{X_INPUT_GAMEPAD_DPAD_DOWN,
|
{X_INPUT_GAMEPAD_DPAD_DOWN,
|
||||||
EmulatorWindow::ControllerHotKey(
|
EmulatorWindow::ControllerHotKey(
|
||||||
EmulatorWindow::ButtonFunctions::IncTitleSelect,
|
EmulatorWindow::ButtonFunctions::IncTitleSelect,
|
||||||
|
@ -1239,7 +1243,7 @@ EmulatorWindow::ControllerHotKey EmulatorWindow::ProcessControllerHotkey(
|
||||||
|
|
||||||
switch (button_combination.function) {
|
switch (button_combination.function) {
|
||||||
case ButtonFunctions::ToggleFullscreen:
|
case ButtonFunctions::ToggleFullscreen:
|
||||||
ToggleFullscreen();
|
app_context().CallInUIThread([this]() { ToggleFullscreen(); });
|
||||||
|
|
||||||
// Extra Sleep
|
// Extra Sleep
|
||||||
xe::threading::Sleep(delay);
|
xe::threading::Sleep(delay);
|
||||||
|
@ -1250,7 +1254,6 @@ EmulatorWindow::ControllerHotKey EmulatorWindow::ProcessControllerHotkey(
|
||||||
app_context().CallInUIThread([this]() {
|
app_context().CallInUIThread([this]() {
|
||||||
RunTitle(recently_launched_titles_[selected_title_index].path_to_file);
|
RunTitle(recently_launched_titles_[selected_title_index].path_to_file);
|
||||||
});
|
});
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case ButtonFunctions::ClearMemoryPageState:
|
case ButtonFunctions::ClearMemoryPageState:
|
||||||
ToggleGPUSetting(gpu_cvar::ClearMemoryPageState);
|
ToggleGPUSetting(gpu_cvar::ClearMemoryPageState);
|
||||||
|
@ -1305,7 +1308,7 @@ EmulatorWindow::ControllerHotKey EmulatorWindow::ProcessControllerHotkey(
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((button_combination.function == ButtonFunctions::IncTitleSelect ||
|
if ((button_combination.function == ButtonFunctions::IncTitleSelect ||
|
||||||
button_combination.function == ButtonFunctions::DecTitleSelect) &&
|
button_combination.function == ButtonFunctions::DecTitleSelect) &&
|
||||||
recently_launched_titles_.size() > 0) {
|
recently_launched_titles_.size() > 0) {
|
||||||
selected_title_index = std::clamp(
|
selected_title_index = std::clamp(
|
||||||
selected_title_index, 0, (int)recently_launched_titles_.size() - 1);
|
selected_title_index, 0, (int)recently_launched_titles_.size() - 1);
|
||||||
|
@ -1315,10 +1318,20 @@ EmulatorWindow::ControllerHotKey EmulatorWindow::ProcessControllerHotkey(
|
||||||
|
|
||||||
// Titles may contain Unicode characters such as At World’s End
|
// Titles may contain Unicode characters such as At World’s End
|
||||||
// Must use ImGUI font that can render these Unicode characters
|
// Must use ImGUI font that can render these Unicode characters
|
||||||
std::string title =
|
std::string title_name;
|
||||||
std::to_string(selected_title_index + 1) + ": " +
|
|
||||||
recently_launched_titles_[selected_title_index].title_name + "\n\n" +
|
// Use filename if title name is empty
|
||||||
controller_hotkey_map.find(X_INPUT_GAMEPAD_START)->second.pretty;
|
if (recently_launched_titles_[selected_title_index].title_name.empty()) {
|
||||||
|
title_name = recently_launched_titles_[selected_title_index]
|
||||||
|
.path_to_file.filename()
|
||||||
|
.string();
|
||||||
|
} else {
|
||||||
|
title_name = recently_launched_titles_[selected_title_index].title_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string title = fmt::format(
|
||||||
|
"{}: {}\n\n{}", selected_title_index + 1, title_name,
|
||||||
|
controller_hotkey_map.find(X_INPUT_GAMEPAD_START)->second.pretty);
|
||||||
|
|
||||||
xe::ui::ImGuiDialog::ShowMessageBox(imgui_drawer_.get(), "Title Selection",
|
xe::ui::ImGuiDialog::ShowMessageBox(imgui_drawer_.get(), "Title Selection",
|
||||||
title);
|
title);
|
||||||
|
@ -1583,6 +1596,10 @@ void EmulatorWindow::LoadRecentlyLaunchedTitles() {
|
||||||
|
|
||||||
void EmulatorWindow::AddRecentlyLaunchedTitle(
|
void EmulatorWindow::AddRecentlyLaunchedTitle(
|
||||||
std::filesystem::path path_to_file, std::string title_name) {
|
std::filesystem::path path_to_file, std::string title_name) {
|
||||||
|
if (cvars::recent_titles_entry_amount <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if game is already on list and pop it to front
|
// Check if game is already on list and pop it to front
|
||||||
auto entry_index = std::find_if(recently_launched_titles_.cbegin(),
|
auto entry_index = std::find_if(recently_launched_titles_.cbegin(),
|
||||||
recently_launched_titles_.cend(),
|
recently_launched_titles_.cend(),
|
||||||
|
|
|
@ -69,6 +69,7 @@ class EmulatorWindow {
|
||||||
|
|
||||||
void OnEmulatorInitialized();
|
void OnEmulatorInitialized();
|
||||||
|
|
||||||
|
xe::X_STATUS RunTitle(std::filesystem::path path_to_file);
|
||||||
void UpdateTitle();
|
void UpdateTitle();
|
||||||
void SetFullscreen(bool fullscreen);
|
void SetFullscreen(bool fullscreen);
|
||||||
void ToggleFullscreen();
|
void ToggleFullscreen();
|
||||||
|
@ -210,7 +211,6 @@ class EmulatorWindow {
|
||||||
std::string BoolToString(bool value);
|
std::string BoolToString(bool value);
|
||||||
void DisplayHotKeysConfig();
|
void DisplayHotKeysConfig();
|
||||||
|
|
||||||
xe::X_STATUS RunTitle(std::filesystem::path path_to_file);
|
|
||||||
void RunPreviouslyPlayedTitle();
|
void RunPreviouslyPlayedTitle();
|
||||||
void FillRecentlyLaunchedTitlesMenu(xe::ui::MenuItem* recent_menu);
|
void FillRecentlyLaunchedTitlesMenu(xe::ui::MenuItem* recent_menu);
|
||||||
void LoadRecentlyLaunchedTitles();
|
void LoadRecentlyLaunchedTitles();
|
||||||
|
|
|
@ -615,7 +615,8 @@ void EmulatorApp::EmulatorThread() {
|
||||||
// Normalize the path and make absolute.
|
// Normalize the path and make absolute.
|
||||||
auto abs_path = std::filesystem::absolute(path);
|
auto abs_path = std::filesystem::absolute(path);
|
||||||
|
|
||||||
result = app_context().CallInUIThread([this, abs_path]() { return emulator_->LaunchPath(abs_path); });
|
result = app_context().CallInUIThread(
|
||||||
|
[this, abs_path]() { return emulator_window_->RunTitle(abs_path); });
|
||||||
if (XFAILED(result)) {
|
if (XFAILED(result)) {
|
||||||
xe::FatalError(fmt::format("Failed to launch target: {:08X}", result));
|
xe::FatalError(fmt::format("Failed to launch target: {:08X}", result));
|
||||||
app_context().RequestDeferredQuit();
|
app_context().RequestDeferredQuit();
|
||||||
|
|
Loading…
Reference in New Issue