Tue, 19 Aug 2025 14:13:43 +0200
implement sourcelist item button (GTK)
| .hgignore | file | annotate | diff | comparison | revisions | |
| ui/gtk/list.c | file | annotate | diff | comparison | revisions |
--- a/.hgignore Tue Aug 19 12:59:00 2025 +0200 +++ b/.hgignore Tue Aug 19 14:13:43 2025 +0200 @@ -1,6 +1,7 @@ relre:^build/.*$ relre:^config.mk$ relre:^core$ +relre:^gmon.out$ relre:^make/vs/.vs/.* relre:^make/vs/packages/.* relre:^make/vs/.*vcxproj\.user @@ -9,4 +10,4 @@ relre:^ui/winui/Generated Files/.* relre:^.qmake.stash$ relre:^.idea/.* -relre:^compile_commands.json$ \ No newline at end of file +relre:^compile_commands.json$
--- a/ui/gtk/list.c Tue Aug 19 12:59:00 2025 +0200 +++ b/ui/gtk/list.c Tue Aug 19 14:13:43 2025 +0200 @@ -39,6 +39,7 @@ #include <cx/linked_list.h> #include "list.h" +#include "button.h" #include "icon.h" #include "menu.h" #include "dnd.h" @@ -1969,6 +1970,31 @@ } } +static void listbox_button_clicked(GtkWidget *widget, UiEventDataExt *data) { + UiListBoxSubList *sublist = data->customdata0; + + UiSubListEventData eventdata; + eventdata.list = sublist->var->value; + eventdata.sublist_index = sublist->index; + eventdata.row_index = data->value0; + eventdata.sublist_userdata = sublist->userdata; + eventdata.row_data = eventdata.list->get(eventdata.list, eventdata.row_index); + eventdata.event_data = data->customdata2; + + UiEvent event; + event.obj = data->obj; + event.window = event.obj->window; + event.document = event.obj->ctx->document; + event.eventdata = &eventdata; + event.eventdatatype = UI_EVENT_DATA_SUBLIST; + event.intval = data->value0; + event.set = ui_get_setop(); + + if(data->callback2) { + data->callback2(&event, data->userdata2); + } +} + static GtkWidget* create_listbox_row(UiListBox *listbox, UiListBoxSubList *sublist, UiSubListItem *item, int index) { GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); if(item->icon) { @@ -1978,7 +2004,9 @@ GtkWidget *label = gtk_label_new(item->label); gtk_widget_set_halign(label, GTK_ALIGN_START); BOX_ADD_EXPAND(hbox, label); - // TODO: badge, button + if(item->badge) { + + } GtkWidget *row = gtk_list_box_row_new(); LISTBOX_ROW_SET_CHILD(row, hbox); @@ -2003,6 +2031,22 @@ g_object_set_data(G_OBJECT(row), "ui-listbox-row-eventdata", event); + // TODO: badge + // button + if(item->button_icon || item->button_label) { + GtkWidget *button = gtk_button_new(); + gtk_button_set_label(GTK_BUTTON(button), item->button_label); + ui_button_set_icon_name(button, item->button_icon); + WIDGET_ADD_CSS_CLASS(button, "flat"); + BOX_ADD(hbox, button); + g_signal_connect( + button, + "clicked", + G_CALLBACK(listbox_button_clicked), + event + ); + } + return row; }