diff --git a/src/xenia/kernel/xam/xam_ui.cc b/src/xenia/kernel/xam/xam_ui.cc index 7f74f025a..510627d5c 100644 --- a/src/xenia/kernel/xam/xam_ui.cc +++ b/src/xenia/kernel/xam/xam_ui.cc @@ -34,6 +34,8 @@ DEFINE_bool(storage_selection_dialog, false, DECLARE_int32(license_mask); +constexpr std::chrono::milliseconds kUIDelayMillis(200); + namespace xe { namespace kernel { namespace xam { @@ -81,8 +83,11 @@ X_RESULT xeXamDispatchDialog(T* dialog, return result; }; auto post = []() { - xe::threading::Sleep(std::chrono::milliseconds(100)); - kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + std::jthread t([] { + xe::threading::Sleep(kUIDelayMillis); + kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + }); + t.detach(); }; if (!overlapped) { pre(); @@ -123,7 +128,7 @@ X_RESULT xeXamDispatchDialogEx( return result; }; auto post = []() { - xe::threading::Sleep(std::chrono::milliseconds(100)); + xe::threading::Sleep(kUIDelayMillis); kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); }; if (!overlapped) { @@ -143,10 +148,15 @@ X_RESULT xeXamDispatchHeadless(std::function run_callback, uint32_t overlapped) { auto pre = []() { kernel_state()->BroadcastNotification(kXNotificationSystemUI, true); + xe::threading::Sleep(std::chrono::milliseconds(25)); }; auto post = []() { - xe::threading::Sleep(std::chrono::milliseconds(100)); - kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + std::jthread t([]() { + xe::threading::Sleep(kUIDelayMillis); + kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); + }); + + t.detach(); }; if (!overlapped) { pre(); @@ -167,7 +177,7 @@ X_RESULT xeXamDispatchHeadlessEx( kernel_state()->BroadcastNotification(kXNotificationSystemUI, true); }; auto post = []() { - xe::threading::Sleep(std::chrono::milliseconds(100)); + xe::threading::Sleep(kUIDelayMillis); kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); }; if (!overlapped) { @@ -198,7 +208,7 @@ X_RESULT xeXamDispatchDialogAsync(T* dialog, kernel_state()->xam_state()->xam_dialogs_shown_--; auto run = []() -> void { - xe::threading::Sleep(std::chrono::milliseconds(100)); + xe::threading::Sleep(kUIDelayMillis); kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); }; @@ -220,7 +230,7 @@ X_RESULT xeXamDispatchHeadlessAsync(std::function run_callback) { kernel_state()->xam_state()->xam_dialogs_shown_--; auto run = []() -> void { - xe::threading::Sleep(std::chrono::milliseconds(100)); + xe::threading::Sleep(kUIDelayMillis); kernel_state()->BroadcastNotification(kXNotificationSystemUI, false); };