diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/DetailedProgressViewer.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/DetailedProgressViewer.java index 0fafa080ad0..da91c77721a 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/DetailedProgressViewer.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/DetailedProgressViewer.java @@ -165,16 +165,23 @@ private void updateMaxDisplayedValue(IPreferenceStore prefs) { @Override public void add(JobTreeElement... elements) { - ViewerComparator sorter = getComparator(); - - // Use a Set in case we are getting something added that exists - Set newItems = new LinkedHashSet<>(jobItemControls.keySet()); + Set items = getItems(); for (JobTreeElement element : elements) { if (element != null) { - newItems.add(element); + items.add(element); } } + updateItems(items); + } + + private Set getItems() { + // Use a Set in case we are getting something added that exists + Set newItems = new LinkedHashSet<>(jobItemControls.keySet()); + return newItems; + } + private void updateItems(Set newItems) { + ViewerComparator sorter = getComparator(); JobTreeElement[] infos = newItems.toArray(new JobTreeElement[0]); if (sorter != null) { sorter.sort(this, infos); @@ -369,6 +376,7 @@ protected void internalRefresh(Object element) { @Override public void remove(JobTreeElement... elements) { + Set items = getItems(); for (Object element : elements) { JobTreeElement treeElement = (JobTreeElement) element; // Make sure we are not keeping this one @@ -387,19 +395,13 @@ public void remove(JobTreeElement... elements) { remove(parent); } if (item != null) { - jobItemControls.remove(element); + items.remove(element); unmapElement(element); - item.dispose(); } } } - - Control[] existingChildren = control.getChildren(); - for (int i = 0; i < existingChildren.length; i++) { - ProgressInfoItem item = (ProgressInfoItem) existingChildren[i]; - item.setColor(i); - } - updateForShowingProgress(); + // also sort again, otherwise removed job may appear at top again: + updateItems(items); } @Override diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java index faea8fbf4cc..3e02270dd72 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java @@ -60,6 +60,19 @@ protected JobInfo(Job enclosingJob) { this.taskInfo = Optional.empty(); } + @Override + public int hashCode() { + return job.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof JobInfo) { + return job.equals(((JobInfo) obj).job); + } + return false; + } + /** * Adds the subtask to the receiver. * diff --git a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF index 6520dc75511..dfc48220337 100644 --- a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true -Bundle-Version: 3.126.0.qualifier +Bundle-Version: 3.126.100.qualifier Bundle-ClassPath: . Bundle-Activator: org.eclipse.ui.internal.WorkbenchPlugin Bundle-ActivationPolicy: lazy