Fix for Bug 284388 - [Compatibility] editor action bar contributions appear at the end of the top trim
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java
index 809686f..b01bf4b 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ElementReferenceRenderer.java
@@ -19,8 +19,6 @@
 import org.eclipse.e4.ui.model.application.ui.MContext;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.workbench.IPresentationEngine;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FillLayout;
@@ -147,20 +145,6 @@
 
 						// Reparent the widget
 						refCtrl.setParent(phComp);
-						if (refElement instanceof MPart) {
-							MToolBar tb = ((MPart) refElement).getToolbar();
-							if (tb != null
-									&& tb.getTransientData()
-											.containsKey(
-													LazyStackRenderer.TOOL_BAR_INTERMEDIATE)) {
-								Composite compTB = (Composite) tb
-										.getTransientData()
-										.get(LazyStackRenderer.TOOL_BAR_INTERMEDIATE);
-								if (compTB != null && !compTB.isDisposed()) {
-									compTB.setParent(phComp);
-								}
-							}
-						}
 						break;
 					}
 				} else if (currentRef != null) {
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java
index c5455f7..41482af 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/LazyStackRenderer.java
@@ -12,10 +12,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import javax.inject.Inject;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.services.events.IEventBroker;
-import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
 import org.eclipse.e4.ui.model.application.ui.MContext;
 import org.eclipse.e4.ui.model.application.ui.MElementContainer;
 import org.eclipse.e4.ui.model.application.ui.MGenericStack;
@@ -23,33 +21,13 @@
 import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder;
 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
 import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
-import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
-import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.widgets.CTabFolder;
-import org.eclipse.e4.ui.workbench.IPresentationEngine;
 import org.eclipse.e4.ui.workbench.UIEvents;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.layout.RowLayoutFactory;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventHandler;
 
@@ -64,10 +42,6 @@
  * 
  */
 public abstract class LazyStackRenderer extends SWTPartRenderer {
-	public static final String TAG_VIEW_MENU = "ViewMenu"; //$NON-NLS-1$
-	static final String TOOL_BAR_MANAGER_RENDERER_VIEW_MENU = "StackRenderer.viewMenu"; //$NON-NLS-1$
-	static final String TOOL_BAR_INTERMEDIATE = "StackRenderer.intermediate"; //$NON-NLS-1$
-
 	private EventHandler lazyLoader = new EventHandler() {
 		public void handleEvent(Event event) {
 			Object element = event.getProperty(UIEvents.EventTags.ELEMENT);
@@ -91,11 +65,7 @@
 			if (stack.getSelectedElement() != null)
 				lsr.showTab(stack.getSelectedElement());
 		}
-	};
-	Image viewMenuImage;
-
-	@Inject
-	IPresentationEngine renderer;
+	};;
 
 	public LazyStackRenderer() {
 		super();
@@ -173,35 +143,16 @@
 		if (element == null || element.getWidget() == null)
 			return;
 
+		if (element instanceof MPartStack
+				&& element.getRenderer() instanceof StackRenderer) {
+			StackRenderer sr = (StackRenderer) element.getRenderer();
+			CTabFolder ctf = (CTabFolder) element.getWidget();
+			sr.clearTR(ctf);
+		}
+
 		if (element instanceof MPlaceholder) {
 			MPlaceholder ph = (MPlaceholder) element;
-			MUIElement ref = ph.getRef();
-			if (ref instanceof MPart && ph.getParent() != null
-					&& ph.getParent().getWidget() instanceof CTabFolder) {
-				// Reparent the existing Toolbar
-				// MPart part = (MPart) ref;
-				CTabFolder ctf = (CTabFolder) ph.getParent().getWidget();
-				// IPresentationEngine renderer = part.getContext().get(
-				// IPresentationEngine.class);
-
-				// Dispose the existing toolbar
-				if (ctf.getTopRight() != null) {
-					Control curTB = ctf.getTopRight();
-					ctf.setTopRight(null);
-					if (!curTB.isDisposed()) {
-						MUIElement tbME = (MUIElement) curTB
-								.getData(AbstractPartRenderer.OWNING_ME);
-						if (tbME instanceof MToolBar) {
-							curTB.setVisible(false);
-							curTB.moveBelow(null);
-							//tbME.setVisible(false);
-						} else
-							curTB.dispose();
-					}
-				}
-			}
-
-			element = ((MPlaceholder) element).getRef();
+			element = ph.getRef();
 		}
 
 		// Hide any floating windows
@@ -240,6 +191,18 @@
 		if (!element.isToBeRendered())
 			return;
 
+		if (element instanceof MPartStack
+				&& element.getRenderer() instanceof StackRenderer) {
+			MPartStack stackModel = (MPartStack) element;
+			StackRenderer sr = (StackRenderer) element.getRenderer();
+			CTabFolder ctf = (CTabFolder) element.getWidget();
+
+			MUIElement curSel = stackModel.getSelectedElement();
+			MPart part = (MPart) ((curSel instanceof MPlaceholder) ? ((MPlaceholder) curSel)
+					.getRef() : curSel);
+			sr.adjustTR(ctf, part);
+		}
+
 		if (element instanceof MPlaceholder && element.getWidget() != null) {
 			MPlaceholder ph = (MPlaceholder) element;
 			MUIElement ref = ph.getRef();
@@ -250,49 +213,6 @@
 			refCtrl.setParent(phComp);
 			phComp.layout(new Control[] { refCtrl }, SWT.DEFER);
 
-			if (ref instanceof MPart
-					&& ph.getParent().getWidget() instanceof CTabFolder) {
-				// Reparent the existing Toolbar
-				MPart part = (MPart) ref;
-				CTabFolder ctf = (CTabFolder) ph.getParent().getWidget();
-				// IPresentationEngine renderer = modelService
-				// .getContainingContext(ph)
-				// .get(IPresentationEngine.class);
-
-				MToolBar tbModel = part.getToolbar();
-
-				// Dispose the existing toolbar
-				if (ctf.getTopRight() != null) {
-					Control curTB = ctf.getTopRight();
-					ctf.setTopRight(null);
-					if (!curTB.isDisposed()) {
-						MUIElement tbME = (MUIElement) curTB
-								.getData(AbstractPartRenderer.OWNING_ME);
-						if (tbME instanceof MToolBar) {
-							curTB.setVisible(false);
-							curTB.moveBelow(null);
-							//tbME.setVisible(false);
-						} else
-							curTB.dispose();
-					}
-				}
-
-				if (tbModel != null) {
-					tbModel.setVisible(true);
-					MMenu viewMenu = getViewMenu(part);
-					final Composite intermediate = createIntermediate(part,
-							tbModel, viewMenu, ctf);
-
-					if (intermediate != null && !intermediate.isDisposed()) {
-						intermediate.setVisible(true);
-						intermediate.moveAbove(null);
-						intermediate.pack();
-						ctf.setTopRight(intermediate, SWT.RIGHT | SWT.WRAP);
-						ctf.layout();
-					}
-				}
-			}
-
 			element = ref;
 		}
 
@@ -350,164 +270,4 @@
 			}
 		}
 	}
-
-	protected Composite createIntermediate(MPart part, MUIElement tbModel,
-			MMenu viewMenu, Composite parent) {
-		Composite tbi = (Composite) tbModel.getTransientData().get(
-				TOOL_BAR_INTERMEDIATE);
-		if (tbi != null && !tbi.isDisposed()) {
-			tbi.setParent(parent);
-			return tbi;
-		}
-		final Composite intermediate = new Composite((Composite) parent,
-				SWT.NONE);
-		intermediate.setData(AbstractPartRenderer.OWNING_ME, tbModel);
-		int orientation = SWT.HORIZONTAL;
-		RowLayout layout = RowLayoutFactory.fillDefaults().wrap(false)
-				.spacing(0).type(orientation).create();
-		layout.marginLeft = 3;
-		layout.center = true;
-		intermediate.setLayout(layout);
-		tbModel.getTransientData().put(TOOL_BAR_INTERMEDIATE, intermediate);
-		Control c = (Control) renderer.createGui(tbModel, intermediate,
-				part.getContext());
-		if (c == null) {
-			intermediate.dispose();
-		} else {
-			c.addListener(SWT.Dispose, new Listener() {
-				public void handleEvent(org.eclipse.swt.widgets.Event event) {
-					intermediate.dispose();
-				}
-			});
-			if (viewMenu != null) {
-				addMenuButton(part, intermediate, viewMenu);
-			}
-		}
-		return intermediate;
-	}
-
-	protected MMenu getViewMenu(MPart part) {
-		if (part.getMenus() == null) {
-			return null;
-		}
-		for (MMenu menu : part.getMenus()) {
-			if (menu.getTags().contains(TAG_VIEW_MENU) && menu.isToBeRendered()) {
-				return menu;
-			}
-		}
-		return null;
-	}
-
-	protected void addMenuButton(MPart part, Composite intermediate, MMenu menu) {
-		ToolBar tb = new ToolBar(intermediate, SWT.FLAT | SWT.RIGHT);
-		tb.setData(TOOL_BAR_MANAGER_RENDERER_VIEW_MENU);
-		ToolItem ti = new ToolItem(tb, SWT.PUSH);
-		ti.setImage(getViewMenuImage());
-		ti.setHotImage(null);
-		ti.setToolTipText("View Menu"); //$NON-NLS-1$
-		ti.setData("theMenu", menu); //$NON-NLS-1$
-		ti.setData("thePart", part); //$NON-NLS-1$
-
-		ti.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				showMenu((ToolItem) e.widget);
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-				showMenu((ToolItem) e.widget);
-			}
-		});
-	}
-
-	/**
-	 * @param item
-	 */
-	protected void showMenu(ToolItem item) {
-		// Create the UI for the menu
-		final MMenu menuModel = (MMenu) item.getData("theMenu"); //$NON-NLS-1$
-		Menu menu = null;
-		Object obj = menuModel.getWidget();
-		if (obj instanceof Menu) {
-			menu = (Menu) obj;
-		}
-		if (menu == null || menu.isDisposed()) {
-			MPart part = (MPart) item.getData("thePart"); //$NON-NLS-1$
-			Control ctrl = (Control) part.getWidget();
-			final Menu tmpMenu = (Menu) renderer.createGui(menuModel,
-					ctrl.getShell(), part.getContext());
-			menu = tmpMenu;
-			if (tmpMenu != null) {
-				ctrl.addDisposeListener(new DisposeListener() {
-					public void widgetDisposed(DisposeEvent e) {
-						if (!tmpMenu.isDisposed()) {
-							tmpMenu.dispose();
-						}
-					}
-				});
-			}
-		}
-		if (menu == null) {
-			return;
-		}
-
-		// ...and Show it...
-		Rectangle ib = item.getBounds();
-		Point displayAt = item.getParent().toDisplay(ib.x, ib.y + ib.height);
-		menu.setLocation(displayAt);
-		menu.setVisible(true);
-
-		Display display = Display.getCurrent();
-		while (!menu.isDisposed() && menu.isVisible()) {
-			if (!display.readAndDispatch())
-				display.sleep();
-		}
-		if (menu.getData() instanceof MenuManager) {
-			MenuManager manager = (MenuManager) menu.getData();
-			manager.dispose();
-		} else {
-			menu.dispose();
-		}
-	}
-
-	private Image getViewMenuImage() {
-		if (viewMenuImage == null) {
-			Display d = Display.getCurrent();
-
-			Image viewMenu = new Image(d, 16, 16);
-			Image viewMenuMask = new Image(d, 16, 16);
-
-			Display display = Display.getCurrent();
-			GC gc = new GC(viewMenu);
-			GC maskgc = new GC(viewMenuMask);
-			gc.setForeground(display
-					.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW));
-			gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-
-			int[] shapeArray = new int[] { 6, 1, 15, 1, 11, 5, 10, 5 };
-			gc.fillPolygon(shapeArray);
-			gc.drawPolygon(shapeArray);
-
-			Color black = display.getSystemColor(SWT.COLOR_BLACK);
-			Color white = display.getSystemColor(SWT.COLOR_WHITE);
-
-			maskgc.setBackground(black);
-			maskgc.fillRectangle(0, 0, 16, 16);
-
-			maskgc.setBackground(white);
-			maskgc.setForeground(white);
-			maskgc.fillPolygon(shapeArray);
-			maskgc.drawPolygon(shapeArray);
-			gc.dispose();
-			maskgc.dispose();
-
-			ImageData data = viewMenu.getImageData();
-			data.transparentPixel = data.getPixel(0, 0);
-
-			viewMenuImage = new Image(d, viewMenu.getImageData(),
-					viewMenuMask.getImageData());
-			viewMenu.dispose();
-			viewMenuMask.dispose();
-		}
-		return viewMenuImage;
-	}
 }
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
index 7d1d532..e858bc9 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java
@@ -31,7 +31,6 @@
 import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
 import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
-import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
 import org.eclipse.e4.ui.services.IStylingEngine;
 import org.eclipse.e4.ui.widgets.CTabFolder;
 import org.eclipse.e4.ui.widgets.CTabFolder2Adapter;
@@ -42,7 +41,10 @@
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.MenuManager;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.events.MenuDetectEvent;
 import org.eclipse.swt.events.MenuDetectListener;
 import org.eclipse.swt.events.MouseAdapter;
@@ -51,12 +53,21 @@
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
 import org.eclipse.swt.widgets.Widget;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventHandler;
@@ -67,18 +78,35 @@
 	private static final String SHELL_CLOSE_EDITORS_MENU = "shell_close_editors_menu"; //$NON-NLS-1$
 	private static final String STACK_SELECTED_PART = "stack_selected_part"; //$NON-NLS-1$
 
+	// View Menu / TB data constants
+	private static final String TOP_RIGHT = "topRight"; //$NON-NLS-1$
+	//private static final String MENU_TB = "menuTB"; //$NON-NLS-1$
+	//private static final String PART_TB = "partTB"; //$NON-NLS-1$
+
+	Image viewMenuImage;
+
 	@Inject
 	IStylingEngine stylingEngine;
 
 	@Inject
 	IEventBroker eventBroker;
 
+	@Inject
+	IPresentationEngine renderer;
+
 	private EventHandler itemUpdater;
 
 	private EventHandler dirtyUpdater;
 
 	private boolean ignoreTabSelChanges = false;
 
+	private ActivationJob activationJob = null;
+
+	// private ToolBar menuTB;
+	// private boolean menuButtonShowing = false;
+
+	// private Control partTB;
+
 	private class ActivationJob implements Runnable {
 		public MElementContainer<MUIElement> stackToActivate = null;
 
@@ -132,8 +160,6 @@
 		return isValid(parent);
 	}
 
-	private ActivationJob activationJob = null;
-
 	synchronized private void activateStack(MElementContainer<MUIElement> stack) {
 		CTabFolder ctf = (CTabFolder) stack.getWidget();
 		if (ctf == null || ctf.isDisposed())
@@ -314,9 +340,100 @@
 				| styleModifier);
 		bindWidget(element, ctf); // ?? Do we need this ?
 
+		// Add a composite to manage the view's TB and Menu
+		addTopRight(ctf);
+
 		return ctf;
 	}
 
+	/**
+	 * @param ctf
+	 */
+	private void addTopRight(CTabFolder ctf) {
+		Composite trComp = new Composite(ctf, SWT.NONE);
+		trComp.setBackground(Display.getCurrent().getSystemColor(
+				SWT.COLOR_DARK_CYAN));
+		RowLayout rl = new RowLayout();
+		trComp.setLayout(rl);
+		rl.marginBottom = rl.marginTop = rl.marginRight = rl.marginLeft = 0;
+		ctf.setData(TOP_RIGHT, trComp);
+		ctf.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				Composite c = (Composite) e.widget.getData(TOP_RIGHT);
+				if (c != null && !c.isDisposed())
+					c.dispose();
+			}
+		});
+	}
+
+	private Composite getTRComposite(CTabFolder ctf) {
+		return (Composite) ctf.getData(TOP_RIGHT);
+	}
+
+	public void clearTR(CTabFolder ctf) {
+		ToolBar vmTB = getViewMenuTB(ctf);
+		if (vmTB != null && !vmTB.isDisposed())
+			vmTB.dispose();
+
+		MToolBar viewTBModel = getViewTB(ctf);
+		if (viewTBModel != null && viewTBModel.getWidget() != null)
+			viewTBModel.setVisible(false);
+
+		ctf.setTopRight(null);
+		getTRComposite(ctf).setVisible(false);
+	}
+
+	public void adjustTR(CTabFolder ctf, MPart part) {
+		// Clear the current info
+		clearTR(ctf);
+
+		if (part == null)
+			return;
+
+		// Show the TB, create one if necessary
+		if (part.getToolbar() != null && part.getToolbar().isToBeRendered()) {
+			part.getToolbar().setVisible(true);
+			renderer.createGui(part.getToolbar(), getTRComposite(ctf),
+					part.getContext());
+		}
+
+		setupMenuButton(part, ctf);
+
+		Composite trComp = getTRComposite(ctf);
+		if (trComp.getChildren().length > 0) {
+			trComp.setVisible(true);
+			ctf.setTopRight(trComp, SWT.RIGHT | SWT.WRAP);
+		} else {
+			ctf.setTopRight(null);
+			trComp.setVisible(false);
+		}
+
+		trComp.pack();
+		ctf.layout();
+	}
+
+	private MToolBar getViewTB(CTabFolder ctf) {
+		Composite trComp = (Composite) ctf.getData(TOP_RIGHT);
+
+		// The view menu TB *is* modeled so it's OWNING_ME != null
+		for (Control kid : trComp.getChildren()) {
+			if (kid.getData(OWNING_ME) instanceof MToolBar)
+				return (MToolBar) kid.getData(OWNING_ME);
+		}
+		return null;
+	}
+
+	private ToolBar getViewMenuTB(CTabFolder ctf) {
+		Composite trComp = (Composite) ctf.getData(TOP_RIGHT);
+
+		// The view menu TB is not modeled so it's OWNING_ME == null
+		for (Control kid : trComp.getChildren()) {
+			if (kid.getData(OWNING_ME) == null)
+				return (ToolBar) kid;
+		}
+		return null;
+	}
+
 	protected void createTab(MElementContainer<MUIElement> stack,
 			MUIElement element) {
 		MPart part = null;
@@ -420,20 +537,7 @@
 
 		// Check if we have to reset the currently active child for the stack
 		if (parentElement.getSelectedElement() == child) {
-			if (ctf.getTopRight() != null) {
-				Control curTB = ctf.getTopRight();
-				ctf.setTopRight(null);
-				if (!curTB.isDisposed()) {
-					MUIElement tbME = (MUIElement) curTB
-							.getData(AbstractPartRenderer.OWNING_ME);
-					if (tbME instanceof MToolBar) {
-						curTB.setVisible(false);
-						curTB.moveBelow(null);
-						//tbME.setVisible(false);
-					} else
-						curTB.dispose();
-				}
-			}
+			clearTR(ctf);
 		} else {
 			if (child instanceof MPlaceholder) {
 				MPlaceholder placeholder = (MPlaceholder) child;
@@ -450,7 +554,7 @@
 			if (child instanceof MPart) {
 				MToolBar toolbar = ((MPart) child).getToolbar();
 				if (toolbar != null) {
-					// toolbar.setVisible(false);
+					toolbar.setVisible(false);
 				}
 			}
 		}
@@ -559,48 +663,10 @@
 		ctf.setSelection(cti);
 		ignoreTabSelChanges = false;
 
-		// Dispose the existing toolbar
-		if (ctf.getTopRight() != null) {
-			Control curTB = ctf.getTopRight();
-			ctf.setTopRight(null);
-			if (!curTB.isDisposed()) {
-				MUIElement tbME = (MUIElement) curTB
-						.getData(AbstractPartRenderer.OWNING_ME);
-				if (tbME instanceof MToolBar) {
-					curTB.setVisible(false);
-					curTB.moveBelow(null);
-					//tbME.setVisible(false);
-				} else
-					curTB.dispose();
-			}
-		}
-
-		// Show the TB, create one if necessary
+		// Clear out the current Top Right info
 		MPart part = (MPart) ((element instanceof MPart) ? element
 				: ((MPlaceholder) element).getRef());
-		MMenu viewMenu = getViewMenu(part);
-		final MToolBar partToolbar = part.getToolbar();
-		MToolBar toolbar = partToolbar;
-		if (toolbar == null) {
-			if (viewMenu != null) {
-				toolbar = MenuFactoryImpl.eINSTANCE.createToolBar();
-				toolbar.setElementId(part.getElementId());
-				part.setToolbar(toolbar);
-			}
-		}
-
-		if (partToolbar != null && partToolbar.isToBeRendered()) {
-			partToolbar.setVisible(true);
-			final Composite intermediate = createIntermediate(part,
-					partToolbar, viewMenu, ctf);
-			if (intermediate != null && !intermediate.isDisposed()) {
-				intermediate.setVisible(true);
-				intermediate.moveAbove(null);
-				intermediate.pack();
-				ctf.setTopRight(intermediate, SWT.RIGHT | SWT.WRAP);
-				ctf.layout();
-			}
-		}
+		adjustTR(ctf, part);
 
 		ctf.addMenuDetectListener(new MenuDetectListener() {
 			public void menuDetected(MenuDetectEvent e) {
@@ -619,6 +685,138 @@
 		});
 	}
 
+	private void setupMenuButton(MPart part, CTabFolder ctf) {
+		MMenu viewMenu = getViewMenu(part);
+
+		// View menu (if any)
+		if (viewMenu != null) {
+			showMenuButton(part, ctf, viewMenu);
+		} else {
+			// hide the menu's TB
+			ToolBar menuTB = getViewMenuTB(ctf);
+			if (menuTB != null) {
+				menuTB.dispose();
+			}
+		}
+	}
+
+	private void showMenuButton(MPart part, CTabFolder ctf, MMenu menu) {
+		ToolBar menuTB = getViewMenuTB(ctf);
+		if (menuTB == null) {
+			menuTB = new ToolBar(getTRComposite(ctf), SWT.FLAT | SWT.RIGHT);
+			ToolItem ti = new ToolItem(menuTB, SWT.PUSH);
+			ti.setImage(getViewMenuImage());
+			ti.setHotImage(null);
+			ti.setToolTipText("View Menu"); //$NON-NLS-1$
+
+			ti.addSelectionListener(new SelectionListener() {
+				public void widgetSelected(SelectionEvent e) {
+					showMenu((ToolItem) e.widget);
+				}
+
+				public void widgetDefaultSelected(SelectionEvent e) {
+					showMenu((ToolItem) e.widget);
+				}
+			});
+		}
+
+		ToolItem ti = menuTB.getItem(0);
+		ti.setData("theMenu", menu); //$NON-NLS-1$
+		ti.setData("thePart", part); //$NON-NLS-1$
+	}
+
+	/**
+	 * @param item
+	 */
+	protected void showMenu(ToolItem item) {
+		// Create the UI for the menu
+		final MMenu menuModel = (MMenu) item.getData("theMenu"); //$NON-NLS-1$
+		Menu menu = null;
+		Object obj = menuModel.getWidget();
+		if (obj instanceof Menu) {
+			menu = (Menu) obj;
+		}
+		if (menu == null || menu.isDisposed()) {
+			MPart part = (MPart) item.getData("thePart"); //$NON-NLS-1$
+			Control ctrl = (Control) part.getWidget();
+			final Menu tmpMenu = (Menu) renderer.createGui(menuModel,
+					ctrl.getShell(), part.getContext());
+			menu = tmpMenu;
+			if (tmpMenu != null) {
+				ctrl.addDisposeListener(new DisposeListener() {
+					public void widgetDisposed(DisposeEvent e) {
+						if (!tmpMenu.isDisposed()) {
+							tmpMenu.dispose();
+						}
+					}
+				});
+			}
+		}
+		if (menu == null) {
+			return;
+		}
+
+		// ...and Show it...
+		Rectangle ib = item.getBounds();
+		Point displayAt = item.getParent().toDisplay(ib.x, ib.y + ib.height);
+		menu.setLocation(displayAt);
+		menu.setVisible(true);
+
+		Display display = Display.getCurrent();
+		while (!menu.isDisposed() && menu.isVisible()) {
+			if (!display.readAndDispatch())
+				display.sleep();
+		}
+		if (menu.getData() instanceof MenuManager) {
+			MenuManager manager = (MenuManager) menu.getData();
+			manager.dispose();
+		} else {
+			menu.dispose();
+		}
+	}
+
+	private Image getViewMenuImage() {
+		if (viewMenuImage == null) {
+			Display d = Display.getCurrent();
+
+			Image viewMenu = new Image(d, 16, 16);
+			Image viewMenuMask = new Image(d, 16, 16);
+
+			Display display = Display.getCurrent();
+			GC gc = new GC(viewMenu);
+			GC maskgc = new GC(viewMenuMask);
+			gc.setForeground(display
+					.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW));
+			gc.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+
+			int[] shapeArray = new int[] { 6, 1, 15, 1, 11, 5, 10, 5 };
+			gc.fillPolygon(shapeArray);
+			gc.drawPolygon(shapeArray);
+
+			Color black = display.getSystemColor(SWT.COLOR_BLACK);
+			Color white = display.getSystemColor(SWT.COLOR_WHITE);
+
+			maskgc.setBackground(black);
+			maskgc.fillRectangle(0, 0, 16, 16);
+
+			maskgc.setBackground(white);
+			maskgc.setForeground(white);
+			maskgc.fillPolygon(shapeArray);
+			maskgc.drawPolygon(shapeArray);
+			gc.dispose();
+			maskgc.dispose();
+
+			ImageData data = viewMenu.getImageData();
+			data.transparentPixel = data.getPixel(0, 0);
+
+			viewMenuImage = new Image(d, viewMenu.getImageData(),
+					viewMenuMask.getImageData());
+			viewMenu.dispose();
+			viewMenuMask.dispose();
+		}
+		return viewMenuImage;
+	}
+
 	private void openMenuFor(MPart part, CTabFolder folder, Point point) {
 		Menu tabMenu = createTabMenu(folder, part);
 		tabMenu.setData(STACK_SELECTED_PART, part);
@@ -761,4 +959,16 @@
 				partService.hidePart(otherPart);
 		}
 	}
+
+	private MMenu getViewMenu(MPart part) {
+		if (part.getMenus() == null) {
+			return null;
+		}
+		for (MMenu menu : part.getMenus()) {
+			if (menu.getTags().contains(TAG_VIEW_MENU) && menu.isToBeRendered()) {
+				return menu;
+			}
+		}
+		return null;
+	}
 }
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
index 8f1d388..43e1ef0 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
@@ -28,11 +28,9 @@
 import org.eclipse.e4.ui.model.application.ui.MElementContainer;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.SideValue;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MDirectToolItem;
 import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
-import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarContribution;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
@@ -41,18 +39,23 @@
 import org.eclipse.e4.ui.workbench.UIEvents;
 import org.eclipse.e4.ui.workbench.UIEvents.ElementContainer;
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.action.AbstractGroupMarker;
 import org.eclipse.jface.action.ContributionItem;
 import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.layout.RowLayoutFactory;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
 import org.eclipse.swt.widgets.Widget;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventHandler;
@@ -62,6 +65,7 @@
  */
 public class ToolBarManagerRenderer extends SWTPartRenderer {
 
+	private static final String TOOL_BAR_MANAGER_RENDERER_DRAG_HANDLE = "ToolBarManagerRenderer.dragHandle"; //$NON-NLS-1$
 	private Map<MToolBar, ToolBarManager> modelToManager = new HashMap<MToolBar, ToolBarManager>();
 	private Map<ToolBarManager, MToolBar> managerToModel = new HashMap<ToolBarManager, MToolBar>();
 
@@ -154,6 +158,9 @@
 						.getParent();
 				if (parent != null) {
 					parent.markDirty();
+					parent.update(true);
+					// MUIElement tbModel = itemModel.getParent();
+					// disposeToolbarIfNecessary((MToolBar) tbModel);
 					ToolBar tb = parent.getControl();
 					if (tb != null && !tb.isDisposed()) {
 						tb.getShell().layout(new Control[] { tb }, SWT.DEFER);
@@ -249,12 +256,41 @@
 			return null;
 
 		final MToolBar toolbarModel = (MToolBar) element;
-		// Composite intermediate = createIntermediate(toolbarModel,
-		// (Composite) parent);
-		final ToolBar toolbar = createToolbar(toolbarModel, (Composite) parent);
-		// setupMenuButton(toolbarModel, intermediate);
+		Composite intermediate = createIntermediate(toolbarModel,
+				(Composite) parent);
+		createToolbar(toolbarModel, intermediate);
 		processContribution(toolbarModel);
-		return toolbar;
+		return intermediate;
+	}
+
+	/**
+	 * @param toolbarModel
+	 * @param parent
+	 * @return an intermediate composite or simply the parent.
+	 */
+	private Composite createIntermediate(MToolBar toolbarModel, Composite parent) {
+		Composite intermediate = new Composite((Composite) parent, SWT.NONE);
+		intermediate.setData(AbstractPartRenderer.OWNING_ME, toolbarModel);
+		int orientation = getOrientation(toolbarModel);
+		RowLayout layout = RowLayoutFactory.fillDefaults().wrap(false)
+				.spacing(0).type(orientation).create();
+		layout.marginLeft = 3;
+		layout.center = true;
+		intermediate.setLayout(layout);
+		if (needsDragHandle(toolbarModel)) {
+			ToolBar separatorToolBar = new ToolBar(intermediate, orientation
+					| SWT.WRAP | SWT.FLAT | SWT.RIGHT);
+			separatorToolBar.setData(TOOL_BAR_MANAGER_RENDERER_DRAG_HANDLE);
+			ToolItem ti = new ToolItem(separatorToolBar, SWT.SEPARATOR);
+			ti.setWidth(0);
+		}
+		return intermediate;
+	}
+
+	private boolean needsDragHandle(MToolBar toolbarModel) {
+		// Only if it's in the trim
+		return toolbarModel != null
+				&& ((EObject) toolbarModel).eContainer() instanceof MTrimBar;
 	}
 
 	/**
@@ -302,7 +338,7 @@
 	 * @param existingSeparatorNames
 	 * @return <code>true</code> if the contribution was successfuly processed
 	 */
-	private boolean processAddition(MToolBar toolbarModel,
+	private boolean processAddition(final MToolBar toolbarModel,
 			final ToolBarManager manager, MToolBarContribution contribution) {
 		final ToolBarContributionRecord record = new ToolBarContributionRecord(
 				toolbarModel, contribution, this);
@@ -317,6 +353,7 @@
 				public boolean changed(IEclipseContext context) {
 					record.updateVisibility(parentContext.getActiveLeaf());
 					manager.update(true);
+					// disposeToolbarIfNecessary(toolbarModel);
 					return true;
 				}
 			});
@@ -452,21 +489,23 @@
 		return null;
 	}
 
-	MMenu getViewMenu(MPart part) {
-		if (part.getMenus() == null) {
-			return null;
-		}
-		for (MMenu menu : part.getMenus()) {
-			if (menu.getTags().contains(StackRenderer.TAG_VIEW_MENU)) {
-				return menu;
+	boolean hasOnlySeparators(ToolBar toolbar) {
+		ToolItem[] children = toolbar.getItems();
+		for (ToolItem toolItem : children) {
+			if ((toolItem.getStyle() & SWT.SEPARATOR) == 0) {
+				return false;
+			} else if (toolItem.getControl() != null
+					&& toolItem.getControl().getData(OWNING_ME) instanceof MToolControl) {
+				return false;
 			}
 		}
-		return null;
+		return true;
 	}
 
 	@Override
 	public void postProcess(MUIElement element) {
 		super.postProcess(element);
+		disposeToolbarIfNecessary((MToolBar) element);
 		ToolBar tb = getToolbarFrom(element.getWidget());
 		if (tb != null && !tb.isDisposed()) {
 			tb.setVisible(true);
@@ -476,6 +515,29 @@
 		}
 	}
 
+	/**
+	 * @param element
+	 */
+	private void disposeToolbarIfNecessary(final MToolBar element) {
+		Display.getCurrent().asyncExec(new Runnable() {
+			public void run() {
+				doDisposeToolbarIfNecessary(element);
+			}
+		});
+	}
+
+	/**
+	 * @param element
+	 */
+	private void doDisposeToolbarIfNecessary(MToolBar element) {
+		ToolBar tb = getToolbarFrom(element.getWidget());
+		boolean cleanUp = tb == null || tb.isDisposed();
+		if (!cleanUp) {
+			cleanUp = tb.getItemCount() == 0 || hasOnlySeparators(tb);
+		}
+		element.setVisible(!cleanUp);
+	}
+
 	@Override
 	public void disposeWidget(MUIElement element) {
 		Object widget = element.getWidget();
@@ -530,9 +592,6 @@
 	}
 
 	private ToolBar findToolbar(Composite intermediate) {
-		if (intermediate instanceof ToolBar) {
-			return (ToolBar) intermediate;
-		}
 		for (Control child : intermediate.getChildren()) {
 			if (child.getData() instanceof ToolBarManager) {
 				return (ToolBar) child;
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/TrimBarRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/TrimBarRenderer.java
index 20e3265..094661e 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/TrimBarRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/TrimBarRenderer.java
@@ -18,7 +18,6 @@
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.contexts.RunAndTrack;
 import org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer;
-import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
 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.MUIElement;
@@ -27,19 +26,11 @@
 import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
 import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
-import org.eclipse.e4.ui.workbench.IPresentationEngine;
 import org.eclipse.e4.ui.workbench.modeling.ExpressionContext;
-import org.eclipse.jface.layout.RowLayoutFactory;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.swt.widgets.Widget;
 
 /**
  *
@@ -79,7 +70,6 @@
 	}
 
 	private HashMap<MTrimBar, ArrayList<ArrayList<MTrimElement>>> pendingCleanup = new HashMap<MTrimBar, ArrayList<ArrayList<MTrimElement>>>();
-	static final String TRIM_BAR_MANAGER_RENDERER_DRAG_HANDLE = "TrimBarRenderer.dragHandle"; //$NON-NLS-1$
 
 	/*
 	 * (non-Javadoc)
@@ -130,7 +120,6 @@
 		default:
 			return null;
 		}
-		processContents(trimModel);
 		result.addDisposeListener(new DisposeListener() {
 			public void widgetDisposed(DisposeEvent e) {
 				cleanUp(trimModel);
@@ -139,35 +128,6 @@
 		return result;
 	}
 
-	/**
-	 * @param trimModel
-	 */
-	private void processContents(MTrimBar trimModel) {
-		IEclipseContext ctx = getContext(trimModel);
-		ExpressionContext eContext = new ExpressionContext(ctx);
-		ArrayList<MTrimContribution> toContribute = new ArrayList<MTrimContribution>();
-		ContributionsAnalyzer.gatherTrimContributions(trimModel,
-				application.getTrimContributions(), trimModel.getElementId(),
-				toContribute, eContext);
-		addTrimContributions(trimModel, toContribute, ctx, eContext);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer#childRendered
-	 * (org.eclipse.e4.ui.model.application.ui.MElementContainer,
-	 * org.eclipse.e4.ui.model.application.ui.MUIElement)
-	 */
-	@Override
-	public void childRendered(MElementContainer<MUIElement> parentElement,
-			MUIElement element) {
-		super.childRendered(parentElement, element);
-		Object downCast = parentElement;
-		layoutTrim((MTrimBar) downCast);
-	}
-
 	@Override
 	public void hideChild(MElementContainer<MUIElement> parentElement,
 			MUIElement child) {
@@ -185,67 +145,19 @@
 	 * (org.eclipse.e4.ui.model.application.MPart)
 	 */
 	@Override
-	public void processContents(MElementContainer<MUIElement> container) {
-		if (!(((MUIElement) container) instanceof MTrimBar))
+	public void processContents(MElementContainer<MUIElement> me) {
+		if (!(((MUIElement) me) instanceof MTrimBar))
 			return;
-
-		// Process any contents of the newly created ME
-		List<MUIElement> parts = container.getChildren();
-		final Composite parent = (Composite) container.getWidget();
-		if (parts != null) {
-			// loading a legacy app will add children to the window while it is
-			// being rendered.
-			// this is *not* the correct place for this
-			// hope that the ADD event will pick up the new part.
-			IPresentationEngine renderer = (IPresentationEngine) context
-					.get(IPresentationEngine.class.getName());
-			MUIElement[] plist = parts.toArray(new MUIElement[parts.size()]);
-			for (int i = 0; i < plist.length; i++) {
-				MUIElement childME = plist[i];
-				final Composite intermediate = createIntermediate(childME,
-						parent);
-				final Object newObj = renderer.createGui(childME, intermediate,
-						null);
-				if (newObj == null) {
-					intermediate.dispose();
-				} else {
-					((Widget) newObj).addListener(SWT.Dispose, new Listener() {
-						public void handleEvent(Event event) {
-							intermediate.dispose();
-						}
-					});
-				}
-			}
-		}
-	}
-
-	private Composite createIntermediate(MUIElement toolbarModel,
-			Composite parent) {
-		Composite intermediate = new Composite((Composite) parent, SWT.NONE);
-		intermediate.setData(AbstractPartRenderer.OWNING_ME, toolbarModel);
-		int orientation = getOrientation(toolbarModel);
-		RowLayout layout = RowLayoutFactory.fillDefaults().wrap(false)
-				.spacing(0).type(orientation).create();
-		layout.marginLeft = 3;
-		layout.center = true;
-		intermediate.setLayout(layout);
-		ToolBar separatorToolBar = new ToolBar(intermediate, orientation
-				| SWT.WRAP | SWT.FLAT | SWT.RIGHT);
-		separatorToolBar.setData(TRIM_BAR_MANAGER_RENDERER_DRAG_HANDLE);
-		new ToolItem(separatorToolBar, SWT.SEPARATOR);
-		return intermediate;
-	}
-
-	private int getOrientation(final MUIElement element) {
-		MUIElement theParent = element.getParent();
-		if (theParent instanceof MTrimBar) {
-			MTrimBar trimContainer = (MTrimBar) theParent;
-			SideValue side = trimContainer.getSide();
-			if (side.getValue() == SideValue.LEFT_VALUE
-					|| side.getValue() == SideValue.RIGHT_VALUE)
-				return SWT.VERTICAL;
-		}
-		return SWT.HORIZONTAL;
+		super.processContents(me);
+		IEclipseContext ctx = getContext(me);
+		ExpressionContext eContext = new ExpressionContext(ctx);
+		MElementContainer<?> trimObj = me;
+		MTrimBar trimModel = (MTrimBar) trimObj;
+		ArrayList<MTrimContribution> toContribute = new ArrayList<MTrimContribution>();
+		ContributionsAnalyzer.gatherTrimContributions(trimModel,
+				application.getTrimContributions(), trimModel.getElementId(),
+				toContribute, eContext);
+		addTrimContributions(trimModel, toContribute, ctx, eContext);
 	}
 
 	private void addTrimContributions(final MTrimBar trimModel,
@@ -286,7 +198,6 @@
 								for (MTrimElement child : toRemove) {
 									child.setToBeRendered(rc);
 								}
-								layoutTrim(trimModel);
 								return true;
 							}
 						});