From a55065af9c1e31254e94675841027f0629602b1f Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 8 Aug 2022 16:11:52 +0200 Subject: [PATCH] widget: take deleted runes into account when applying Editor.MaxLen Signed-off-by: Elias Naur --- widget/editor.go | 4 ++-- widget/editor_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/widget/editor.go b/widget/editor.go index c7eb9306..023bd9d6 100644 --- a/widget/editor.go +++ b/widget/editor.go @@ -1262,11 +1262,12 @@ func (e *Editor) replace(start, end int, s string, addHistory bool) int { startPos := e.closestPosition(combinedPos{runes: start}) endPos := e.closestPosition(combinedPos{runes: end}) startOff := e.runeOffset(startPos.runes) + replaceSize := endPos.runes - startPos.runes el := e.Len() var sc int idx := 0 for idx < len(s) { - if e.MaxLen > 0 && el+sc >= e.MaxLen { + if e.MaxLen > 0 && el-replaceSize+sc >= e.MaxLen { s = s[:idx] break } @@ -1279,7 +1280,6 @@ func (e *Editor) replace(start, end int, s string, addHistory bool) int { sc++ } newEnd := startPos.runes + sc - replaceSize := endPos.runes - startPos.runes if addHistory { e.rr.Seek(int64(startOff), 0) diff --git a/widget/editor_test.go b/widget/editor_test.go index 4850536b..76034956 100644 --- a/widget/editor_test.go +++ b/widget/editor_test.go @@ -1019,7 +1019,7 @@ func TestEditor_MaxLen(t *testing.T) { Ops: new(op.Ops), Constraints: layout.Exact(image.Pt(100, 100)), Queue: newQueue( - key.EditEvent{Range: key.Range{Start: 0, End: 0}, Text: "1234"}, + key.EditEvent{Range: key.Range{Start: 0, End: 2}, Text: "1234"}, key.SelectionEvent{Start: 4, End: 4}, ), } @@ -1031,7 +1031,7 @@ func TestEditor_MaxLen(t *testing.T) { if got, want := e.Text(), "12345678"; got != want { t.Errorf("editor failed to cap EditEvent") } - if start, end := e.Selection(); start != 1 || end != 1 { + if start, end := e.Selection(); start != 3 || end != 3 { t.Errorf("editor failed to adjust SelectionEvent") } }