fix some UiText functions using obj instead of data1 (GTK)

Tue, 26 May 2026 21:05:47 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 26 May 2026 21:05:47 +0200
changeset 1142
e2a6707aa1e0
parent 1141
e37824dd7281
child 1143
218ada0d4017

fix some UiText functions using obj instead of data1 (GTK)

ui/common/types.c file | annotate | diff | comparison | revisions
ui/gtk/text.c file | annotate | diff | comparison | revisions
--- a/ui/common/types.c	Sun May 24 20:44:08 2026 +0200
+++ b/ui/common/types.c	Tue May 26 21:05:47 2026 +0200
@@ -776,6 +776,14 @@
 }
 
 void uic_text_unbind(UiText *t) {
+    t->obj = NULL;
+    if(t->data1 && t->datatype == UI_TEXT_TYPE_BUFFER) {
+        // the binding functions all work with t->data1, not t->obj
+        // and we don't want to NULL them, because they will be still
+        // functional even without a widget binding
+        return;
+    }
+    
     t->set = NULL;
     t->get = NULL;
     t->getsubstr = NULL;
@@ -787,7 +795,6 @@
     t->setselection = NULL;
     t->length = NULL;
     t->remove = NULL;
-    t->obj = NULL;
 }
 
 void uic_range_unbind(UiRange *r) {
--- a/ui/gtk/text.c	Sun May 24 20:44:08 2026 +0200
+++ b/ui/gtk/text.c	Tue May 26 21:05:47 2026 +0200
@@ -406,7 +406,9 @@
 }
 
 void ui_textarea_showposition(UiText *text, int pos) {
-    ui_textarea_scroll_to(text->obj, pos);
+    if(text->obj) {
+        ui_textarea_scroll_to(text->obj, pos);
+    }
 }
 
 void ui_textarea_setselection(UiText *text, int begin, int end) {
@@ -564,6 +566,7 @@
     if(!value->data2) {
         value->data2 = ui_create_undomgr();
     }
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     if(!mgr->event) {
         return;
@@ -583,7 +586,7 @@
         }
     }
     
-    char *text = gtk_text_buffer_get_text(value->obj, start, end, FALSE);
+    char *text = gtk_text_buffer_get_text(buf, start, end, FALSE);
     
     UiTextBufOp *op = malloc(sizeof(UiTextBufOp));
     op->prev = NULL;
@@ -659,6 +662,7 @@
 }
 
 void ui_text_undo(UiText *value) {
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     
     if(mgr->cur) {
@@ -668,17 +672,17 @@
             case UI_TEXTBUF_INSERT: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_delete(value->obj, &begin, &end);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_delete(buf, &begin, &end);
                 break;
             }
             case UI_TEXTBUF_DELETE: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_insert(value->obj, &begin, op->text, op->len);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_insert(buf, &begin, op->text, op->len);
                 break;
             }
         }
@@ -688,6 +692,7 @@
 }
 
 void ui_text_redo(UiText *value) {
+    GtkTextBuffer *buf = value->data1;
     UiUndoMgr *mgr = value->data2;
     
     UiTextBufOp *elm = NULL;
@@ -706,17 +711,17 @@
             case UI_TEXTBUF_INSERT: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_insert(value->obj, &begin, op->text, op->len);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_insert(buf, &begin, op->text, op->len);
                 break;
             }
             case UI_TEXTBUF_DELETE: {
                 GtkTextIter begin;
                 GtkTextIter end;
-                gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start);
-                gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end);
-                gtk_text_buffer_delete(value->obj, &begin, &end);
+                gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start);
+                gtk_text_buffer_get_iter_at_offset(buf, &end, op->end);
+                gtk_text_buffer_delete(buf, &begin, &end);
                 break;
             }
         }

mercurial