diff --git a/installer/eboot.bin b/installer/eboot.bin index de4fca0..e762c46 100644 Binary files a/installer/eboot.bin and b/installer/eboot.bin differ diff --git a/installer/installer.c b/installer/installer.c index ce40bb1..bf3e9bd 100644 --- a/installer/installer.c +++ b/installer/installer.c @@ -162,6 +162,7 @@ static void step_tweaks(void){ int main(void){ char tok[160]; int first_run; + if(ui_init() != 0) return 1; /* no dialogs possible; exit, don't crash */ tok[0] = 0; icfg_token_load(ICFG_PATH, tok, sizeof tok); first_run = !token_valid(tok); diff --git a/installer/pkg.gp4 b/installer/pkg.gp4 index 25518d5..ca86070 100644 --- a/installer/pkg.gp4 +++ b/installer/pkg.gp4 @@ -3,7 +3,7 @@ pkg_ps4_app PS4VOLUME - 2026-09-24 16:49:26 + 2026-09-24 16:59:07 diff --git a/installer/ui.c b/installer/ui.c index 9e79350..e6cc6aa 100644 --- a/installer/ui.c +++ b/installer/ui.c @@ -21,6 +21,17 @@ static void base_init(OrbisMsgDialogParam *param){ param->mode = ORBIS_MSG_DIALOG_MODE_USER_MSG; } +static int ui_ready = 0; + +int ui_init(void){ + if(ui_ready) return 0; + if(sceSysmoduleLoadModule(ORBIS_SYSMODULE_MESSAGE_DIALOG) < 0) return -1; + if(sceSysmoduleLoadModule(ORBIS_SYSMODULE_IME_DIALOG) < 0) return -1; + if(sceCommonDialogInitialize() < 0) return -1; + ui_ready = 1; + return 0; +} + int ui_ok(const char *msg){ OrbisMsgDialogParam param; OrbisMsgDialogUserMessageParam um; diff --git a/installer/ui.h b/installer/ui.h index e77e873..1efc50e 100644 --- a/installer/ui.h +++ b/installer/ui.h @@ -3,6 +3,11 @@ #define INSTALLER_UI_H #include +/* Must run once before any dialog: loads MsgDialog/ImeDialog sysmodules + * and inits CommonDialog. Calling dialogs without this panics the box + * (unloaded-sysmodule call at startup). 0 ok, -1 fatal. */ +int ui_init(void); + /* Info dialog with OK. 0 shown, -1 failed to open. */ int ui_ok(const char *msg); /* Yes/No dialog, focus on No (safe default). 1 yes, 0 no/closed, -1 error. */