# HG changeset patch # User Olaf Wintermann # Date 1779822347 -7200 # Node ID e2a6707aa1e0f3b1b0e49e63e835b68a25a8cf6b # Parent e37824dd72812f6aa035e6b1c748cf34f5345a59 fix some UiText functions using obj instead of data1 (GTK) diff -r e37824dd7281 -r e2a6707aa1e0 ui/common/types.c --- 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) { diff -r e37824dd7281 -r e2a6707aa1e0 ui/gtk/text.c --- 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; } }