diff options
author | Michael Valenta | 2005-04-08 20:10:40 +0000 |
---|---|---|
committer | Michael Valenta | 2005-04-08 20:10:40 +0000 |
commit | eb7e2c4bfc6be16d549882d1b8e10881344c07fe (patch) | |
tree | b6568d10a80d335992b8ba8a81e4fd67d2ddc6e1 /bundles/org.eclipse.team.ui | |
parent | e5504460784701312d1eb97983ab5f34eb8b2c91 (diff) | |
download | eclipse.platform.team-eb7e2c4bfc6be16d549882d1b8e10881344c07fe.tar.gz eclipse.platform.team-eb7e2c4bfc6be16d549882d1b8e10881344c07fe.tar.xz eclipse.platform.team-eb7e2c4bfc6be16d549882d1b8e10881344c07fe.zip |
Bug 79317 interface blocked when too many resources in CVS Synchronize view
Diffstat (limited to 'bundles/org.eclipse.team.ui')
2 files changed, 45 insertions, 5 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizeModelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizeModelProvider.java index 11d199b9a..923acb41a 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizeModelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizeModelProvider.java @@ -884,11 +884,7 @@ public abstract class AbstractSynchronizeModelProvider implements ISynchronizeMo * @param element the element to be added to the viewer */ protected void doAdd(ISynchronizeModelElement parent, ISynchronizeModelElement element) { - if (DEBUG) { - System.out.println("Adding view item " + element.getName()); //$NON-NLS-1$ - } - AbstractTreeViewer viewer = (AbstractTreeViewer)getViewer(); - viewer.add(parent, element); + updateHandler.doAdd(parent, element); } /** diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelUpdateHandler.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelUpdateHandler.java index 8ce6706fc..6b85c3241 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelUpdateHandler.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelUpdateHandler.java @@ -136,6 +136,11 @@ public class SynchronizeModelUpdateHandler extends BackgroundEventHandler implem private boolean performingBackgroundUpdate; + /* + * Map used to keep track of additions so they can be added in batch at the end of the update + */ + private Map additionsMap; + /** * Create the marker update handler. */ @@ -578,10 +583,23 @@ public class SynchronizeModelUpdateHandler extends BackgroundEventHandler implem expanded = provider.getExpandedResources(); selected = provider.getSelectedResources(); } + if (viewer instanceof AbstractTreeViewer && additionsMap == null) + additionsMap = new HashMap(); } runnable.run(); } finally { if (Utils.canUpdateViewer(viewer)) { + if (!additionsMap.isEmpty() && Utils.canUpdateViewer(viewer)) { + for (Iterator iter = additionsMap.keySet().iterator(); iter.hasNext();) { + ISynchronizeModelElement parent = (ISynchronizeModelElement) iter.next(); + if (DEBUG) { + System.out.println("Adding child view items of " + parent.getName()); //$NON-NLS-1$ + } + List toAdd = (List)additionsMap.get(parent); + ((AbstractTreeViewer)viewer).add(parent, toAdd.toArray(new Object[toAdd.size()])); + } + additionsMap = null; + } if (expanded != null) { provider.expandResources(expanded); } @@ -702,4 +720,30 @@ public class SynchronizeModelUpdateHandler extends BackgroundEventHandler implem handleException(e); } } + + /** + * Add the element to the viewer. + * @param parent the parent of the element which is already added to the viewer + * @param element the element to be added to the viewer + */ + protected void doAdd(ISynchronizeModelElement parent, ISynchronizeModelElement element) { + if (additionsMap == null) { + if (DEBUG) { + System.out.println("Added view item " + element.getName()); //$NON-NLS-1$ + } + AbstractTreeViewer viewer = (AbstractTreeViewer)getViewer(); + viewer.add(parent, element); + } else { + // Accumulate the additions + if (DEBUG) { + System.out.println("Queueing view item for addition " + element.getName()); //$NON-NLS-1$ + } + List toAdd = (List)additionsMap.get(parent); + if (toAdd == null) { + toAdd = new ArrayList(); + additionsMap.put(parent, toAdd); + } + toAdd.add(element); + } + } } |