diff options
author | Michael Valenta | 2007-08-08 19:10:32 +0000 |
---|---|---|
committer | Michael Valenta | 2007-08-08 19:10:32 +0000 |
commit | 91f21d33facebd17b1bed79e04b8787038c193ba (patch) | |
tree | 60f0098f9df653e30f56389c443676b711c8f617 | |
parent | 7a244c4feadc8885b27c8729b82e57955f9139f8 (diff) | |
download | eclipse.platform.team-91f21d33facebd17b1bed79e04b8787038c193ba.tar.gz eclipse.platform.team-91f21d33facebd17b1bed79e04b8787038c193ba.tar.xz eclipse.platform.team-91f21d33facebd17b1bed79e04b8787038c193ba.zip |
Bug 198383 [Tests] Failure on Mac in nightly build
8 files changed, 54 insertions, 13 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java index 8db6c10d7..df9131b36 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java @@ -309,6 +309,10 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN }); dlp.setDecorationContext(decorationContext); } + } + + public void setInitialInput() { + CommonViewer viewer = (CommonViewer)getViewer(); viewer.setInput(getInitialInput()); viewer.expandToLevel(2); } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java index c6b6300dd..c137ea85b 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelLabelProvider.java @@ -223,7 +223,7 @@ public class ResourceModelLabelProvider extends protected ImageManager getImageManager() { ISynchronizationContext context = getContext(); if (context != null) { - return ImageManager.getImageManager(context); + return ImageManager.getImageManager(context, getConfiguration()); } if (localImageManager == null) { localImageManager = new ImageManager(); diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizePage.java index f04f1c3f6..1000160b1 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizePage.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractSynchronizePage.java @@ -110,7 +110,7 @@ public abstract class AbstractSynchronizePage extends Page implements ISynchroni // Create the changes section which, in turn, creates the changes viewer and its configuration this.changesSection = createChangesSection(composite); - this.changesViewer = createChangesViewer(changesSection.getContainer()); + createChangesViewer(changesSection.getContainer()); changesSection.setViewer(changesViewer); } @@ -125,11 +125,11 @@ public abstract class AbstractSynchronizePage extends Page implements ISynchroni * with the page. * * @param parent the parent of the viewer - * @return the changes viewer control */ - protected Viewer createChangesViewer(Composite parent) { + private void createChangesViewer(Composite parent) { viewerAdvisor = createViewerAdvisor(parent); - return viewerAdvisor.getViewer(); + changesViewer = viewerAdvisor.getViewer(); + viewerAdvisor.setInitialInput(); } protected abstract AbstractViewerAdvisor createViewerAdvisor(Composite parent); diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java index 837ffeb39..1dd3ffcbe 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractTreeViewerAdvisor.java @@ -24,7 +24,7 @@ import org.eclipse.ui.*; /** * Abstract superclass for tree viewer advisors */ -public class AbstractTreeViewerAdvisor extends StructuredViewerAdvisor implements IAdaptable { +public abstract class AbstractTreeViewerAdvisor extends StructuredViewerAdvisor implements IAdaptable { private ICompareNavigator nav; private INavigatable navigatable; diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractViewerAdvisor.java index b137ebe4e..3a0b94406 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/AbstractViewerAdvisor.java @@ -65,4 +65,6 @@ public abstract class AbstractViewerAdvisor { } public abstract void setActionBars(IActionBars actionBars); + + public abstract void setInitialInput(); } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ImageManager.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ImageManager.java index 12a78b046..70423adb9 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ImageManager.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ImageManager.java @@ -12,11 +12,15 @@ package org.eclipse.team.internal.ui.synchronize; import org.eclipse.compare.CompareConfiguration; import org.eclipse.jface.resource.*; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.team.core.ICache; import org.eclipse.team.core.ICacheListener; import org.eclipse.team.core.mapping.ISynchronizationContext; import org.eclipse.team.internal.ui.TeamUIPlugin; +import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; public class ImageManager { @@ -27,20 +31,39 @@ public class ImageManager { private CompareConfiguration compareConfig = new CompareConfiguration(); private boolean disposed = false; - public synchronized static ImageManager getImageManager(ISynchronizationContext context) { + public synchronized static ImageManager getImageManager(ISynchronizationContext context, ISynchronizePageConfiguration configuration) { ImageManager manager = (ImageManager)context.getCache().get(PROP_IMAGE_MANAGER); if (manager == null) { final ImageManager newRegistry = new ImageManager(); context.getCache().put(PROP_IMAGE_MANAGER, newRegistry); - context.getCache().addCacheListener(new ICacheListener() { - public void cacheDisposed(ICache cache) { - newRegistry.dispose(); - } - }); + Viewer v = getViewer(configuration); + if (v != null) { + // It is best to dispose the images when the view is disposed (see bug 198383) + v.getControl().addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + newRegistry.dispose(); + } + }); + } else { + // The viewer wasn't available so we'll dispose when the context is disposed + context.getCache().addCacheListener(new ICacheListener() { + public void cacheDisposed(ICache cache) { + newRegistry.dispose(); + } + }); + } manager = newRegistry; } return manager; } + + private static Viewer getViewer(ISynchronizePageConfiguration configuration) { + if (configuration == null) + return null; + if (configuration.getPage() == null) + return null; + return configuration.getPage().getViewer(); + } public Image getImage(ImageDescriptor descriptor) { if (descriptor == null || disposed) diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/TreeViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/TreeViewerAdvisor.java index cdf53f16d..37947ece2 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/TreeViewerAdvisor.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/TreeViewerAdvisor.java @@ -137,6 +137,10 @@ public class TreeViewerAdvisor extends AbstractTreeViewerAdvisor { viewer.getControl().setLayoutData(data); initializeViewer(viewer); } + + public void setInitialInput() { + // The input will be set later + } /** * Create the model manager to be used by this advisor diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/AbstractSynchronizeLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/AbstractSynchronizeLabelProvider.java index 6449b25b7..a8b7bde24 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/AbstractSynchronizeLabelProvider.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/AbstractSynchronizeLabelProvider.java @@ -379,7 +379,7 @@ public abstract class AbstractSynchronizeLabelProvider implements ILabelProvider private ImageManager getImageManager() { ISynchronizationContext context = getContext(); if (context != null) { - return ImageManager.getImageManager(context); + return ImageManager.getImageManager(context, getConfiguration()); } if (localImageManager == null) { localImageManager = new ImageManager(); @@ -387,6 +387,14 @@ public abstract class AbstractSynchronizeLabelProvider implements ILabelProvider return localImageManager; } + private ISynchronizePageConfiguration getConfiguration() { + if (this instanceof SynchronizationLabelProvider) { + SynchronizationLabelProvider slp = (SynchronizationLabelProvider) this; + return (ISynchronizePageConfiguration)slp.getExtensionSite().getExtensionStateModel().getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_PAGE_CONFIGURATION); + } + return null; + } + private ISynchronizationContext getContext() { if (this instanceof SynchronizationLabelProvider) { SynchronizationLabelProvider slp = (SynchronizationLabelProvider) this; |