From f08e0b7915a353bee1d900716ea41ebcbda9ebd8 Mon Sep 17 00:00:00 2001 From: Konstantin Nisht Date: Mon, 16 Feb 2026 14:46:32 +0100 Subject: [PATCH] [ui] IJPL-234915: Bind widget scope to its plugin GitOrigin-RevId: e183c49804d779911c847b9d0f23e92710443687 --- .../impl/status/widget/StatusBarWidgetsManager.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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.