diff --git a/src/xenia/kernel/xam/xam_input.cc b/src/xenia/kernel/xam/xam_input.cc index 2b203e29d..e1baf621d 100644 --- a/src/xenia/kernel/xam/xam_input.cc +++ b/src/xenia/kernel/xam/xam_input.cc @@ -181,6 +181,10 @@ dword_result_t XamInputGetKeystrokeEx_entry( keystroke.Zero(); + if (kernel_state()->xam_state()->xam_dialogs_shown_ > 0) { + return X_ERROR_SUCCESS; + } + uint32_t user_index = *user_index_ptr; auto input_system = kernel_state()->emulator()->input_system(); auto lock = input_system->lock(); diff --git a/src/xenia/kernel/xam/xam_ui.cc b/src/xenia/kernel/xam/xam_ui.cc index 3f64c1ad8..bbdbb3046 100644 --- a/src/xenia/kernel/xam/xam_ui.cc +++ b/src/xenia/kernel/xam/xam_ui.cc @@ -140,8 +140,13 @@ X_RESULT xeXamDispatchDialogEx( X_RESULT xeXamDispatchHeadless(std::function run_callback, uint32_t overlapped) { - auto pre = []() {}; - auto post = []() { xe::threading::Sleep(std::chrono::milliseconds(100)); }; + auto pre = []() { + kernel_state()->BroadcastNotification(kXNotificationSystemUI, true); + }; + auto post = []() { + xe::threading::Sleep(std::chrono::milliseconds(100)); + kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + }; if (!overlapped) { pre(); auto result = run_callback(); @@ -157,8 +162,13 @@ X_RESULT xeXamDispatchHeadless(std::function run_callback, X_RESULT xeXamDispatchHeadlessEx( std::function run_callback, uint32_t overlapped) { - auto pre = []() {}; - auto post = []() { xe::threading::Sleep(std::chrono::milliseconds(100)); }; + auto pre = []() { + kernel_state()->BroadcastNotification(kXNotificationSystemUI, true); + }; + auto post = []() { + xe::threading::Sleep(std::chrono::milliseconds(100)); + kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + }; if (!overlapped) { pre(); uint32_t extended_error, length;