Lagrange [release]

DocumentWidget: "Paste Preceding Line" should be undoable

=> 4ae755de3ff4a37763aacc22ea119edab2099e84

diff --git a/res/about/version.gmi b/res/about/version.gmi
index 41b4fed7..905b0221 100644
--- a/res/about/version.gmi
+++ b/res/about/version.gmi
@@ -10,6 +10,7 @@
 * The "Miscellaneous Symbols and Arrows" Unicode block (U+2B00...U+2BFF) is accepted as custom link icons.
 * When mixing Emoji into preformatted text (glyphs are from different fonts), lay out the Emoji as double-wide characters to avoid overlapping.
 * Faster hover-scrolling of long popup menus.
+* Fixed "Paste Preceding Line" not being undoable.
 * Fixed lookup of missing glyphs. Fontpack priorities are now applied as documented.
 * Fixed animation issue with sidebars in the right side of split view.
 * Fixed a refresh issue that caused the first line of the page to be redrawn continuously, spiking CPU usage.
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c
index aa55f3f0..6a8d428a 100644
--- a/src/ui/inputwidget.c
+++ b/src/ui/inputwidget.c
@@ -1115,7 +1115,14 @@ static void updateBuffered_InputWidget_(iInputWidget *d) {
 }
 
 void setText_InputWidget(iInputWidget *d, const iString *text) {
+    setTextUndoable_InputWidget(d, text, iFalse);
+}
+
+void setTextUndoable_InputWidget(iInputWidget *d, const iString *text, iBool isUndoable) {
     if (!d) return;
+    if (isUndoable) {
+        pushUndo_InputWidget_(d);
+    }
     if (d->inFlags & isUrl_InputWidgetFlag) {
         if (prefs_App()->decodeUserVisibleURLs) {
             iString *enc = collect_String(copy_String(text));
@@ -1139,7 +1146,9 @@ void setText_InputWidget(iInputWidget *d, const iString *text) {
     iString *nfcText = collect_String(copy_String(text));
     normalize_String(nfcText);
 #if !LAGRANGE_USE_SYSTEM_TEXT_INPUT
-    clearUndo_InputWidget_(d);
+    if (!isUndoable) {
+        clearUndo_InputWidget_(d);
+    }
     splitToLines_(nfcText, &d->lines);
     iAssert(!isEmpty_Array(&d->lines));
     iForEach(Array, i, &d->lines) {
@@ -1175,6 +1184,12 @@ void setTextCStr_InputWidget(iInputWidget *d, const char *cstr) {
     delete_String(str);
 }
 
+void setTextUndoableCStr_InputWidget(iInputWidget *d, const char *cstr, iBool isUndoable) {
+    iString *str = newCStr_String(cstr);
+    setTextUndoable_InputWidget(d, str, isUndoable);
+    delete_String(str);
+}
+
 void selectAll_InputWidget(iInputWidget *d) {
 #if LAGRANGE_USE_SYSTEM_TEXT_INPUT
     if (d->sysCtrl) {
diff --git a/src/ui/inputwidget.h b/src/ui/inputwidget.h
index 5a61ec22..000fa4b7 100644
--- a/src/ui/inputwidget.h
+++ b/src/ui/inputwidget.h
@@ -46,6 +46,8 @@ void    setMode_InputWidget             (iInputWidget *, enum iInputMode mode);
 void    setMaxLen_InputWidget           (iInputWidget *, size_t maxLen);
 void    setText_InputWidget             (iInputWidget *, const iString *text);
 void    setTextCStr_InputWidget         (iInputWidget *, const char *cstr);
+void    setTextUndoable_InputWidget     (iInputWidget *, const iString *text, iBool isUndoable);
+void    setTextUndoableCStr_InputWidget (iInputWidget *, const char *cstr, iBool isUndoable);
 void    setFont_InputWidget             (iInputWidget *, int fontId);
 void    setContentPadding_InputWidget   (iInputWidget *, int left, int right); /* only affects the text entry */
 void    setLineLimits_InputWidget       (iInputWidget *, int minLines, int maxLines);
diff --git a/src/ui/util.c b/src/ui/util.c
index 31907721..5dd8a0bd 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -1778,7 +1778,7 @@ iBool valueInputHandler_(iWidget *dlg, const char *cmd) {
     }
     else if (equal_Command(cmd, "valueinput.set")) {
         iInputWidget *input = findChild_Widget(dlg, "input");
-        setTextCStr_InputWidget(input, suffixPtr_Command(cmd, "text"));
+        setTextUndoableCStr_InputWidget(input, suffixPtr_Command(cmd, "text"), iTrue);
         validate_InputWidget(input);
         return iTrue;
     }
Proxy Information
Original URL
gemini://git.skyjake.fi/lagrange/release/cdiff/4ae755de3ff4a37763aacc22ea119edab2099e84
Status Code
Success (20)
Meta
text/gemini; charset=utf-8
Capsule Response Time
63.724693 milliseconds
Gemini-to-HTML Time
0.339128 milliseconds

This content has been proxied by September (ba2dc).