ui/qt/model.cpp

changeset 637
6a2c744fe042
parent 634
14016ce0a434
child 659
d6baaa93f7be
--- 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
                     }
                 }
             }

mercurial