Overrides the superclass's lookup method to prefer the number field
from the KeyEvent.
int meta = getMetaState(content);
int number = event.getNumber();
/*
* Prefer number if no meta key is active, or if it produces something
* valid and the meta lookup does not.
*/
if ((meta & (KeyEvent.META_ALT_ON | KeyEvent.META_SHIFT_ON)) == 0) {
if (number != 0) {
return number;
}
}
int match = super.lookup(event, content);
if (match != 0) {
return match;
} else {
/*
* If a meta key is active but the lookup with the meta key
* did not produce anything, try some other meta keys, because
* the user might have pressed SHIFT when they meant ALT,
* or vice versa.
*/
if (meta != 0) {
KeyData kd = new KeyData();
char[] accepted = getAcceptedChars();
if (event.getKeyData(kd)) {
for (int i = 1; i < kd.meta.length; i++) {
if (ok(accepted, kd.meta[i])) {
return kd.meta[i];
}
}
}
}
/*
* Otherwise, use the number associated with the key, since
* whatever they wanted to do with the meta key does not
* seem to be valid here.
*/
return number;
}