ui/gtk/text.c

changeset 1068
1c79dbd248f4
parent 1067
4243fcc0aa5c
--- a/ui/gtk/text.c	Sun Feb 01 18:38:06 2026 +0100
+++ b/ui/gtk/text.c	Mon Feb 02 20:59:13 2026 +0100
@@ -186,6 +186,7 @@
         value->set = ui_textarea_set;
         value->getsubstr = ui_textarea_getsubstr;
         value->insert = ui_textarea_insert;
+        value->replace = ui_textarea_replace;
         value->setposition = ui_textarea_setposition;
         value->position = ui_textarea_position;
         value->showposition = ui_textarea_showposition;
@@ -287,7 +288,7 @@
     return str;
 }
 
-void ui_textarea_insert(UiText *text, int pos, char *str) {
+void ui_textarea_insert(UiText *text, int pos, const char *str) {
     GtkTextIter offset;
     gtk_text_buffer_get_iter_at_offset(text->data1, &offset, pos);
     gtk_text_buffer_insert(text->data1, &offset, str, -1);
@@ -298,6 +299,20 @@
     text->value.free = NULL;
 }
 
+void ui_textarea_replace(UiText *text, int begin, int end, const char *replacement) {
+    GtkTextBuffer *buffer = text->data1;
+    GtkTextIter begin_offset;
+    GtkTextIter end_offset;
+    gtk_text_buffer_get_iter_at_offset(buffer, &begin_offset, begin);
+    gtk_text_buffer_get_iter_at_offset(buffer, &end_offset, end);
+    gtk_text_buffer_begin_user_action(buffer);
+    gtk_text_buffer_delete(buffer, &begin_offset, &end_offset);
+    if(replacement) {
+        gtk_text_buffer_insert(buffer, &begin_offset, replacement, -1);
+    }
+    gtk_text_buffer_end_user_action(buffer);
+}
+
 void ui_textarea_setposition(UiText *text, int pos) {
     GtkTextIter iter;
     gtk_text_buffer_get_iter_at_offset(text->data1, &iter, pos);

mercurial