Bug 399831 - Many broken shortcuts in multi-page editors

The legacy handler submission must use the correct part site
for the activation core expression.
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/KeyBindingService.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/KeyBindingService.java
index 1208672..e15a7d3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/KeyBindingService.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/KeyBindingService.java
@@ -326,6 +326,15 @@
 
         unregisterAction(action);
 
+		IWorkbenchPartSite partSite = workbenchPartSite;
+		if (parent != null) {
+			KeyBindingService currentParent = parent;
+			while (currentParent != null) {
+				partSite = currentParent.workbenchPartSite;
+				currentParent = currentParent.parent;
+			}
+		}
+
 		String commandId = action.getActionDefinitionId();
 		if (commandId != null) {
 			for (IAction registeredAction : actionToProxy.keySet()) {
@@ -340,8 +349,7 @@
 			IHandlerService hs = (IHandlerService) workbenchPartSite
 					.getService(IHandlerService.class);
 			actionToProxy.put(action, hs.activateHandler(commandId, new ActionHandler(action),
-					new LegacyHandlerSubmissionExpression(null, workbenchPartSite.getShell(),
-							workbenchPartSite)));
+					new LegacyHandlerSubmissionExpression(null, partSite.getShell(), partSite)));
 
 		}
     }
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LegacyHandlerService.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LegacyHandlerService.java
index 98ee6ba..2e2a79f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LegacyHandlerService.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/handlers/LegacyHandlerService.java
@@ -244,6 +244,9 @@
 		if (handlerActivations == null) {
 			handlerActivations = new ArrayList();
 		} else {
+			if (handlerActivations.contains(eActivation)) {
+				return;
+			}
 			handlerActivations = new ArrayList(handlerActivations);
 		}
 		handlerActivations.add(eActivation);