ui/gtk/text.c

changeset 1149
76b7664f951e
parent 1142
e2a6707aa1e0
child 1153
f15375e0480c
--- a/ui/gtk/text.c	Thu May 28 21:18:33 2026 +0200
+++ b/ui/gtk/text.c	Fri May 29 15:40:31 2026 +0200
@@ -97,11 +97,24 @@
 static GtkTextBuffer* create_textbuffer(UiTextArea *textarea) {
     GtkTextBuffer *buf = gtk_text_buffer_new(NULL);
     if(textarea) {
+        /*
         g_signal_connect(
                 buf,
                 "changed",
                 G_CALLBACK(ui_textbuf_changed),
                 textarea);
+        */
+        
+        g_signal_connect(
+                buf,
+                "insert-text",
+                G_CALLBACK(ui_textbuf_changed_insert),
+                textarea);
+        g_signal_connect(
+                buf,
+                "delete-range",
+                G_CALLBACK(ui_textbuf_changed_delete),
+                textarea); 
     } else {
         fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
     }
@@ -450,8 +463,41 @@
 }
 
 
+void ui_textbuf_changed_insert(
+        GtkTextBuffer *textbuffer,
+        GtkTextIter *location,
+        char *text,
+        int length,
+        UiTextArea *textarea)
+{
+    UiTextChangeEventData event;
+    event.type = UI_TEXT_INSERT;
+    event.begin = gtk_text_iter_get_offset(location);
+    event.end = event.begin + length;
+    event.text = text;
+    event.length = length;
+    ui_textbuf_changed(textarea, &event);
+}
 
-void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea) {
+void ui_textbuf_changed_delete(
+        GtkTextBuffer *self,
+        const GtkTextIter *start,
+        const GtkTextIter *end,
+        UiTextArea *textarea)
+{
+    UiTextChangeEventData event;
+    event.type = UI_TEXT_DELETE;
+    event.begin = gtk_text_iter_get_offset(start);
+    event.end = gtk_text_iter_get_offset(end);
+    event.text = NULL;
+    event.length = 0;
+    ui_textbuf_changed(textarea, &event);
+}
+
+
+// void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea)
+
+void ui_textbuf_changed(UiTextArea *textarea, UiTextChangeEventData *data) {
     if(!ui_onchange_events_is_enabled()) {
         return;
     }
@@ -462,8 +508,8 @@
     e.obj = textarea->obj;
     e.window = e.obj->window;
     e.document = textarea->ctx->document;
-    e.eventdata = value;
-    e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE;
+    e.eventdata = data;
+    e.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED;
     e.intval = 0;
     e.set = ui_get_setop();
     

mercurial