diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt index e2526f178b91..22ea24678bb8 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/configuration/PySdkStatusBar.kt @@ -15,6 +15,7 @@ import com.intellij.openapi.roots.ModuleRootListener import com.intellij.openapi.ui.popup.ListPopup import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.wm.StatusBar import com.intellij.openapi.wm.StatusBarWidget import com.intellij.openapi.wm.StatusBarWidgetFactory import com.intellij.openapi.wm.impl.status.EditorBasedStatusBarPopup @@ -28,6 +29,7 @@ import com.jetbrains.python.sdk.PySdkPopupFactory.Companion.shortenNameInPopup import com.jetbrains.python.sdk.legacy.PythonSdkUtil import com.jetbrains.python.sdk.noInterpreterMarker import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch private const val ID: String = "pythonInterpreterWidget" @@ -69,6 +71,15 @@ private class PySdkStatusBar(project: Project, scope: CoroutineScope) : EditorBa scope = scope) { private var module: Module? = null + override fun install(statusBar: StatusBar) { + super.install(statusBar) + // statusBar.currentEditor resolves asynchronously via serviceAsync chain (with null as initial value); + // subscribe to it so the widget re-evaluates once the editor becomes available + scope.launch { + statusBar.currentEditor.collect { update() } + } + } + override fun getWidgetState(file: VirtualFile?): WidgetState { module = findModule(file) ?: return WidgetState.HIDDEN