refactor [vcs]: refresh project changes every time they are displayed

The TW listener does not track TW content selection, so we might miss the event
Also, TW listeners introduced a dependency on content manager, which is not needed

GitOrigin-RevId: 817f8668cb18ba098d3d751454218bb883bd72ac
This commit is contained in:
Ivan Semenov
2026-01-19 14:55:59 +00:00
committed by intellij-monorepo-bot
parent 3ec40f3be5
commit ef92b0d32b
4 changed files with 10 additions and 19 deletions
@@ -419,8 +419,6 @@
topic="com.intellij.openapi.vcs.changes.shelf.ShelveChangesManagerListener"/>
<listener class="com.intellij.openapi.vcs.actions.AnnotationsLineStatusTrackerListener"
topic="com.intellij.openapi.vcs.impl.LineStatusTrackerManager$Listener"/>
<listener class="com.intellij.vcs.commit.ChangesViewToolWindowRefresher"
topic="com.intellij.openapi.wm.ex.ToolWindowManagerListener"/>
</projectListeners>
</idea-plugin>
@@ -28,12 +28,14 @@ import com.intellij.ui.components.JBLabel
import com.intellij.ui.components.panels.Wrapper
import com.intellij.ui.content.Content
import com.intellij.util.ModalityUiUtil.invokeLaterIfNeeded
import com.intellij.util.cancelOnDispose
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.intellij.util.ui.JBDimension
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.JBUI.Panels
import com.intellij.util.ui.UIUtil
import com.intellij.util.ui.components.BorderLayoutPanel
import com.intellij.util.ui.launchOnShow
import com.intellij.vcs.changes.viewModel.ChangesViewProxy
import com.intellij.vcs.commit.*
import com.intellij.vcs.commit.CommitModeManager.Companion.subscribeOnCommitModeChange
@@ -212,6 +214,10 @@ class ChangesViewManager internal constructor(private val project: Project, priv
val mainPanel = Panels.simplePanel(mainPanelContent).addToBottom(progressLabel)
setContent(mainPanel)
mainPanel.launchOnShow("Changes refresh on changes show") {
ChangeListManagerRefreshHelper.requestRefresh(project)
}.cancelOnDispose(this)
busConnection.subscribeOnVcsToolWindowLayoutChanges(Runnable { this.updatePanelLayout() })
updatePanelLayout()
}
@@ -1,17 +0,0 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.vcs.commit
import com.intellij.openapi.project.Project
import com.intellij.openapi.vcs.changes.ChangeListManagerRefreshHelper
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager.Companion.LOCAL_CHANGES
import com.intellij.openapi.wm.ToolWindow
import com.intellij.openapi.wm.ex.ToolWindowManagerListener
private class ChangesViewToolWindowRefresher(private val project: Project) : ToolWindowManagerListener {
override fun toolWindowShown(toolWindow: ToolWindow) {
if (ChangesViewContentManager.getToolWindowIdFor(project, LOCAL_CHANGES) == toolWindow.id) {
ChangeListManagerRefreshHelper.requestRefresh(project)
}
}
}
@@ -173,6 +173,10 @@ internal class GitStagePanel(
})
commitWorkflowHandler.workflow.addListener(MyCommitWorkflowListener(), this)
launchOnShow("Changes refresh on changes show") {
ChangeListManagerRefreshHelper.requestRefresh(project)
}.cancelOnDispose(this)
if (isRefreshInProgress()) {
tree.setEmptyText(message("stage.loading.status"))
progressStripe.startLoadingImmediately()