diff -r 62921b370c60 -r ee49d1852a5f ui/motif/text.c --- 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); }