--- a/ui/qt/model.cpp Wed Jun 25 23:15:34 2025 +0200 +++ b/ui/qt/model.cpp Thu Jun 26 18:28:20 2025 +0200 @@ -28,9 +28,9 @@ #include "model.h" -static void* model_getvalue(UiModel *model, UiList *list, void *elm, int row, int col) { +static void* model_getvalue(UiModel *model, UiList *list, void *elm, int row, int col, UiBool *freeResult) { if(model->getvalue2) { - return model->getvalue2(list, elm, row, col, model->getvalue2data); + return model->getvalue2(list, elm, row, col, model->getvalue2data, freeResult); } else if(model->getvalue) { return model->getvalue(elm, col); } @@ -78,9 +78,14 @@ UiList *ls = (UiList*)var->value; void *rowData = ls->get(ls, index.row()); if(rowData && getvalue) { - void *value = getvalue(ls, rowData, index.row(), 0, getvaluedata); + UiBool freeResult = false; + void *value = getvalue(ls, rowData, index.row(), 0, getvaluedata, &freeResult); if(value) { - return QString::fromUtf8((char*)value); + auto qs = QString::fromUtf8((char*)value); + if(freeResult) { + free(value); + } + return qs; } } } @@ -155,12 +160,17 @@ void *rowData = ls->get(ls, index.row()); if(rowData) { int col = index.column(); - void *value = model_getvalue(model, ls, rowData, index.row(), col); + UiBool freeResult = false; + void *value = model_getvalue(model, ls, rowData, index.row(), col, &freeResult); if(value) { UiModelType type = model->types[col]; switch(type) { case UI_STRING: { - return QString::fromUtf8((char*)value); + auto qs = QString::fromUtf8((char*)value); + if(freeResult) { + free(value); + } + return qs; } case UI_STRING_FREE: { QString s = QString::fromUtf8((char*)value); @@ -172,13 +182,13 @@ return QString::number(i); } case UI_ICON: { - break; + break; // TODO } case UI_ICON_TEXT: { - break; + break; // TODO } case UI_ICON_TEXT_FREE: { - break; + break; // TODO } } }