From f1dc0616d3b35ee00d9999e5380f3776759dec70 Mon Sep 17 00:00:00 2001 From: Callum Bugajski <11320476+CallumBugajski@users.noreply.github.com> Date: Sat, 5 Apr 2025 14:17:29 +0100 Subject: [PATCH 1/2] AbstractTextInput: Revert old ReplaceTextOperation fix Linear: INSTL-182 --- .../gui/component/text/AbstractTextInput.kt | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt b/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt index 792b740..123b0ac 100644 --- a/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt +++ b/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt @@ -449,10 +449,12 @@ abstract class AbstractTextInput( val absoluteStart = LinePosition(0, 0, isVisual = true) val replaceTextOperation = ReplaceTextOperation( - absoluteStart, - LinePosition(visualLines.lastIndex, visualLines.last().length, isVisual = true), - newText, - true + AddTextOperation(newText, absoluteStart), + RemoveTextOperation( + absoluteStart, + LinePosition(visualLines.lastIndex, visualLines.last().length, isVisual = true), + selectAfterUndo = true + ) ) commitTextOperation(replaceTextOperation) } @@ -523,13 +525,16 @@ abstract class AbstractTextInput( return } + val addTextOperation = AddTextOperation(text, cursor) + if (hasSelection()) { - val replaceTextOperation = ReplaceTextOperation(selectionStart(), selectionEnd(), newText, true) + val removeTextOperation = RemoveTextOperation(selectionStart(), selectionEnd(), selectAfterUndo = true) + val replaceTextOperation = ReplaceTextOperation(addTextOperation, removeTextOperation) commitTextOperation(replaceTextOperation) return } - commitTextOperation(AddTextOperation(text, cursor)) + commitTextOperation(addTextOperation) } protected fun addText(newText: String, position: LinePosition) { @@ -1100,29 +1105,17 @@ abstract class AbstractTextInput( } protected inner class ReplaceTextOperation( - private val startPos: LinePosition, - private val endPos: LinePosition, - private val newText: String, - private val selectAfterUndo: Boolean, + val addTextOperation: AddTextOperation, + val removeTextOperation: RemoveTextOperation ) : TextOperation() { - private val textOld = getTextBetween(startPos, endPos) - private var removeStartPos: LinePosition = startPos - override fun redo() { - removeText(startPos, endPos) - removeStartPos = minOf(cursor, startPos) - addText(newText, removeStartPos) + removeTextOperation.redo() + addTextOperation.redo() } override fun undo() { - removeText(removeStartPos, removeStartPos.offsetColumn(newText.length)) - addText(textOld, startPos) - setCursorPosition(endPos.toVisualPos()) - if (selectAfterUndo) { - cursor = startPos - otherSelectionEnd = endPos - cursorNeedsRefocus = true - } + addTextOperation.undo() + removeTextOperation.undo() } } From 9570b57918a99013d371b71eaad49e12eec54596 Mon Sep 17 00:00:00 2001 From: Callum Bugajski <11320476+CallumBugajski@users.noreply.github.com> Date: Sat, 5 Apr 2025 14:36:46 +0100 Subject: [PATCH 2/2] AbstractTextInput: Add new ReplaceTextOperation fix Linear: INSTL-182 --- .../essential/installer/gui/component/text/AbstractTextInput.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt b/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt index 123b0ac..87859d7 100644 --- a/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt +++ b/installer/src/main/kotlin/gg/essential/installer/gui/component/text/AbstractTextInput.kt @@ -525,7 +525,7 @@ abstract class AbstractTextInput( return } - val addTextOperation = AddTextOperation(text, cursor) + val addTextOperation = AddTextOperation(text, selectionStart()) if (hasSelection()) { val removeTextOperation = RemoveTextOperation(selectionStart(), selectionEnd(), selectAfterUndo = true)