Index: Workbench.java =================================================================== RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java,v retrieving revision 1.101 diff -u -r1.101 Workbench.java --- Workbench.java 18 Sep 2003 18:38:12 -0000 1.101 +++ Workbench.java 22 Sep 2003 16:26:41 -0000 @@ -344,6 +344,7 @@ private CommandManager commandManager; private ContextManager contextManager; + private Boolean keyFilterEnabled; private StatusLineContributionItem modeContributionItem; private IWorkbenchWindow activeWorkbenchWindow; @@ -389,15 +390,27 @@ } public final void disableKeyFilter() { - final Display display = Display.getCurrent(); - display.removeFilter(SWT.KeyDown, listener); - display.removeFilter(SWT.Traverse, listener); + synchronized (keyFilterEnabled) { + final Display display = Display.getCurrent(); + display.removeFilter(SWT.KeyDown, listener); + display.removeFilter(SWT.Traverse, listener); + keyFilterEnabled = Boolean.TRUE; + } } public final void enableKeyFilter() { - final Display display = Display.getCurrent(); - display.addFilter(SWT.KeyDown, listener); - display.addFilter(SWT.Traverse, listener); + synchronized (keyFilterEnabled) { + final Display display = Display.getCurrent(); + display.addFilter(SWT.KeyDown, listener); + display.addFilter(SWT.Traverse, listener); + keyFilterEnabled = Boolean.FALSE; + } + } + + public final boolean isKeyFilterEnabled() { + synchronized (keyFilterEnabled) { + return keyFilterEnabled.booleanValue(); + } } public final boolean inContext(final String commandId) { Index: WorkbenchWindow.java =================================================================== RCS file: /home/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java,v retrieving revision 1.103 diff -u -r1.103 WorkbenchWindow.java --- WorkbenchWindow.java 25 Aug 2003 22:49:27 -0000 1.103 +++ WorkbenchWindow.java 22 Sep 2003 16:26:41 -0000 @@ -1583,6 +1583,8 @@ boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { + final boolean filterWasEnabled = workbench.isKeyFilterEnabled(); + ToolBarManager shortcutBar = getShortcutBar(); Control shortcutBarControl = null; if (shortcutBar != null) @@ -1590,13 +1592,21 @@ boolean shortcutbarWasEnabled = false; if (shortcutBarControl != null) shortcutbarWasEnabled = shortcutBarControl.getEnabled(); + try { if (shortcutBarControl != null && !shortcutBarControl.isDisposed()) shortcutBarControl.setEnabled(false); + + if (filterWasEnabled) { + workbench.disableKeyFilter(); + } super.run(fork, cancelable, runnable); } finally { if (shortcutBarControl != null && !shortcutBarControl.isDisposed()) shortcutBarControl.setEnabled(shortcutbarWasEnabled); + if (filterWasEnabled) { + workbench.enableKeyFilter(); + } } } /**