ui/gtk/text.c

changeset 506
02ddf1044cbc
parent 505
8002be179741
--- a/ui/gtk/text.c	Mon Mar 24 18:45:32 2025 +0100
+++ b/ui/gtk/text.c	Mon Mar 24 18:54:36 2025 +0100
@@ -93,6 +93,20 @@
 }
 #endif
 
+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);
+    } else {
+        fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
+    }
+    return buf;
+}
+
 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
     UiObject* current = uic_current_obj(obj);
     UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_TEXT);
@@ -116,18 +130,14 @@
     uitext->onchange = args.onchange;
     uitext->onchangedata = args.onchangedata;
     
+    g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
+    
     g_signal_connect(
                 text_area,
                 "destroy",
                 G_CALLBACK(ui_textarea_destroy),
                 uitext);
     
-    g_signal_connect(
-            buf,
-            "changed",
-            G_CALLBACK(ui_textbuf_changed),
-            uitext);
-    
     GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
     gtk_scrolled_window_set_policy(
             GTK_SCROLLED_WINDOW(scroll_area),
@@ -155,7 +165,7 @@
         if(value->data1 && value->datatype == UI_TEXT_TYPE_BUFFER) {
             buf = value->data1;
         } else {
-            buf = gtk_text_buffer_new(NULL);
+            buf = create_textbuffer(uitext);
             if(value->value.ptr) {
                 gtk_text_buffer_set_text(buf, value->value.ptr, -1);
                 value->value.free(value->value.ptr);
@@ -207,7 +217,7 @@
 void ui_textarea_restore(UiText *text) {
     GtkWidget *textarea = text->obj;
     if(!text->data1) {
-        text->data1 = gtk_text_buffer_new(NULL);
+        text->data1 = create_textbuffer(g_object_get_data(G_OBJECT(textarea), "ui_textarea"));
         text->datatype = UI_TEXT_TYPE_BUFFER;
     }
     gtk_text_view_set_buffer(GTK_TEXT_VIEW(textarea), text->data1);
@@ -798,7 +808,7 @@
     evt.document = evt.obj->ctx->document;
     evt.eventdata = elm->path;
     evt.intval = event->value0;
-    e.set = ui_get_setop();
+    evt.set = ui_get_setop();
     event->callback(&evt, event->userdata);
     free(path.ptr);
 }

mercurial