Tue, 26 May 2026 21:05:47 +0200
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; } }