IJPL-189392 ApplicationActivationStateManager - use strict ui dispatcher to update state, and then relax ui dispatcher to fire event

GitOrigin-RevId: 04d20a826e6c8545d507f3f0e3d835492c3810e9
This commit is contained in:
Vladimir Krivosheev
2025-06-14 12:57:53 +00:00
committed by intellij-monorepo-bot
parent 1cc2e39830
commit 7c1a46a53e
@@ -57,7 +57,7 @@ object ApplicationActivationStateManager {
delayedDeactivatedJob?.cancel()
delayedDeactivatedJob = app.getCoroutineScope().launch(CoroutineName("ApplicationDeactivation")) {
delay(Registry.intValue("application.deactivation.timeout", 1_500).milliseconds)
withContext(Dispatchers.EDT + ModalityState.any().asContextElement()) {
withContext(Dispatchers.ui(UiDispatcherKind.STRICT) + ModalityState.any().asContextElement()) {
if (state != ApplicationActivationStateManagerState.DEACTIVATING) {
return@withContext
}
@@ -67,7 +67,10 @@ object ApplicationActivationStateManager {
val ideFrame = getIdeFrameFromWindow(window)
if (ideFrame != null) {
// getIdeFrameFromWindow returns something from a UI tree, so, if not null, it must be Window
app.getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).delayedApplicationDeactivated(ideFrame as Window)
val publisher = app.getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC)
withContext(Dispatchers.ui(UiDispatcherKind.RELAX)) {
publisher.delayedApplicationDeactivated(ideFrame as Window)
}
}
}
}