}
// Allow special key out-of-order processing.
List keyStrokes = generatePossibleKeyStrokes(event);
if (isOutOfOrderKey(keyStrokes)) {
Widget widget = event.widget;
if ((event.character == SWT.DEL)
&& ((event.stateMask & SWT.MODIFIER_MASK) == 0)
&& ((widget instanceof Text) || (widget instanceof Combo))) {
/*
* KLUDGE. Bug 54654. The text widget relies on no listener
* doing any work before dispatching the native delete event.
* This does not work, as we are restricted to listeners.
* However, it can be said that pressing a delete key in a text
* widget will never use key bindings. This can be shown be
* considering how the event dispatching is expected to work in
* a text widget. So, we should do nothing ... ever.
*/
return;
} else if (widget instanceof StyledText) {
if (event.type == SWT.KeyDown) {
/*
* KLUDGE. Some people try to do useful work in verify
* listeners. The way verify listeners work in SWT, we need
* to verify the key as well; otherwise, we can't detect
* that useful work has been done.
*/
if (!outOfOrderVerifyListener.isActive(event.time)) {
((StyledText) widget)
.addVerifyKeyListener(outOfOrderVerifyListener);
outOfOrderVerifyListener.setActive(event.time);
}
}
} else {
if (!outOfOrderListener.isActive(event.time)) {
widget.addListener(SWT.KeyDown, outOfOrderListener);
outOfOrderListener.setActive(event.time);
}
}