### Eclipse Workspace Patch 1.0
#P org.eclipse.ui.workbench
Index: Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java,v
retrieving revision 1.134
diff -u -r1.134 ProgressManager.java
--- Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 11 Oct 2007 12:52:32 -0000 1.134
+++ Eclipse UI/org/eclipse/ui/internal/progress/ProgressManager.java 19 Mar 2008 13:21:23 -0000
@@ -488,7 +488,7 @@
* @param event
*/
private void updateFor(IJobChangeEvent event) {
- if (isNeverDisplayedJob(event.getJob())) {
+ if (isInfrastructureJob(event.getJob())) {
return;
}
if (jobs.containsKey(event.getJob())) {
@@ -513,12 +513,66 @@
* @see org.eclipse.core.runtime.jobs.JobChangeAdapter#sleeping(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
public void sleeping(IJobChangeEvent event) {
- updateFor(event);
+
+ if (jobs.containsKey(event.getJob()))// Are we showing this?
+ sleepJobInfo(getJobInfo(event.getJob()));
}
};
}
/**
+ * The job in JobInfo is now sleeping. Refresh it if we are showing it,
+ * remove it if not.
+ *
+ * @param info
+ */
+ protected void sleepJobInfo(JobInfo info) {
+ if (isInfrastructureJob(info.getJob()))
+ return;
+
+ GroupInfo group = info.getGroupInfo();
+ if (group != null) {
+ sleepGroup(group,info);
+ }
+
+ synchronized (listenersKey) {
+ for (int i = 0; i < listeners.length; i++) {
+ IJobProgressManagerListener listener = listeners[i];
+ // Is this one the user never sees?
+ if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
+ continue;
+ if (listener.showsDebug())
+ listener.refreshJobInfo(info);
+ else
+ listener.removeJob(info);
+
+ }
+ }
+
+ }
+
+ /**
+ * Refresh the group when info is sleeping.
+ * @param group
+ */
+ private void sleepGroup(GroupInfo group, JobInfo info) {
+ synchronized (listenersKey) {
+ for (int i = 0; i < listeners.length; i++) {
+
+ IJobProgressManagerListener listener = listeners[i];
+ if (isNeverDisplaying(info.getJob(), listener.showsDebug()))
+ continue;
+
+ if (listener.showsDebug() || group.isActive())
+ listener.refreshGroup(group);
+ else
+ listener.removeGroup(group);
+ }
+ }
+
+ }
+
+ /**
* Set up the image in the image regsitry.
*
* @param iconsRoot
@@ -660,7 +714,7 @@
synchronized (listenersKey) {
for (int i = 0; i < listeners.length; i++) {
IJobProgressManagerListener listener = listeners[i];
- if (!isNonDisplayableJob(info.getJob(), listener.showsDebug())) {
+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
listener.refreshJobInfo(info);
}
}
@@ -715,7 +769,7 @@
synchronized (listenersKey) {
for (int i = 0; i < listeners.length; i++) {
IJobProgressManagerListener listener = listeners[i];
- if (!isNonDisplayableJob(info.getJob(), listener.showsDebug())) {
+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
listener.removeJob(info);
}
}
@@ -753,7 +807,7 @@
synchronized (listenersKey) {
for (int i = 0; i < listeners.length; i++) {
IJobProgressManagerListener listener = listeners[i];
- if (!isNonDisplayableJob(info.getJob(), listener.showsDebug())) {
+ if (!isCurrentDisplaying(info.getJob(), listener.showsDebug())) {
listener.addJob(info);
}
}
@@ -768,23 +822,35 @@
* If the listener is in debug mode.
* @return boolean true
if the job is not displayed.
*/
- boolean isNonDisplayableJob(Job job, boolean debug) {
- if (isNeverDisplayedJob(job)) {
+ boolean isCurrentDisplaying(Job job, boolean debug) {
+ return isNeverDisplaying(job, debug) || job.getState() == Job.SLEEPING;
+ }
+
+ /**
+ * Return whether or not we even display this job with debug mode set to
+ * debug.
+ *
+ * @param job
+ * @param debug
+ * @return boolean
+ */
+ boolean isNeverDisplaying(Job job, boolean debug) {
+ if (isInfrastructureJob(job)) {
return true;
}
- if (debug) {
+ if (debug)
return false;
- }
- return job.isSystem() || job.getState() == Job.SLEEPING;
+
+ return job.isSystem();
}
/**
- * Return whether or not this job is ever displayable.
+ * Return whether or not this job is an infrastructure job.
*
* @param job
* @return boolean true
if it is never displayed.
*/
- private boolean isNeverDisplayedJob(Job job) {
+ private boolean isInfrastructureJob(Job job) {
if (Policy.DEBUG_SHOW_ALL_JOBS)
return false;
return job.getProperty(ProgressManagerUtil.INFRASTRUCTURE_PROPERTY) != null;
@@ -802,7 +868,7 @@
Collection result = new ArrayList();
while (iterator.hasNext()) {
Job next = (Job) iterator.next();
- if (!isNonDisplayableJob(next, debug)) {
+ if (!isCurrentDisplaying(next, debug)) {
result.add(jobs.get(next));
}
}
@@ -824,7 +890,7 @@
Collection result = new HashSet();
while (iterator.hasNext()) {
Job next = (Job) iterator.next();
- if (!isNonDisplayableJob(next, debug)) {
+ if (!isCurrentDisplaying(next, debug)) {
JobInfo jobInfo = (JobInfo) jobs.get(next);
GroupInfo group = jobInfo.getGroupInfo();
if (group == null) {