From 4dd0842087b4b435a4475dee348a7a20d3d37355 Mon Sep 17 00:00:00 2001 From: Gliniak <153369+Gliniak@users.noreply.github.com> Date: Fri, 30 Jan 2026 23:49:54 +0100 Subject: [PATCH] [Kernel] Fixed incorrect amount of propagated notifications on boot - Created dedicated method: IsUIActive --- src/xenia/kernel/kernel_state.cc | 7 ++----- src/xenia/kernel/xam/xam_input.cc | 4 ++-- src/xenia/kernel/xam/xam_state.h | 5 ++++- src/xenia/kernel/xam/xam_ui.cc | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/xenia/kernel/kernel_state.cc b/src/xenia/kernel/kernel_state.cc index a433d1316..e331dfa32 100644 --- a/src/xenia/kernel/kernel_state.cc +++ b/src/xenia/kernel/kernel_state.cc @@ -910,11 +910,8 @@ void KernelState::RegisterNotifyListener(XNotifyListener* listener) { // https://cs.rin.ru/forum/viewtopic.php?f=38&t=60668&hilit=resident+evil+5&start=375 if (!has_notified_startup_ && listener->mask() & kXNotifySystem) { has_notified_startup_ = true; - // XN_SYS_UI (on, off) - listener->EnqueueNotification(kXNotificationSystemUI, 1); - listener->EnqueueNotification(kXNotificationSystemUI, 0); - // XN_SYS_SIGNINCHANGED x2 - listener->EnqueueNotification(kXNotificationSystemSignInChanged, 1); + listener->EnqueueNotification(kXNotificationSystemUI, + xam_state()->IsUIActive()); listener->EnqueueNotification(kXNotificationSystemSignInChanged, 1); } if (!has_notified_live_startup_ && listener->mask() & kXNotifyLive) { diff --git a/src/xenia/kernel/xam/xam_input.cc b/src/xenia/kernel/xam/xam_input.cc index e1baf621d..2a54e58fd 100644 --- a/src/xenia/kernel/xam/xam_input.cc +++ b/src/xenia/kernel/xam/xam_input.cc @@ -107,7 +107,7 @@ dword_result_t XamInputGetState_entry(dword_t user_index, dword_t flags, return X_ERROR_DEVICE_NOT_CONNECTED; } - if (kernel_state()->xam_state()->xam_dialogs_shown_ > 0) { + if (kernel_state()->xam_state()->IsUIActive()) { return X_ERROR_SUCCESS; } @@ -181,7 +181,7 @@ dword_result_t XamInputGetKeystrokeEx_entry( keystroke.Zero(); - if (kernel_state()->xam_state()->xam_dialogs_shown_ > 0) { + if (kernel_state()->xam_state()->IsUIActive()) { return X_ERROR_SUCCESS; } diff --git a/src/xenia/kernel/xam/xam_state.h b/src/xenia/kernel/xam/xam_state.h index cad62898b..5a704f0ba 100644 --- a/src/xenia/kernel/xam/xam_state.h +++ b/src/xenia/kernel/xam/xam_state.h @@ -54,11 +54,14 @@ class XamState { bool IsUserSignedIn(uint32_t user_index) const; bool IsUserSignedIn(uint64_t xuid) const; - // void LoadSpaInfo(const SpaInfo* info); void SetContentRegisterCallback(uint32_t callback); + bool IsUIActive() const { + return xam_dialogs_shown_ > 0 || xam_nui_dialogs_shown_ > 0; + } + X_DASH_APP_INFO dash_app_info_ = {}; uint32_t dash_backstack_nodes_count_ = 0; X_DASH_BACKSTACK_DATA dash_backstack_data_[2] = {}; diff --git a/src/xenia/kernel/xam/xam_ui.cc b/src/xenia/kernel/xam/xam_ui.cc index 7ea49c97c..50d4cc698 100644 --- a/src/xenia/kernel/xam/xam_ui.cc +++ b/src/xenia/kernel/xam/xam_ui.cc @@ -390,7 +390,7 @@ static dword_result_t XamShowMessageBoxUi( } dword_result_t XamIsUIActive_entry() { - return kernel_state()->xam_state()->xam_dialogs_shown_ > 0; + return kernel_state()->xam_state()->IsUIActive(); } DECLARE_XAM_EXPORT2(XamIsUIActive, kUI, kImplemented, kHighFrequency);