mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[grazie] IJPL-213792 GrazieStatusBarWidget disposed before child disposable
Merge-request: IJ-MR-179148 Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com> GitOrigin-RevId: defcc678392798333234974e31fac77aa6e5bd68
This commit is contained in:
committed by
intellij-monorepo-bot
parent
012a4fa02a
commit
ef0c6a2b8b
@@ -905,6 +905,9 @@ com.intellij.openapi.wm.impl.content.tabActions.ContentTabActionProvider
|
||||
- sf:Companion:com.intellij.openapi.wm.impl.content.tabActions.ContentTabActionProvider$Companion
|
||||
- sf:EP_NAME:com.intellij.openapi.extensions.ExtensionPointName
|
||||
- a:createTabActions(com.intellij.ui.content.Content):java.util.List
|
||||
f:com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
|
||||
- f:updateWidget(com.intellij.openapi.wm.StatusBarWidgetFactory,kotlin.coroutines.CoroutineContext):V
|
||||
- bs:updateWidget$default(com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager,com.intellij.openapi.wm.StatusBarWidgetFactory,kotlin.coroutines.CoroutineContext,I,java.lang.Object):V
|
||||
f:com.intellij.openapi.wm.impl.welcomeScreen.cloneableProjects.CloneableProjectsService
|
||||
- f:runCloneTask(java.nio.file.Path,com.intellij.openapi.wm.impl.welcomeScreen.cloneableProjects.CloneableProjectsService$CloneTask):V
|
||||
f:com.intellij.openapi.wm.impl.welcomeScreen.cloneableProjects.CloneableProjectsService$CloneableProject
|
||||
|
||||
+4
-2
@@ -29,6 +29,7 @@ import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.swing.JComponent
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
private val LOG = logger<StatusBarWidgetsManager>()
|
||||
|
||||
@@ -74,7 +75,8 @@ class StatusBarWidgetsManager(
|
||||
}
|
||||
}
|
||||
|
||||
fun updateWidget(factory: StatusBarWidgetFactory) {
|
||||
@JvmOverloads
|
||||
fun updateWidget(factory: StatusBarWidgetFactory, coroutineContext: CoroutineContext = Dispatchers.EDT) {
|
||||
if ((factory.isConfigurable && !StatusBarWidgetSettings.getInstance().isEnabled(factory)) || !factory.isAvailable(project)) {
|
||||
disableWidget(factory)
|
||||
return
|
||||
@@ -95,7 +97,7 @@ class StatusBarWidgetsManager(
|
||||
val widget = createWidget(factory, dataContext, parentScope)
|
||||
widgetFactories.put(factory, widget)
|
||||
widgetIdMap.put(widget.ID(), factory)
|
||||
parentScope.launch(Dispatchers.EDT) {
|
||||
parentScope.launch(coroutineContext) {
|
||||
when (val statusBar = WindowManager.getInstance().getStatusBar(project)) {
|
||||
is IdeStatusBarImpl -> statusBar.addWidget(widget, order)
|
||||
null -> {
|
||||
|
||||
+13
-6
@@ -6,6 +6,9 @@ import com.intellij.grazie.GrazieConfig.State.Processing.Cloud
|
||||
import com.intellij.grazie.cloud.GrazieCloudConnector
|
||||
import com.intellij.grazie.ide.msg.GrazieInitializerManager
|
||||
import com.intellij.grazie.ide.msg.GrazieStateLifecycle
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.application.asContextElement
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
@@ -16,10 +19,13 @@ import com.intellij.openapi.wm.StatusBarWidget
|
||||
import com.intellij.openapi.wm.StatusBarWidgetFactory
|
||||
import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
|
||||
import com.intellij.util.application
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
||||
internal class GrazieStatusBarWidgetFactory : StatusBarWidgetFactory, GrazieStateLifecycle {
|
||||
|
||||
init { service<GrazieInitializerManager>().register(this) }
|
||||
init {
|
||||
service<GrazieInitializerManager>().register(this)
|
||||
}
|
||||
|
||||
override fun getId(): String {
|
||||
return widgetId
|
||||
@@ -48,13 +54,14 @@ internal class GrazieStatusBarWidgetFactory : StatusBarWidgetFactory, GrazieStat
|
||||
}
|
||||
|
||||
override fun update(prevState: GrazieConfig.State, newState: GrazieConfig.State) {
|
||||
application.invokeLater {
|
||||
if (newState.explicitlyChosenProcessing != prevState.explicitlyChosenProcessing && prevState.explicitlyChosenProcessing != null) {
|
||||
if (newState.explicitlyChosenProcessing == prevState.explicitlyChosenProcessing) return
|
||||
application.invokeLater(
|
||||
{
|
||||
ProjectManager.getInstance().openProjects.forEach { project ->
|
||||
project.service<StatusBarWidgetsManager>().updateWidget(this)
|
||||
project.service<StatusBarWidgetsManager>()
|
||||
.updateWidget(this, Dispatchers.EDT + ModalityState.any().asContextElement())
|
||||
}
|
||||
}
|
||||
}
|
||||
}, ModalityState.any())
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user