--- a/ui/common/types.c Mon Jan 06 22:22:55 2025 +0100 +++ b/ui/common/types.c Tue Feb 25 21:11:00 2025 +0100 @@ -231,6 +231,8 @@ for (int i = 0; i < model->columns; i++) { newmodel->titles[i] = model->titles[i] ? cx_strdup_a(a, cx_str(model->titles[i])).ptr : NULL; } + newmodel->columnsize = cxCalloc(a, model->columns, sizeof(int)); + memcpy(newmodel->columnsize, model->columnsize, model->columns*sizeof(int)); return newmodel; } @@ -239,6 +241,7 @@ const CxAllocator* a = ctx ? ctx->allocator : cxDefaultAllocator; cxFree(a, mi->types); cxFree(a, mi->titles); + cxFree(a, mi->columnsize); cxFree(a, mi); } @@ -301,8 +304,12 @@ void ui_int_set(UiInteger* i, int64_t value) { - if (i && i->set) { - i->set(i, value); + if (i) { + if (i->set) { + i->set(i, value); + } else { + i->value = value; + } } } @@ -315,8 +322,12 @@ } void ui_double_set(UiDouble* d, double value) { - if (d && d->set) { - d->set(d, value); + if (d) { + if (d->set) { + d->set(d, value); + } else { + d->value = value; + } } } @@ -330,8 +341,21 @@ } void ui_string_set(UiString* s, const char* value) { - if (s && s->set) { - s->set(s, value); + if (s) { + if (s->set) { + s->set(s, value); + } else { + if(s->value.free) { + s->value.free(s->value.ptr); + } + if (value) { + s->value.ptr = strdup(value); + s->value.free = free; + } else { + s->value.ptr = NULL; + s->value.free = NULL; + } + } } } @@ -345,8 +369,21 @@ } void ui_text_set(UiText* s, const char* value) { - if (s && s->set) { - s->set(s, value); + if (s) { + if (s->set) { + s->set(s, value); + } else { + if(s->value.free) { + s->value.free(s->value.ptr); + } + if (value) { + s->value.ptr = strdup(value); + s->value.free = free; + } else { + s->value.ptr = NULL; + s->value.free = NULL; + } + } } }