From 46acde9ef0122a4d671942ed5c9b11b145996fbf Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Thu, 13 Oct 2016 21:58:34 +0300 Subject: [PATCH] fix Ctrl+Space shortcuts support - for dlangide#146 --- src/dlangui/widgets/editors.d | 39 +++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/dlangui/widgets/editors.d b/src/dlangui/widgets/editors.d index bd020de1..20f8368f 100644 --- a/src/dlangui/widgets/editors.d +++ b/src/dlangui/widgets/editors.d @@ -1692,32 +1692,41 @@ class EditWidgetBase : ScrollWidgetBase, EditableContentListener, MenuItemAction return super.findKeyAction(keyCode, flags); } + static bool isAZaz(dchar ch) { + return (ch >= 'a' && ch <='z') || (ch >= 'A' && ch <='Z'); + } + /// handle keys override bool onKeyEvent(KeyEvent event) { //Log.d("onKeyEvent ", event.action, " ", event.keyCode, " flags ", event.flags); if (focused) startCaretBlinking(); 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) { //Log.d("text entered: ", event.text); if (readOnly) return true; - if (replaceMode && _selectionRange.empty && _content[_caretPos.line].length >= _caretPos.pos + event.text.length) { - // replace next char(s) - TextRange range = _selectionRange; - range.end.pos += cast(int)event.text.length; - EditOperation op = new EditOperation(EditAction.Replace, range, [event.text]); - _content.performOperation(op, this); - } else { - EditOperation op = new EditOperation(EditAction.Replace, _selectionRange, [event.text]); - _content.performOperation(op, this); + 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) { + // replace next char(s) + TextRange range = _selectionRange; + range.end.pos += cast(int)event.text.length; + EditOperation op = new EditOperation(EditAction.Replace, range, [event.text]); + _content.performOperation(op, this); + } else { + EditOperation op = new EditOperation(EditAction.Replace, _selectionRange, [event.text]); + _content.performOperation(op, this); + } + if (focused) startCaretBlinking(); + return true; } - if (focused) startCaretBlinking(); - 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) { // return true; //}