From 5e675c0d9b12122b3f91aa3504ca43156a7920f6 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Thu, 10 Aug 2023 20:09:04 +0200 Subject: [PATCH 1/4] Reset editing delta state when replacing editing state --- lib/web_ui/lib/src/engine/text_editing/text_editing.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart index c32819677200b..eb0cd351963e2 100644 --- a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart @@ -1361,6 +1361,7 @@ abstract class DefaultTextEditingStrategy with CompositionAwareMixin implements @override void setEditingState(EditingState? editingState) { lastEditingState = editingState; + _editingDeltaState = null; if (!isEnabled || !editingState!.isValid) { return; } From 878cacdfe2cdb643a0daf6947984ab3d806da7eb Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Thu, 10 Aug 2023 20:58:25 +0200 Subject: [PATCH 2/4] add test --- lib/web_ui/test/engine/text_editing_test.dart | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/web_ui/test/engine/text_editing_test.dart b/lib/web_ui/test/engine/text_editing_test.dart index 2bc1b0710353b..de0a8ced01128 100644 --- a/lib/web_ui/test/engine/text_editing_test.dart +++ b/lib/web_ui/test/engine/text_editing_test.dart @@ -2793,6 +2793,25 @@ Future testMain() async { expect(textEditingDeltaState.composingOffset, -1); expect(textEditingDeltaState.composingExtent, -1); }); + + test('Delta state is cleared after setting editing state', (){ + editingStrategy!.enable( + multilineConfig, + onChange: trackEditingState, + onAction: trackInputAction, + ); + final DomHTMLInputElement input = editingStrategy!.domElement! as DomHTMLInputElement; + input.value = 'foo bar'; + input.dispatchEvent(createDomEvent('Event', 'input')); + expect( + lastEditingState, + EditingState(text: 'foo bar', baseOffset: 7, extentOffset: 7), + ); + expect(editingStrategy!.editingDeltaState.oldText, 'foo bar'); + + editingStrategy!.setEditingState(EditingState(text: 'foo bar baz', baseOffset: 11, extentOffset: 11)); + expect(editingStrategy?.editingDeltaState.oldText, 'foo bar baz'); + }); }); group('text editing styles', () { From 5e64ea60d43d4afd532b1d36c540c315be838f32 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Mon, 14 Aug 2023 18:15:12 +0200 Subject: [PATCH 3/4] Address nit --- lib/web_ui/lib/src/engine/text_editing/text_editing.dart | 5 ++--- lib/web_ui/test/engine/text_editing_test.dart | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart index eb0cd351963e2..72e977d52c0af 100644 --- a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart @@ -1361,7 +1361,6 @@ abstract class DefaultTextEditingStrategy with CompositionAwareMixin implements @override void setEditingState(EditingState? editingState) { lastEditingState = editingState; - _editingDeltaState = null; if (!isEnabled || !editingState!.isValid) { return; } @@ -1394,9 +1393,9 @@ abstract class DefaultTextEditingStrategy with CompositionAwareMixin implements lastEditingState = newEditingState; _editingDeltaState = newTextEditingDeltaState; onChange!(lastEditingState, _editingDeltaState); - // Flush delta after it has been sent to framework. - _editingDeltaState = null; } + // Flush delta after it has been sent to framework. + _editingDeltaState = null; } void handleBeforeInput(DomEvent event) { diff --git a/lib/web_ui/test/engine/text_editing_test.dart b/lib/web_ui/test/engine/text_editing_test.dart index de0a8ced01128..3ba4ca7ec2d3a 100644 --- a/lib/web_ui/test/engine/text_editing_test.dart +++ b/lib/web_ui/test/engine/text_editing_test.dart @@ -2810,6 +2810,7 @@ Future testMain() async { expect(editingStrategy!.editingDeltaState.oldText, 'foo bar'); editingStrategy!.setEditingState(EditingState(text: 'foo bar baz', baseOffset: 11, extentOffset: 11)); + input.dispatchEvent(createDomEvent('Event', 'input')); expect(editingStrategy?.editingDeltaState.oldText, 'foo bar baz'); }); }); From c6b362a77b4270c72815008cef70552c2a383870 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Mon, 14 Aug 2023 21:15:32 +0200 Subject: [PATCH 4/4] Update comment --- lib/web_ui/lib/src/engine/text_editing/text_editing.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart index 72e977d52c0af..8286a511d6e6a 100644 --- a/lib/web_ui/lib/src/engine/text_editing/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing/text_editing.dart @@ -1394,7 +1394,7 @@ abstract class DefaultTextEditingStrategy with CompositionAwareMixin implements _editingDeltaState = newTextEditingDeltaState; onChange!(lastEditingState, _editingDeltaState); } - // Flush delta after it has been sent to framework. + // Flush delta state. _editingDeltaState = null; }