diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/widget/StatusBarWidgetsManager.kt b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/widget/StatusBarWidgetsManager.kt index ff4f197858ce..ff7197ed851b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/widget/StatusBarWidgetsManager.kt +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/widget/StatusBarWidgetsManager.kt @@ -6,6 +6,7 @@ package com.intellij.openapi.wm.impl.status.widget import com.intellij.diagnostic.PluginException import com.intellij.ide.lightEdit.LightEdit import com.intellij.ide.lightEdit.LightEditCompatible +import com.intellij.ide.plugins.cl.PluginAwareClassLoader import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.EDT @@ -31,7 +32,10 @@ import com.intellij.openapi.wm.WindowManager import com.intellij.openapi.wm.impl.status.ChildStatusBarWidget import com.intellij.openapi.wm.impl.status.IdeStatusBarImpl import com.intellij.openapi.wm.impl.status.createComponentByWidgetPresentation +import com.intellij.platform.util.coroutines.attachAsChildTo import com.intellij.platform.util.coroutines.childScope +import com.intellij.util.application +import com.intellij.util.asSafely import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel @@ -266,9 +270,18 @@ private fun createWidget( } val widgetScope = parentScope.childScope("${factory.id}-widget") + tryAttachWidgetScopeToPlugin(factory, widgetScope) + return WidgetPresentationWrapper(id = factory.id, factory = factory, dataContext = dataContext, scope = widgetScope) } +private fun tryAttachWidgetScopeToPlugin(factory: StatusBarWidgetFactory, widgetScope: CoroutineScope) { + val pluginScope = factory.javaClass.classLoader.asSafely()?.pluginCoroutineScope + if (pluginScope != null) { + widgetScope.attachAsChildTo(pluginScope) + } +} + /** * Wrapper for V2 status bar widgets (those using WidgetPresentationFactory). * Implements ChildStatusBarWidget to support child status bars in detached windows.