ui/gtk/text.c

changeset 48
ae61523bce20
parent 45
ab71409644b0
--- a/ui/gtk/text.c	Thu Oct 03 18:24:13 2024 +0200
+++ b/ui/gtk/text.c	Thu Oct 03 18:52:51 2024 +0200
@@ -705,15 +705,24 @@
     free(pathtf);
 }
 
-void ui_path_button_clicked(GtkWidget *widget, UiEventData *event) {
-    UiPathElm *elm = event->customdata;
+void ui_path_button_clicked(GtkWidget *widget, UiEventDataExt *event) {
+    UiPathTextField *pathtf = event->customdata1;
+    for(int i=0;i<event->value1;i++) {
+        if(i <= event->value0) {
+            gtk_widget_remove_css_class(pathtf->current_path_buttons[i], "pathbar-button-inactive");
+        } else {
+            gtk_widget_add_css_class(pathtf->current_path_buttons[i], "pathbar-button-inactive");
+        }
+    }
+    
+    UiPathElm *elm = event->customdata0;
     cxmutstr path = cx_strdup(cx_strn(elm->path, elm->path_len));
     UiEvent evt;
     evt.obj = event->obj;
     evt.window = evt.obj->window;
     evt.document = evt.obj->ctx->document;
     evt.eventdata = elm->path;
-    evt.intval = event->value;
+    evt.intval = event->value0;
     event->callback(&evt, event->userdata);
     free(path.ptr);
 }
@@ -734,6 +743,8 @@
     pathtf->current_path = strdup(full_path);
     
     ui_pathelm_destroy(pathtf->current_pathelms, pathtf->current_nelm);
+    free(pathtf->current_path_buttons);
+    pathtf->current_path_buttons = calloc(nelm, sizeof(GtkWidget*));
     pathtf->current_pathelms = path_elm;
     pathtf->current_nelm = nelm;
     
@@ -743,15 +754,19 @@
 static GtkWidget* ui_path_elm_button(UiPathTextField *pathtf, UiPathElm *elm, int i) {
     cxmutstr name = cx_strdup(cx_strn(elm->name, elm->name_len));
     GtkWidget *button = gtk_button_new_with_label(name.ptr);
+    pathtf->current_path_buttons[i] = button;
     free(name.ptr);
 
     if(pathtf->onactivate) {
-        UiEventData *eventdata = malloc(sizeof(UiEventData));
+        UiEventDataExt *eventdata = malloc(sizeof(UiEventDataExt));
+        memset(eventdata, 0, sizeof(UiEventDataExt));
         eventdata->callback = pathtf->onactivate;
         eventdata->userdata = pathtf->onactivatedata;
         eventdata->obj = pathtf->obj;
-        eventdata->customdata = elm;
-        eventdata->value = i;
+        eventdata->customdata0 = elm;
+        eventdata->customdata1 = pathtf;
+        eventdata->value0 = i;
+        eventdata->value1 = pathtf->current_nelm;        
 
         g_signal_connect(
                 button,
@@ -920,7 +935,9 @@
         gtk_box_append(GTK_BOX(pathtf->hbox), button);
         
         if(i+1 < pathtf->current_nelm && cx_strcmp(cx_strn(elm->name, elm->name_len), CX_STR("/"))) {
-            gtk_box_append(GTK_BOX(pathtf->hbox), gtk_label_new("/"));
+            GtkWidget *path_separator = gtk_label_new("/");
+            gtk_widget_add_css_class(path_separator, "pathbar-button-inactive");
+            gtk_box_append(GTK_BOX(pathtf->hbox), path_separator);
         }
     }
     gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->hbox);

mercurial