ui/gtk/text.c

changeset 108
77254bd6dccb
parent 103
6606616eca9f
child 109
c3dfcb8f0be7
--- 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;

mercurial