fix Ctrl+Space shortcuts support - for dlangide#146

This commit is contained in:
Vadim Lopatin 2016-10-13 21:58:34 +03:00
parent 63cc8d56ff
commit 46acde9ef0
1 changed files with 24 additions and 15 deletions

View File

@ -1692,16 +1692,24 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
return super.findKeyAction(keyCode, flags); return super.findKeyAction(keyCode, flags);
} }
static bool isAZaz(dchar ch) {
return (ch >= 'a' && ch <='z') || (ch >= 'A' && ch <='Z');
}
/// handle keys /// handle keys
override bool onKeyEvent(KeyEvent event) { override bool onKeyEvent(KeyEvent event) {
//Log.d("onKeyEvent ", event.action, " ", event.keyCode, " flags ", event.flags); //Log.d("onKeyEvent ", event.action, " ", event.keyCode, " flags ", event.flags);
if (focused) startCaretBlinking(); if (focused) startCaretBlinking();
cancelHoverTimer(); cancelHoverTimer();
bool ctrlOrAltPressed = false; //(event.flags & (KeyFlag.Control /* | KeyFlag.Alt */)); bool ctrlOrAltPressed = !!(event.flags & KeyFlag.Control); //(event.flags & (KeyFlag.Control /* | KeyFlag.Alt */));
//if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.SPACE && (event.flags & KeyFlag.Control)) {
// Log.d("Ctrl+Space pressed");
//}
if (event.action == KeyAction.Text && event.text.length && !ctrlOrAltPressed) { if (event.action == KeyAction.Text && event.text.length && !ctrlOrAltPressed) {
//Log.d("text entered: ", event.text); //Log.d("text entered: ", event.text);
if (readOnly) if (readOnly)
return true; return true;
if (!(!!(event.flags & KeyFlag.Alt) && event.text.length == 1 && isAZaz(event.text[0]))) { // filter out Alt+A..Z
if (replaceMode && _selectionRange.empty && _content[_caretPos.line].length >= _caretPos.pos + event.text.length) { if (replaceMode && _selectionRange.empty && _content[_caretPos.line].length >= _caretPos.pos + event.text.length) {
// replace next char(s) // replace next char(s)
TextRange range = _selectionRange; TextRange range = _selectionRange;
@ -1715,9 +1723,10 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction
if (focused) startCaretBlinking(); if (focused) startCaretBlinking();
return true; return true;
} }
if (event.keyCode == KeyCode.SPACE && !readOnly) {
return true;
} }
//if (event.keyCode == KeyCode.SPACE && !readOnly) {
// return true;
//}
//if (event.keyCode == KeyCode.RETURN && !readOnly && !_content.multiline) { //if (event.keyCode == KeyCode.RETURN && !readOnly && !_content.multiline) {
// return true; // return true;
//} //}