Partial fix for Bug 269269 - [Compatibility] Need support for legacy toolbars. Adding necessary API at this point...
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartFactory.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartFactory.java
index b4a236e..5f758e8 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartFactory.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/SWTPartFactory.java
@@ -24,9 +24,11 @@
import org.eclipse.e4.ui.model.application.MMenu;
import org.eclipse.e4.ui.model.application.MMenuItem;
import org.eclipse.e4.ui.model.application.MPart;
+import org.eclipse.e4.ui.model.application.MToolBar;
import org.eclipse.e4.ui.model.application.MToolBarItem;
import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtiltities;
import org.eclipse.e4.workbench.ui.IHandlerService;
+import org.eclipse.e4.workbench.ui.ILegacyHook;
import org.eclipse.e4.workbench.ui.IResourceUtiltities;
import org.eclipse.e4.workbench.ui.renderers.PartFactory;
import org.eclipse.emf.common.notify.Notification;
@@ -55,6 +57,16 @@
public void createMenu(MPart<?> part, Object widgetObject, MMenu menu) {
Widget widget = (Widget) widgetObject;
org.eclipse.swt.widgets.Menu swtMenu;
+
+ if (menu != null && menu.getId() != null
+ && menu.getId().equals("org.eclipse.ui.main.menu") //$NON-NLS-1$
+ && menu.getItems().size() == 0) {
+ // Pre-populate the main menu
+ ILegacyHook lh = (ILegacyHook) context.get(ILegacyHook.class
+ .getName());
+ lh.loadMenu(menu);
+ }
+
if (widget instanceof MenuItem) {
swtMenu = new org.eclipse.swt.widgets.Menu(((MenuItem) widget)
.getParent().getShell(), SWT.DROP_DOWN);
@@ -77,7 +89,17 @@
}
public void createToolBar(MPart<?> part, Object widgetObject,
- org.eclipse.e4.ui.model.application.MToolBar toolbar) {
+ MToolBar toolbar) {
+
+ if (toolbar != null && toolbar.getId() != null
+ && toolbar.getId().equals("org.eclipse.ui.main.toolbar") //$NON-NLS-1$
+ && toolbar.getItems().size() == 0) {
+ // Pre-populate the main toolbar
+ ILegacyHook lh = (ILegacyHook) context.get(ILegacyHook.class
+ .getName());
+ lh.loadToolbar(toolbar);
+ }
+
Composite composite = (Composite) widgetObject;
org.eclipse.swt.widgets.ToolBar swtToolBar = new ToolBar(composite,
SWT.FLAT | SWT.NO_FOCUS);
@@ -118,7 +140,9 @@
final org.eclipse.e4.ui.model.application.MToolBarItem toolBarItem) {
int style = SWT.PUSH;
final ToolItem newToolItem = new ToolItem(swtMenu, style);
- newToolItem.setText(toolBarItem.getName());
+
+ if (toolBarItem.getName() != null)
+ newToolItem.setText(toolBarItem.getName());
newToolItem.setToolTipText(toolBarItem.getTooltip());
newToolItem.setImage(getImage(toolBarItem));
toolBarItem.eAdapters().add(new AdapterImpl() {
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
index 428c619..b1d5c18 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
@@ -55,8 +55,31 @@
Widget parentWidget = getParentWidget(part);
if (parentWidget instanceof Composite) {
IEclipseContext parentContext = getContextForParent(part);
+
+ // HACK!! Set up the close button style based on the 'Policy'
+ // Perhaps this should be CSS-based ?
+ boolean showCloseAlways = false;
+ boolean showMinMax = false;
+ int styleModifier = 0;
+ if (part.getPolicy() != null && part.getPolicy().length() > 0) {
+ String policy = part.getPolicy();
+ if (policy.indexOf("ViewStack") >= 0) { //$NON-NLS-1$
+ styleModifier = SWT.CLOSE;
+ showMinMax = true;
+ }
+ if (policy.indexOf("EditorStack") >= 0) { //$NON-NLS-1$
+ styleModifier = SWT.CLOSE;
+ showCloseAlways = true;
+ showMinMax = true;
+ }
+ }
+
final CTabFolder ctf = new CTabFolder((Composite) parentWidget,
- SWT.BORDER);
+ SWT.BORDER | styleModifier);
+ ctf.setUnselectedCloseVisible(showCloseAlways);
+ ctf.setMaximizeVisible(showMinMax);
+ ctf.setMinimizeVisible(showMinMax);
+
bindWidget(part, ctf);
ctf.setVisible(true);
ctf.setSimple(false);
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/ILegacyHook.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/ILegacyHook.java
index 7a444e2..1240313 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/ILegacyHook.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/ILegacyHook.java
@@ -11,9 +11,13 @@
package org.eclipse.e4.workbench.ui;
import org.eclipse.e4.ui.model.application.MMenu;
+import org.eclipse.e4.ui.model.application.MToolBar;
import org.eclipse.e4.ui.model.workbench.MPerspective;
public interface ILegacyHook {
public void loadMenu(MMenu menuModel);
+
+ public void loadToolbar(MToolBar toolbar);
+
public void loadPerspective(MPerspective<?> perspModel);
}
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/Workbench.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/Workbench.java
index 4e06424..40cf136 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/Workbench.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/Workbench.java
@@ -33,7 +33,6 @@
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.MApplicationElement;
import org.eclipse.e4.ui.model.application.MContributedPart;
-import org.eclipse.e4.ui.model.application.MMenu;
import org.eclipse.e4.ui.model.application.MPart;
import org.eclipse.e4.ui.model.application.MWindow;
import org.eclipse.e4.ui.model.workbench.MWorkbenchWindow;
@@ -283,13 +282,7 @@
globalContext.set(MApplication.class.getName(), workbench);
// Initialize the workbench for legacy support if required
- ILegacyHook legacyHook = (ILegacyHook) globalContext
- .get(ILegacyHook.class.getName());
- MWindow<?> wbw = workbench.getWindows().get(0);
- if (legacyHook != null && wbw.getMenu() == null) {
- MMenu mainMenu = wbw.getMenu();
- legacyHook.loadMenu(mainMenu);
- }
+ globalContext.get(ILegacyHook.class.getName());
}
public int run() {