From d18b5d7048b7d24d03fd74b3f2bcb6afd25407cb Mon Sep 17 00:00:00 2001 From: Christian Schima Date: Thu, 8 Oct 2026 21:51:33 +0200 Subject: [PATCH] Update project explorer tree view when projects are added/removed. --- .../WorkingSetsContentProvider.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java index d904211911e..199fa546619 100644 --- a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java +++ b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/workingsets/WorkingSetsContentProvider.java @@ -22,6 +22,9 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceChangeListener; +import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Adapters; import org.eclipse.core.runtime.IAdaptable; @@ -86,6 +89,24 @@ public class WorkingSetsContentProvider implements ICommonContentProvider { } }; + private final IResourceChangeListener resourceChangeListener = event -> { + IResourceDelta delta = event.getDelta(); + if (delta == null || !hasProjectChanges(delta)) { + return; + } + + PlatformUI.getWorkbench().getDisplay().asyncExec(() -> { + if (helper != null && viewer != null && !viewer.getControl().isDisposed()) { + helper.refreshWorkingSetTreeState(); + viewer.refresh(); + } + }); + }; + + private boolean hasProjectChanges(IResourceDelta delta) { + return delta.getAffectedChildren(IResourceDelta.ADDED | IResourceDelta.REMOVED, IResource.PROJECT).length > 0; + } + @Override public void init(ICommonContentExtensionSite aConfig) { NavigatorContentService cs = (NavigatorContentService) aConfig.getService(); @@ -99,6 +120,8 @@ public void init(ICommonContentExtensionSite aConfig) { workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager(); workingSetManager.addPropertyChangeListener(workingSetManagerListener); + ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, + IResourceChangeEvent.POST_CHANGE); } @Override @@ -175,6 +198,7 @@ public void dispose() { helper = null; extensionStateModel.removePropertyChangeListener(rootModeListener); workingSetManager.removePropertyChangeListener(workingSetManagerListener); + ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener); } @Override