diff --git a/UI/MemStickScreen.cpp b/UI/MemStickScreen.cpp index c0c6ac0111..aea65d4da2 100644 --- a/UI/MemStickScreen.cpp +++ b/UI/MemStickScreen.cpp @@ -623,12 +623,15 @@ void ConfirmMemstickMoveScreen::FinishFolderMove() { if (!initialSetup_) { // We restart the app here, to get the new settings. System_SendMessage("graphics_restart", ""); - } - - if (g_Config.Save("MemstickPathChanged")) { - TriggerFinish(DialogResult::DR_OK); } else { - error_ = iz->T("Failed to save config"); - RecreateViews(); + // This is initial setup, we now switch to the main screen, if we were successful + // (which we better have been...) + if (g_Config.Save("MemstickPathChanged")) { + // TriggerFinish(DialogResult::DR_OK); + screenManager()->switchScreen(new MainScreen()); + } else { + error_ = iz->T("Failed to save config"); + RecreateViews(); + } } } diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp index 8062291bbf..5fc7cfd662 100644 --- a/UI/MiscScreens.cpp +++ b/UI/MiscScreens.cpp @@ -52,6 +52,7 @@ #include "UI/GameSettingsScreen.h" #include "UI/MainScreen.h" #include "UI/MiscScreens.h" +#include "UI/MemStickScreen.h" #ifdef _MSC_VER #pragma execution_character_set("utf-8") @@ -668,25 +669,35 @@ void LogoScreen::Next() { if (!switched_) { switched_ = true; Path gamePath = boot_filename; - if (gotoGameSettings_) { + + switch (afterLogoScreen_) { + case AfterLogoScreen::TO_GAME_SETTINGS: if (!gamePath.empty()) { screenManager()->switchScreen(new EmuScreen(gamePath)); } else { screenManager()->switchScreen(new MainScreen()); } screenManager()->push(new GameSettingsScreen(gamePath)); - } else if (boot_filename.size()) { - screenManager()->switchScreen(new EmuScreen(gamePath)); - } else { - screenManager()->switchScreen(new MainScreen()); + break; + case AfterLogoScreen::MEMSTICK_SCREEN_INITIAL_SETUP: + screenManager()->switchScreen(new MemStickScreen(true)); + break; + case AfterLogoScreen::DEFAULT: + default: + if (boot_filename.size()) { + screenManager()->switchScreen(new EmuScreen(gamePath)); + } else { + screenManager()->switchScreen(new MainScreen()); + } + break; } } } const float logoScreenSeconds = 2.5f; -LogoScreen::LogoScreen(bool gotoGameSettings) - : gotoGameSettings_(gotoGameSettings) { +LogoScreen::LogoScreen(AfterLogoScreen afterLogoScreen) + : afterLogoScreen_(afterLogoScreen) { } void LogoScreen::update() { @@ -1091,4 +1102,4 @@ void SettingInfoMessage::Draw(UIContext &dc) { std::string SettingInfoMessage::GetText() const { return showing_ && text_ ? text_->GetText() : ""; -} \ No newline at end of file +} diff --git a/UI/MiscScreens.h b/UI/MiscScreens.h index 05a4708578..2e5108df96 100644 --- a/UI/MiscScreens.h +++ b/UI/MiscScreens.h @@ -125,9 +125,16 @@ private: std::vector shaders_; }; +enum class AfterLogoScreen { + TO_GAME_SETTINGS, + DEFAULT, + MEMSTICK_SCREEN_INITIAL_SETUP, +}; + class LogoScreen : public UIScreen { public: - LogoScreen(bool gotoGameSettings = false); + LogoScreen(AfterLogoScreen afterLogoScreen = AfterLogoScreen::DEFAULT); + bool key(const KeyInput &key) override; bool touch(const TouchInput &touch) override; void update() override; @@ -140,7 +147,7 @@ private: int frames_ = 0; double sinceStart_ = 0.0; bool switched_ = false; - bool gotoGameSettings_ = false; + AfterLogoScreen afterLogoScreen_; }; class CreditsScreen : public UIDialogScreenWithBackground { diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index 3f498b2494..aad079bf88 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -807,17 +807,16 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch screenManager = new ScreenManager(); if (g_Config.memStickDirectory.empty()) { INFO_LOG(SYSTEM, "No memstick directory! Asking for one to be configured."); - screenManager->switchScreen(new LogoScreen(false)); - screenManager->push(new MemStickScreen(true)); + screenManager->switchScreen(new LogoScreen(AfterLogoScreen::MEMSTICK_SCREEN_INITIAL_SETUP)); } else if (gotoGameSettings) { - screenManager->switchScreen(new LogoScreen(true)); + screenManager->switchScreen(new LogoScreen(AfterLogoScreen::TO_GAME_SETTINGS)); } else if (gotoTouchScreenTest) { screenManager->switchScreen(new MainScreen()); screenManager->push(new TouchTestScreen()); } else if (skipLogo) { screenManager->switchScreen(new EmuScreen(boot_filename)); } else { - screenManager->switchScreen(new LogoScreen()); + screenManager->switchScreen(new LogoScreen(AfterLogoScreen::DEFAULT)); } // Easy testing