### 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) {