ui/motif/text.c

changeset 153
ee49d1852a5f
parent 131
774b741984a2
child 154
8a4451fcb736
--- a/ui/motif/text.c	Sun Jan 21 12:13:09 2018 +0100
+++ b/ui/motif/text.c	Sun Jul 01 19:03:26 2018 +0200
@@ -60,9 +60,9 @@
     
     // bind value
     if(value) {
-        if(value->value) {
-            XmTextSetString(text_area, value->value);
-            XtFree(value->value);
+        if(value->value.ptr) {
+            XmTextSetString(text_area, value->value.ptr);
+            value->value.free(value->value.ptr);
         }
         
         value->set = ui_textarea_set;
@@ -73,7 +73,7 @@
         value->position = ui_textarea_position;
         value->selection = ui_textarea_selection;
         value->length = ui_textarea_length;
-        value->value = NULL;
+        value->value.ptr = NULL;
         value->obj = text_area;
         
         if(!value->undomgr) {
@@ -91,7 +91,7 @@
 }
 
 UIWIDGET ui_textarea_nv(UiObject *obj, char *varname) {
-    UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_TEXT);
+    UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_TEXT);
     if(var) {
         UiText *value = var->value;
         return ui_textarea(obj, value);
@@ -102,38 +102,40 @@
 }
 
 char* ui_textarea_get(UiText *text) {
-    if(text->value) {
-        XtFree(text->value);
+    if(text->value.ptr) {
+        text->value.free(text->value.ptr);
     }
     char *str = XmTextGetString(text->obj);
-    text->value = str;
+    text->value.ptr = str;
+    text->value.free = (ui_freefunc)XtFree;
     return str;
 }
 
 void ui_textarea_set(UiText *text, char *str) {
-    if(text->value) {
-        XtFree(text->value);
+    if(text->value.ptr) {
+        text->value.free(text->value.ptr);
     }
-    text->value = NULL;
+    text->value.ptr = NULL;
     XmTextSetString(text->obj, str);
 }
 
 char* ui_textarea_getsubstr(UiText *text, int begin, int end) {
-    if(text->value) {
-        XtFree(text->value);
+    if(text->value.ptr) {
+        text->value.free(text->value.ptr);
     }
     int length = end - begin;
     char *str = XtMalloc(length + 1);
     XmTextGetSubstring(text->obj, begin, length, length + 1, str);
-    text->value = str;
+    text->value.ptr = str;
+    text->value.free = (ui_freefunc)XtFree;
     return str;
 }
 
 void ui_textarea_insert(UiText *text, int pos, char *str) {
-    if(text->value) {
-        XtFree(text->value);
+    if(text->value.ptr) {
+        text->value.free(text->value.ptr);
     }
-    text->value = NULL;
+    text->value.ptr = NULL;
     XmTextInsert(text->obj, pos, str);
 }
 
@@ -162,10 +164,11 @@
     if(text->set) {
         text->set(text, str);
     } else {
-        if(text->value) {
-            XtFree(text->value);
+        if(text->value.ptr) {
+            text->value.free(text->value.ptr);
         }
-        text->value = XtNewString(str);
+        text->value.ptr = XtNewString(str);
+        text->value.free = (ui_freefunc)XtFree;
     }
 }
 
@@ -173,7 +176,7 @@
     if(text->get) {
         return text->get(text);
     } else {
-        return text->value;
+        return text->value.ptr;
     }
 }
 
@@ -382,14 +385,14 @@
     
     // bind value
     if(value) {
-        if(value->value) {
-            XmTextSetString(textfield, value->value);
-            XtFree(value->value);
+        if(value->value.ptr) {
+            XmTextSetString(textfield, value->value.ptr);
+            value->value.free(value->value.ptr);
         }
         
         value->set = ui_textfield_set;
         value->get = ui_textfield_get;
-        value->value = NULL;
+        value->value.ptr = NULL;
         value->obj = textfield;
     }
     
@@ -397,7 +400,7 @@
 }
 
 static UIWIDGET create_textfield_nv(UiObject *obj, int width, UiBool frameless, UiBool password, char *varname) {
-    UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_STRING);
+    UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_STRING);
     if(var) {
         UiString *value = var->value;
         return ui_textfield(obj, value);
@@ -449,19 +452,20 @@
 
 
 char* ui_textfield_get(UiString *str) {
-    if(str->value) {
-        XtFree(str->value);
+    if(str->value.ptr) {
+        str->value.free(str->value.ptr);
     }
     char *value = XmTextGetString(str->obj);
-    str->value = value;
+    str->value.ptr = value;
+    str->value.free = (ui_freefunc)XtFree;
     return value;
 }
 
 void ui_textfield_set(UiString *str, char *value) {
-    if(str->value) {
-        XtFree(str->value);
+    if(str->value.ptr) {
+        str->value.free(str->value.ptr);
     }
-    str->value = NULL;
+    str->value.ptr = NULL;
     XmTextSetString(str->obj, value);
 }
 

mercurial