Buggy code:
} Point statusLineLocation = statusLine . getDisplayLocation ( ) ; if ( statusLineLocation == null ) { return ; } multiKeyAssistShell = new Shell ( display , SWT . NO_TRIM ) ; GridLayout layout = new GridLayout ( ) ; layout . marginHeight = 0 ; layout . marginWidth = 0 ; multiKeyAssistShell . setLayout ( layout ) ; multiKeyAssistShell . setBackground ( display . getSystemColor ( COLOR_INFO_BACKGROUND ) ) ; Map partialMatches = new TreeMap ( new Comparator ( ) { public int compare ( Object a , Object b ) { KeySequence sequenceA = ( ( KeySequence ) ( a ) ) ; KeySequence sequenceB = ( ( KeySequence ) ( b ) ) ; return sequenceA . format ( ) . compareTo ( sequenceB . format ( ) ) ; } } ) ; partialMatches . putAll ( commandManager . getPartialMatches ( state . getCurrentSequence ( ) ) ) ; Iterator partialMatchItr = partialMatches . entrySet ( ) . iterator ( ) ; while ( partialMatchItr . hasNext ( ) ) { Map . Entry entry = ( ( Map . Entry ) ( partialMatchItr . next ( ) ) ) ; String commandId = ( ( String ) ( entry . getValue ( ) ) ) ; ICommand command = commandManager . getCommand ( commandId ) ; if ( ( ! ( command . isDefined ( ) ) ) || ( ! ( activityManager . getIdentifier ( command . getId ( ) ) . isEnabled ( ) ) ) ) { partialMatchItr . remove ( ) ; } } if ( partialMatches . isEmpty ( ) ) { Label noMatchesLabel = new Label ( multiKeyAssistShell , SWT . NULL ) ; noMatchesLabel . setText ( Util . translateString ( WorkbenchKeyboard . RESOURCE_BUNDLE , "NoMatches.Message" ) ) ; noMatchesLabel . setLayoutData ( new GridData ( GridData . FILL_BOTH ) ) ; noMatchesLabel . setBackground ( multiKeyAssistShell . getBackground ( ) ) ; } else { final Table completionsTable = new Table ( multiKeyAssistShell , SWT . SINGLE ) ; completionsTable . setBackground ( multiKeyAssistShell . getBackground ( ) ) ; GridData gridData = new GridData ( GridData . FILL_BOTH ) ; completionsTable . setLayoutData ( gridData ) ; final List commands = new ArrayList ( ) ; TableColumn columnKeySequence = new TableColumn ( completionsTable , SWT . LEFT , 0 ) ; TableColumn columnCommandName = new TableColumn ( completionsTable , SWT . LEFT , 1 ) ; Iterator itemsItr = partialMatches . entrySet ( ) . iterator ( ) ; while ( itemsItr . hasNext ( ) ) { Map . Entry entry = ( ( Map . Entry ) ( itemsItr . next ( ) ) ) ; KeySequence sequence = ( ( KeySequence ) ( entry . getKey ( ) ) ) ; String commandId = ( ( String ) ( entry . getValue ( ) ) ) ; ICommand command = commandManager . getCommand ( commandId ) ; try { String [ ] text = new String [ ] { sequence . format ( ) , command . getName ( ) } ; TableItem item = new TableItem ( completionsTable , SWT . NULL ) ; item . setText ( text ) ; commands . add ( command ) ; } catch ( NotDefinedException e ) { } } columnKeySequence . pack ( ) ; columnCommandName . pack ( ) ; completionsTable . addSelectionListener ( new SelectionListener ( ) { public void widgetDefaultSelected ( SelectionEvent event ) { int selectionIndex = completionsTable . getSelectionIndex ( ) ; if ( selectionIndex >= 0 ) { ICommand command = ( ( ICommand ) ( commands . get ( selectionIndex ) ) ) ; try { executeCommand ( command . getId ( ) ) ; } catch ( CommandException e ) { logException ( e ) ; } } } public void widgetSelected ( SelectionEvent event ) { } } ) ; } multiKeyAssistShell . pack ( ) ; Point assistShellSize = multiKeyAssistShell . getSize ( ) ; if ( ( assistShellSize . x ) > ( WorkbenchKeyboard . MULTI_KEY_ASSIST_SHELL_MAX_WIDTH ) ) { assistShellSize . x = WorkbenchKeyboard . MULTI_KEY_ASSIST_SHELL_MAX_WIDTH ; } if ( ( assistShellSize . y ) > ( WorkbenchKeyboard . MULTI_KEY_ASSIST_SHELL_MAX_HEIGHT ) ) { assistShellSize . y = WorkbenchKeyboard . MULTI_KEY_ASSIST_SHELL_MAX_HEIGHT ; } multiKeyAssistShell . setSize ( assistShellSize ) ; Point assistShellLocation = new Point ( statusLineLocation . x , ( ( statusLineLocation . y ) - ( assistShellSize . y ) ) ) ; Rectangle displayBounds = display . getBounds ( ) ; final int displayRightEdge = ( displayBounds . x ) + ( displayBounds . width ) ; if ( ( assistShellLocation . x ) < ( displayBounds . x ) ) { assistShellLocation . x = displayBounds . x ; } else if ( ( ( assistShellLocation . x ) + ( assistShellSize . x ) ) > displayRightEdge ) { assistShellLocation . x = displayRightEdge - ( assistShellSize . x ) ; } final int displayBottomEdge = ( displayBounds . y ) + ( displayBounds . height ) ; if ( ( assistShellLocation . y ) < ( displayBounds . y ) ) { assistShellLocation . y = displayBounds . y ; } else if ( ( ( assistShellLocation . y ) + ( assistShellSize . y ) ) > displayBottomEdge ) { assistShellLocation . y = displayBottomEdge - ( assistShellSize . y ) ; } multiKeyAssistShell . setLocation ( assistShellLocation ) ; multiKeyAssistShell . addListener ( Deactivate , new Listener ( ) { public void handleEvent ( Event event ) { closeMultiKeyAssistShell ( ) ; } } ) ; <START_BUG> workbench . getContextSupport ( ) . registerShell ( multiKeyAssistShell , TYPE_NONE ) ; <END_BUG> multiKeyAssistShell . open ( ) ; } public boolean press ( List potentialKeyStrokes , Event event ) throws CommandException { } void processKeyEvent ( List keyStrokes , Event event ) { } private void resetState ( ) { } }

Fix:
workbench . getContextSupport ( ) . registerShell ( multiKeyAssistShell , TYPE_WINDOW ) ;