diff -r 3ac472683246 -r ae61523bce20 ui/gtk/text.c --- 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;ivalue1;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);