ui/gtk/text.c

changeset 115
e57ca2747782
parent 112
c3f2f16fa4b8
--- a/ui/gtk/text.c	Sun Dec 07 20:00:33 2025 +0100
+++ b/ui/gtk/text.c	Sat Dec 13 15:58:58 2025 +0100
@@ -32,6 +32,7 @@
 
 #include "text.h"
 #include "container.h"
+#include "widget.h"
 
 #include <cx/printf.h>
 
@@ -53,9 +54,9 @@
         int sel = gtk_text_buffer_get_selection_bounds (buf, &begin, &end);
         if(sel != textview->last_selection_state) {
             if(sel) {
-                ui_set_group(textview->ctx, UI_GROUP_SELECTION);
+                ui_set_state(textview->ctx, UI_GROUP_SELECTION);
             } else {
-                ui_unset_group(textview->ctx, UI_GROUP_SELECTION);
+                ui_unset_state(textview->ctx, UI_GROUP_SELECTION);
             }
         }
         textview->last_selection_state = sel;
@@ -112,7 +113,7 @@
     
     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_widget_states(obj->ctx, text_area, args->states);
     
     gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR);
     g_signal_connect(
@@ -144,17 +145,7 @@
             GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS  
     SCROLLEDWINDOW_SET_CHILD(scroll_area, text_area);
     
-    if(args->width > 0 || args->height > 0) {
-        int width = args->width;
-        int height = args->height;
-        if(width == 0) {
-            width = -1;
-        }
-        if(height == 0) {
-            height = -1;
-        }
-        gtk_widget_set_size_request(scroll_area, width, height);
-    }
+    ui_widget_size_request(scroll_area, args->width, args->height);
     
     // font and padding
     //PangoFontDescription *font;
@@ -335,6 +326,10 @@
 
 
 void ui_textbuf_changed(GtkTextBuffer *textbuffer, UiTextArea *textarea) {
+    if(!ui_onchange_events_is_enabled()) {
+        return;
+    }
+    
     UiText *value = textarea->var->value;
     
     UiEvent e;
@@ -608,7 +603,7 @@
 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_widget_states(obj->ctx, textfield, args->states);
     
     UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
     
@@ -698,14 +693,18 @@
 }
 
 void ui_textfield_changed(GtkEditable *editable, UiTextField *textfield) {
-    UiString *value = textfield->var->value;
+    if(!ui_onchange_events_is_enabled()) {
+        return;
+    }
+    
+    UiString *value = textfield->var ? textfield->var->value : NULL;
     
     UiEvent e;
     e.obj = textfield->obj;
     e.window = e.obj->window;
     e.document = textfield->obj->ctx->document;
     e.eventdata = value;
-    e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE;
+    e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0;
     e.intval = 0;
     e.set = ui_get_setop();
     
@@ -720,12 +719,14 @@
 
 void ui_textfield_activate(GtkEntry* self, UiTextField *textfield) {
     if(textfield->onactivate) {
+        UiString *value = textfield->var ? textfield->var->value : NULL;
+        
         UiEvent e;
         e.obj = textfield->obj;
         e.window = e.obj->window;
         e.document = textfield->obj->ctx->document;
-        e.eventdata = NULL;
-        e.eventdatatype = 0;
+        e.eventdata = value;
+        e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0;
         e.intval = 0;
         e.set = ui_get_setop();
         textfield->onactivate(&e, textfield->onactivatedata);
@@ -956,6 +957,10 @@
     pathtf->stack = gtk_stack_new();
     gtk_widget_set_name(pathtf->stack, "path-textfield-box");
     
+    if(args->width > 0) {
+        gtk_widget_set_size_request(pathtf->stack, args->width, -1);
+    }
+    
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, pathtf->stack, &layout);
@@ -1127,6 +1132,10 @@
             G_CALLBACK(ui_path_textfield_destroy),
             pathtf);
     
+    if(args->width > 0) {
+        gtk_widget_set_size_request(eventbox, args->width, -1);
+    }
+    
     UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end;
     UiLayout layout = UI_ARGS2LAYOUT(args);
     ct->add(ct, eventbox, &layout);

mercurial