From f7a6d49be7f95a0dbc38bf10044c104d319efc68 Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Tue, 4 Oct 2022 11:06:55 +0200 Subject: [PATCH 1/4] Do not propagate to default text intent --- simplistic_editor/lib/basic_text_input_client.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index ae601f82bb8..996db09b0e3 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -315,6 +315,9 @@ class BasicTextInputClientState extends State PasteTextIntent: CallbackAction( onInvoke: (intent) => pasteText(intent.cause), ), + DoNothingAndStopPropagationTextIntent: DoNothingAction( + consumesKey: false, + ), }; void _delete() { From c2c4fc842b15709fb6922a03da12f65229bd493c Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Tue, 4 Oct 2022 11:10:05 +0200 Subject: [PATCH 2/4] Add support for backward and forward delete (desktop) --- .../lib/basic_text_input_client.dart | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index 996db09b0e3..29b967dcdfb 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -299,7 +299,7 @@ class BasicTextInputClientState extends State TextSelection get _selection => _value.selection; late final Map> _actions = >{ DeleteCharacterIntent: CallbackAction( - onInvoke: (intent) => _delete(), + onInvoke: (intent) => _delete(intent.forward), ), ExtendSelectionByCharacterIntent: CallbackAction( @@ -320,20 +320,28 @@ class BasicTextInputClientState extends State ), }; - void _delete() { + void _delete(bool forward) { if (_value.text.isEmpty) return; late final TextRange deletedRange; late final TextRange newComposing; - final int deletedLength = - _value.text.substring(0, _selection.baseOffset).characters.last.length; + late final int deletedLength; if (_selection.isCollapsed) { - if (_selection.baseOffset == 0) return; - deletedRange = TextRange( - start: _selection.baseOffset - deletedLength, - end: _selection.baseOffset, - ); + if (forward) { + deletedLength = _value.text.substring(_selection.baseOffset).characters.first.length; + deletedRange = TextRange( + start: _selection.baseOffset, + end: _selection.baseOffset + deletedLength, + ); + } else { + if (_selection.baseOffset == 0) return; + deletedLength = _value.text.substring(0, _selection.baseOffset).characters.last.length; + deletedRange = TextRange( + start: _selection.baseOffset - deletedLength, + end: _selection.baseOffset, + ); + } } else { deletedRange = _selection; } From ede5dcbe2e1176f09c54f0593c15abad6b8cc6b4 Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Tue, 4 Oct 2022 16:11:03 +0200 Subject: [PATCH 3/4] Update for nice auto-format --- .../lib/basic_text_input_client.dart | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index 29b967dcdfb..4cd73f53da5 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -325,21 +325,22 @@ class BasicTextInputClientState extends State late final TextRange deletedRange; late final TextRange newComposing; - late final int deletedLength; + late final String deletedText; + final int offset = _selection.baseOffset; if (_selection.isCollapsed) { if (forward) { - deletedLength = _value.text.substring(_selection.baseOffset).characters.first.length; + deletedText = _value.text.substring(offset).characters.first; deletedRange = TextRange( - start: _selection.baseOffset, - end: _selection.baseOffset + deletedLength, + start: offset, + end: offset + deletedText.length, ); } else { if (_selection.baseOffset == 0) return; - deletedLength = _value.text.substring(0, _selection.baseOffset).characters.last.length; + deletedText = _value.text.substring(0, offset).characters.last; deletedRange = TextRange( - start: _selection.baseOffset - deletedLength, - end: _selection.baseOffset, + start: offset - deletedText.length, + end: offset, ); } } else { From 3e7bd69352c3b94bbd0dc252e4101dfc344309f7 Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Wed, 5 Oct 2022 08:03:48 +0200 Subject: [PATCH 4/4] Fix using delete key throws if at the end of the text --- simplistic_editor/lib/basic_text_input_client.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index 4cd73f53da5..7190d555511 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -330,6 +330,7 @@ class BasicTextInputClientState extends State if (_selection.isCollapsed) { if (forward) { + if (_selection.baseOffset == _value.text.length) return; deletedText = _value.text.substring(offset).characters.first; deletedRange = TextRange( start: offset,