Bug 486344: Overlay icons on editor tab disappear in split mode

- Fix drawing "override icon" when editor is split
- Correctly refresh when icon changes in split editor


Change-Id: Iee88ac05da14ac6b354f2b1ac58babe99f845508
Signed-off-by: Vlad Ionut Cruceru <vladcruceru27@gmail.com>
Signed-off-by: Matthias Becker <ma.becker@sap.com>
Also-by: Tobias Melcher <tobias.melcher@sap.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/splitteraddon/SplitterAddon.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/splitteraddon/SplitterAddon.java
index d518ce3..bafad14 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/splitteraddon/SplitterAddon.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/splitteraddon/SplitterAddon.java
@@ -130,6 +130,12 @@
 		compPart.setCloseable(true);
 		compPart.setContributionURI("bundleclass://org.eclipse.e4.ui.workbench.addons.swt/org.eclipse.e4.ui.workbench.addons.splitteraddon.SplitHost"); //$NON-NLS-1$
 
+		// Check if icon from MPart was overridden
+		Object overriddenImage = originalPart.getTransientData().get(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY);
+		if (overriddenImage != null) {
+			compPart.getTransientData().put(IPresentationEngine.OVERRIDE_ICON_IMAGE_KEY, overriddenImage);
+		}
+
 		// Always remove the composite part from the model
 		compPart.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);
 
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 757d573..66edd05 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
@@ -194,9 +194,12 @@
 
 		MUIElement partParent = part.getParent();
 		if (partParent instanceof MPartStack) {
-			CTabItem item = findItemForPart(part);
-			if (item != null) {
-				itemsToSet.add(findItemForPart(part));
+			addItemToSet(itemsToSet, part);
+		} else if (partParent instanceof MPartSashContainer) {
+			MElementContainer<MUIElement> parentParent = partParent.getParent();
+			if (parentParent instanceof MPart) {
+				MPart parentParentMPart = (MPart) parentParent;
+				addItemToSet(itemsToSet, parentParentMPart);
 			}
 		} else if (part.getCurSharedRef() != null) {
 			MWindow topWin = modelService.getTopLevelWindowFor(part);
@@ -213,6 +216,13 @@
 		return itemsToSet;
 	}
 
+	private void addItemToSet(List<CTabItem> itemsToSet, MPart parentParent) {
+		CTabItem item = findItemForPart(parentParent);
+		if (item != null) {
+			itemsToSet.add(item);
+		}
+	}
+
 	@SuppressWarnings("unchecked")
 	@Inject
 	@Optional