From ef92b0d32b969acb26287a9e0da219ef3bc075f8 Mon Sep 17 00:00:00 2001 From: Ivan Semenov Date: Tue, 13 Jan 2026 16:03:44 +0100 Subject: [PATCH] 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 --- .../resources/META-INF/VcsExtensions.xml | 2 -- .../openapi/vcs/changes/ChangesViewManager.kt | 6 ++++++ .../commit/ChangesViewToolWindowRefresher.kt | 17 ----------------- .../src/git4idea/index/ui/GitStagePanel.kt | 4 ++++ 4 files changed, 10 insertions(+), 19 deletions(-) delete mode 100644 platform/vcs-impl/src/com/intellij/vcs/commit/ChangesViewToolWindowRefresher.kt diff --git a/platform/vcs-impl/resources/META-INF/VcsExtensions.xml b/platform/vcs-impl/resources/META-INF/VcsExtensions.xml index 2e6ae37844f7..7c457a391414 100644 --- a/platform/vcs-impl/resources/META-INF/VcsExtensions.xml +++ b/platform/vcs-impl/resources/META-INF/VcsExtensions.xml @@ -419,8 +419,6 @@ topic="com.intellij.openapi.vcs.changes.shelf.ShelveChangesManagerListener"/> - diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.kt index f4874bc3bcfc..eddd55309198 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.kt @@ -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() } diff --git a/platform/vcs-impl/src/com/intellij/vcs/commit/ChangesViewToolWindowRefresher.kt b/platform/vcs-impl/src/com/intellij/vcs/commit/ChangesViewToolWindowRefresher.kt deleted file mode 100644 index b8be21f3ad2d..000000000000 --- a/platform/vcs-impl/src/com/intellij/vcs/commit/ChangesViewToolWindowRefresher.kt +++ /dev/null @@ -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) - } - } -} \ No newline at end of file diff --git a/plugins/git4idea/src/git4idea/index/ui/GitStagePanel.kt b/plugins/git4idea/src/git4idea/index/ui/GitStagePanel.kt index d0ea409fa6d9..1e590a61e800 100644 --- a/plugins/git4idea/src/git4idea/index/ui/GitStagePanel.kt +++ b/plugins/git4idea/src/git4idea/index/ui/GitStagePanel.kt @@ -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()