--- a/ui/gtk/text.c Sat Apr 05 17:57:04 2025 +0200 +++ b/ui/gtk/text.c Sun Jul 20 22:04:39 2025 +0200 @@ -107,13 +107,13 @@ return buf; } -UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { +UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { UiObject* current = uic_current_obj(obj); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_TEXT); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_TEXT); GtkWidget *text_area = gtk_text_view_new(); - ui_set_name_and_style(text_area, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, text_area, args.groups); + ui_set_name_and_style(text_area, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, text_area, args->groups); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR); g_signal_connect( @@ -127,8 +127,8 @@ uitext->ctx = obj->ctx; uitext->var = var; uitext->last_selection_state = 0; - uitext->onchange = args.onchange; - uitext->onchangedata = args.onchangedata; + uitext->onchange = args->onchange; + uitext->onchangedata = args->onchangedata; g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); @@ -155,8 +155,8 @@ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2); // add - UI_APPLY_LAYOUT1(current, args); - current->container->add(current->container, scroll_area, TRUE); + UI_APPLY_LAYOUT2(current, args); + current->container->add(current->container, scroll_area); // bind value if(var) { @@ -330,6 +330,7 @@ e.window = e.obj->window; e.document = textarea->ctx->document; e.eventdata = value; + e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE; e.intval = 0; e.set = ui_get_setop(); @@ -592,21 +593,21 @@ -static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs args) { +static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) { GtkWidget *textfield = gtk_entry_new(); - ui_set_name_and_style(textfield, args.name, args.style_class); - ui_set_widget_groups(obj->ctx, textfield, args.groups); + ui_set_name_and_style(textfield, args->name, args->style_class); + ui_set_widget_groups(obj->ctx, textfield, args->groups); UiObject* current = uic_current_obj(obj); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); UiTextField *uitext = malloc(sizeof(UiTextField)); uitext->obj = obj; uitext->var = var; - uitext->onchange = args.onchange; - uitext->onchangedata = args.onchangedata; - uitext->onactivate = args.onactivate; - uitext->onactivatedata = args.onactivatedata; + uitext->onchange = args->onchange; + uitext->onchangedata = args->onchangedata; + uitext->onactivate = args->onactivate; + uitext->onactivatedata = args->onactivatedata; g_signal_connect( textfield, @@ -614,10 +615,10 @@ G_CALLBACK(ui_textfield_destroy), uitext); - if(args.width > 0) { + if(args->width > 0) { // TODO: gtk4 #if GTK_MAJOR_VERSION <= 3 - gtk_entry_set_width_chars(GTK_ENTRY(textfield), args.width); + gtk_entry_set_width_chars(GTK_ENTRY(textfield), args->width); #endif } if(frameless) { @@ -628,8 +629,8 @@ gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); } - UI_APPLY_LAYOUT1(current, args); - current->container->add(current->container, textfield, FALSE); + UI_APPLY_LAYOUT2(current, args); + current->container->add(current->container, textfield); if(var) { UiString *value = var->value; @@ -647,7 +648,7 @@ value->obj = GTK_ENTRY(textfield); } - if(args.onchange || var) { + if(args->onchange || var) { g_signal_connect( textfield, "changed", @@ -655,7 +656,7 @@ uitext); } - if(args.onactivate) { + if(args->onactivate) { g_signal_connect( textfield, "activate", @@ -666,15 +667,15 @@ return textfield; } -UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) { +UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { return create_textfield(obj, FALSE, FALSE, args); } -UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, TRUE, FALSE, args); } -UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) { +UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) { return create_textfield(obj, FALSE, TRUE, args); } @@ -691,6 +692,7 @@ e.window = e.obj->window; e.document = textfield->obj->ctx->document; e.eventdata = value; + e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE; e.intval = 0; e.set = ui_get_setop(); @@ -710,6 +712,7 @@ e.window = e.obj->window; e.document = textfield->obj->ctx->document; e.eventdata = NULL; + e.eventdatatype = 0; e.intval = 0; e.set = ui_get_setop(); textfield->onactivate(&e, textfield->onactivatedata); @@ -807,6 +810,7 @@ evt.window = evt.obj->window; evt.document = evt.obj->ctx->document; evt.eventdata = elm->path; + evt.eventdatatype = UI_EVENT_DATA_STRING; evt.intval = event->value0; evt.set = ui_get_setop(); event->callback(&evt, event->userdata); @@ -888,6 +892,7 @@ evt.window = obj->window; evt.document = obj->ctx->document; evt.eventdata = (char*)text; + evt.eventdatatype = UI_EVENT_DATA_STRING; evt.intval = -1; pathtf->onactivate(&evt, pathtf->onactivatedata); } @@ -915,22 +920,22 @@ return FALSE; } -UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { +UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { UiObject* current = uic_current_obj(obj); UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); memset(pathtf, 0, sizeof(UiPathTextField)); pathtf->obj = obj; - pathtf->getpathelm = args.getpathelm; - pathtf->getpathelmdata = args.getpathelmdata; - pathtf->onactivate = args.onactivate; - pathtf->onactivatedata = args.onactivatedata; - pathtf->ondragcomplete = args.ondragcomplete; - pathtf->ondragcompletedata = args.ondragcompletedata; - pathtf->ondragstart = args.ondragstart; - pathtf->ondragstartdata = args.ondragstartdata; - pathtf->ondrop = args.ondrop; - pathtf->ondropdata = args.ondropsdata; + pathtf->getpathelm = args->getpathelm; + pathtf->getpathelmdata = args->getpathelmdata; + pathtf->onactivate = args->onactivate; + pathtf->onactivatedata = args->onactivatedata; + pathtf->ondragcomplete = args->ondragcomplete; + pathtf->ondragcompletedata = args->ondragcompletedata; + pathtf->ondragstart = args->ondragstart; + pathtf->ondragstartdata = args->ondragstartdata; + pathtf->ondrop = args->ondrop; + pathtf->ondropdata = args->ondropsdata; if(!pathtf->getpathelm) { pathtf->getpathelm = default_pathelm_func; @@ -940,8 +945,8 @@ pathtf->stack = gtk_stack_new(); gtk_widget_set_name(pathtf->stack, "path-textfield-box"); - UI_APPLY_LAYOUT1(current, args); - current->container->add(current->container, pathtf->stack, FALSE); + UI_APPLY_LAYOUT2(current, args); + current->container->add(current->container, pathtf->stack); pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); pathtf->entry = gtk_entry_new(); @@ -973,7 +978,7 @@ gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); if (var) { UiString* value = (UiString*)var->value; value->obj = pathtf; @@ -1076,22 +1081,22 @@ return bb; } -UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { +UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { UiObject* current = uic_current_obj(obj); UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); memset(pathtf, 0, sizeof(UiPathTextField)); pathtf->obj = obj; - pathtf->getpathelm = args.getpathelm; - pathtf->getpathelmdata = args.getpathelmdata; - pathtf->onactivate = args.onactivate; - pathtf->onactivatedata = args.onactivatedata; - pathtf->ondragcomplete = args.ondragcomplete; - pathtf->ondragcompletedata = args.ondragcompletedata; - pathtf->ondragstart = args.ondragstart; - pathtf->ondragstartdata = args.ondragstartdata; - pathtf->ondrop = args.ondrop; - pathtf->ondropdata = args.ondropsdata; + pathtf->getpathelm = args->getpathelm; + pathtf->getpathelmdata = args->getpathelmdata; + pathtf->onactivate = args->onactivate; + pathtf->onactivatedata = args->onactivatedata; + pathtf->ondragcomplete = args->ondragcomplete; + pathtf->ondragcompletedata = args->ondragcompletedata; + pathtf->ondragstart = args->ondragstart; + pathtf->ondragstartdata = args->ondragstartdata; + pathtf->ondrop = args->ondrop; + pathtf->ondropdata = args->ondropsdata; if(!pathtf->getpathelm) { pathtf->getpathelm = default_pathelm_func; @@ -1112,7 +1117,7 @@ G_CALLBACK(ui_path_textfield_destroy), pathtf); - UI_APPLY_LAYOUT1(current, args); + UI_APPLY_LAYOUT2(current, args); current->container->add(current->container, eventbox, FALSE); // hbox as parent for the GtkEntry and GtkButtonBox @@ -1137,7 +1142,7 @@ G_CALLBACK(ui_path_textfield_key_press), pathtf); - UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); + UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); if (var) { UiString* value = (UiString*)var->value; value->obj = pathtf;