Skip to content

Commit e124428

Browse files
EcljpseB0Tjukzi
authored andcommitted
fix #307: Progress View sometimes shows short living jobs twice
There is a lot of code to handle equal JobTreeElement, but JobInfo did not implement equals(). Since the JobInfo is now reliable avoided to be added each time to the bottom, the sort order has to be maintained also on remove.
1 parent f6153f2 commit e124428

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/DetailedProgressViewer.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -165,16 +165,23 @@ private void updateMaxDisplayedValue(IPreferenceStore prefs) {
165165

166166
@Override
167167
public void add(JobTreeElement... elements) {
168-
ViewerComparator sorter = getComparator();
169-
170-
// Use a Set in case we are getting something added that exists
171-
Set<JobTreeElement> newItems = new LinkedHashSet<>(jobItemControls.keySet());
168+
Set<JobTreeElement> items = getItems();
172169
for (JobTreeElement element : elements) {
173170
if (element != null) {
174-
newItems.add(element);
171+
items.add(element);
175172
}
176173
}
174+
updateItems(items);
175+
}
176+
177+
private Set<JobTreeElement> getItems() {
178+
// Use a Set in case we are getting something added that exists
179+
Set<JobTreeElement> newItems = new LinkedHashSet<>(jobItemControls.keySet());
180+
return newItems;
181+
}
177182

183+
private void updateItems(Set<JobTreeElement> newItems) {
184+
ViewerComparator sorter = getComparator();
178185
JobTreeElement[] infos = newItems.toArray(new JobTreeElement[0]);
179186
if (sorter != null) {
180187
sorter.sort(this, infos);
@@ -369,6 +376,7 @@ protected void internalRefresh(Object element) {
369376
@Override
370377
public void remove(JobTreeElement... elements) {
371378

379+
Set<JobTreeElement> items = getItems();
372380
for (Object element : elements) {
373381
JobTreeElement treeElement = (JobTreeElement) element;
374382
// Make sure we are not keeping this one
@@ -387,19 +395,13 @@ public void remove(JobTreeElement... elements) {
387395
remove(parent);
388396
}
389397
if (item != null) {
390-
jobItemControls.remove(element);
398+
items.remove(element);
391399
unmapElement(element);
392-
item.dispose();
393400
}
394401
}
395402
}
396-
397-
Control[] existingChildren = control.getChildren();
398-
for (int i = 0; i < existingChildren.length; i++) {
399-
ProgressInfoItem item = (ProgressInfoItem) existingChildren[i];
400-
item.setColor(i);
401-
}
402-
updateForShowingProgress();
403+
// also sort again, otherwise removed job may appear at top again:
404+
updateItems(items);
403405
}
404406

405407
@Override

bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/JobInfo.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,19 @@ protected JobInfo(Job enclosingJob) {
6060
this.taskInfo = Optional.empty();
6161
}
6262

63+
@Override
64+
public int hashCode() {
65+
return job.hashCode();
66+
}
67+
68+
@Override
69+
public boolean equals(Object obj) {
70+
if (obj instanceof JobInfo) {
71+
return job.equals(((JobInfo) obj).job);
72+
}
73+
return false;
74+
}
75+
6376
/**
6477
* Adds the subtask to the receiver.
6578
*

0 commit comments

Comments
 (0)