diff options
author | Brian de Alwis | 2016-11-03 14:53:14 +0000 |
---|---|---|
committer | Brian de Alwis | 2016-11-03 14:53:14 +0000 |
commit | 5bf6a6d33bac1e234a0d3b153d59d3c0d6229a42 (patch) | |
tree | f858bb474d99d29abf62663ed6f71584e8dbf2e2 | |
parent | cdc9dc237aef775123e84584e5616acebc83a7ad (diff) | |
download | eclipse.platform.ua-5bf6a6d33bac1e234a0d3b153d59d3c0d6229a42.tar.gz eclipse.platform.ua-5bf6a6d33bac1e234a0d3b153d59d3c0d6229a42.tar.xz eclipse.platform.ua-5bf6a6d33bac1e234a0d3b153d59d3c0d6229a42.zip |
Bug 492884 - Multiple instances of welcome launchbarY20161110-1000I20161110-2030I20161110-1630I20161110-1225I20161110-1130I20161110-0710I20161110-0510I20161109-2000I20161108-1015I20161108-0800
Change-Id: I899f4dc78966c57f2cb0c0a61e21216cb0a0fea3
-rw-r--r-- | org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/IntroPlugin.java | 1 | ||||
-rw-r--r-- | org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/presentations/IntroLaunchBar.java | 26 |
2 files changed, 26 insertions, 1 deletions
diff --git a/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/IntroPlugin.java b/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/IntroPlugin.java index 1c3bf9733..e4970bcf4 100644 --- a/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/IntroPlugin.java +++ b/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/IntroPlugin.java @@ -91,6 +91,7 @@ public class IntroPlugin extends AbstractUIPlugin { launchBar.close(); launchBar = null; } + IntroLaunchBar.destroyAll(getWorkbench()); } public void setLaunchBar(IntroLaunchBar launchBar) { diff --git a/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/presentations/IntroLaunchBar.java b/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/presentations/IntroLaunchBar.java index 3ceaa8733..29891fdb1 100644 --- a/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/presentations/IntroLaunchBar.java +++ b/org.eclipse.ui.intro/src/org/eclipse/ui/internal/intro/impl/presentations/IntroLaunchBar.java @@ -9,6 +9,7 @@ **************************************************************************************************/ package org.eclipse.ui.internal.intro.impl.presentations; +import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; @@ -16,6 +17,7 @@ import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.core.di.annotations.Optional; +import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.SideValue; import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; @@ -45,6 +47,7 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.AnimationEngine; @@ -188,7 +191,7 @@ public class IntroLaunchBar { IntroLaunchBarElement element) { EModelService modelService = (EModelService) window.getService(EModelService.class); MTrimmedWindow trimmedWindow = (MTrimmedWindow) window.getService(MTrimmedWindow.class); - + MToolControl trimControl = modelService.createModelElement(MToolControl.class); trimControl.setElementId(LAUNCHBAR_ID); trimControl.setContributionURI(BUNDLECLASS_URI); @@ -205,6 +208,27 @@ public class IntroLaunchBar { return (IntroLaunchBar) trimControl.getObject(); } + /** + * Remove all traces of any launch bars found in the model. Required on startup as the + * {@linkplain IntroLaunchBar} instances may not be have been rendered yet and so are + * disconnected from the {@link IntroPlugin}'s state. + * + * @param workbench + * the workbench to process + */ + public static void destroyAll(IWorkbench workbench) { + EModelService modelService = workbench.getService(EModelService.class); + MApplication application = workbench.getService(MApplication.class); + List<MToolControl> candidates = modelService.findElements(application, MToolControl.class, + EModelService.IN_TRIM, toolControl -> LAUNCHBAR_ID.equals(toolControl.getElementId()) + && BUNDLECLASS_URI.equals(((MToolControl) toolControl).getContributionURI())); + for (MToolControl trimControl : candidates) { + if (trimControl.getParent() != null) { + trimControl.getParent().getChildren().remove(trimControl); + } + } + } + private static SideValue determineLocation(IntroLaunchBarElement element) { // Try restoring to the same location if moved previously IDialogSettings settings = IntroPlugin.getDefault().getDialogSettings(); |