Fix for Bug 345764 - DND moves tab to the end even though it seems like a no-op
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
index 9ea16ab..181c56e 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
@@ -221,9 +221,23 @@
 			}
 		}
 
+		// 'dropIndex' is now the index of the CTabItem to put ourselves before
+		// we need to adjust this to be a model index
+		if (dropIndex < dropCTF.getItemCount()) {
+			CTabItem item = dropCTF.getItem(dropIndex);
+			MUIElement itemModel = (MUIElement) item.getData(AbstractPartRenderer.OWNING_ME);
+
+			// if we're going before ourselves its a NO-OP
+			if (itemModel == dragElement)
+				return;
+
+			dropIndex = itemModel.getParent().getChildren().indexOf(itemModel);
+		}
+
 		if (dragElement instanceof MStackElement) {
 			if (dragElement.getParent() != null)
 				dragElement.getParent().getChildren().remove(dragElement);
+
 			if (dropIndex >= 0 && dropIndex < dropStack.getChildren().size())
 				dropStack.getChildren().add(dropIndex, (MStackElement) dragElement);
 			else