# HG changeset patch # User Olaf Wintermann # Date 1779565110 -7200 # Node ID e6fc42b4248d80476b3bdd093af11b6523718117 # Parent 2b1574ae72b5c18f526d4526aa5e79292fcc2d74 add action support for listview events diff -r 2b1574ae72b5 -r e6fc42b4248d ui/common/args.c --- a/ui/common/args.c Wed May 20 20:00:35 2026 +0200 +++ b/ui/common/args.c Sat May 23 21:38:30 2026 +0200 @@ -1887,6 +1887,10 @@ args->onactivatedata = userdata; } +void ui_list_args_set_onactivate_action(UiListArgs *args, const char *action) { + args->onactivate_action = strdup(action); +} + void ui_list_args_set_onselection(UiListArgs *args, ui_callback callback) { args->onselection = callback; } @@ -1895,6 +1899,10 @@ args->onselectiondata = userdata; } +void ui_list_args_set_onselection_action(UiListArgs *args, const char *action) { + args->onselection_action = strdup(action); +} + void ui_list_args_set_ondragstart(UiListArgs *args, ui_callback callback) { args->ondragstart = callback; } @@ -1903,6 +1911,10 @@ args->ondragstartdata = userdata; } +void ui_list_args_set_ondragstart_action(UiListArgs *args, const char *action) { + args->ondragstart_action = strdup(action); +} + void ui_list_args_set_ondragcomplete(UiListArgs *args, ui_callback callback) { args->ondragcomplete = callback; } @@ -1911,6 +1923,10 @@ args->ondragcompletedata = userdata; } +void ui_list_args_set_ondragcomplete_action(UiListArgs *args, const char *action) { + args->ondragcomplete_action = strdup(action); +} + void ui_list_args_set_ondrop(UiListArgs *args, ui_callback callback) { args->ondrop = callback; } @@ -1919,6 +1935,10 @@ args->ondropdata = userdata; } +void ui_list_args_set_ondrop_action(UiListArgs *args, const char *action) { + args->ondrop_action = strdup(action); +} + void ui_list_args_set_onsave(UiListArgs *args, ui_list_savefunc onsave) { args->onsave = onsave; } @@ -1951,6 +1971,11 @@ free((void*)args->name); free((void*)args->style_class); free((void*)args->varname); + free((void*)args->onactivate_action); + free((void*)args->onselection_action); + free((void*)args->ondragstart_action); + free((void*)args->ondragcomplete_action); + free((void*)args->ondrop_action); if(args->static_elements) { for(int i=0;istatic_nelm;i++) { free(args->static_elements[i]); diff -r 2b1574ae72b5 -r e6fc42b4248d ui/common/args.h --- a/ui/common/args.h Wed May 20 20:00:35 2026 +0200 +++ b/ui/common/args.h Sat May 23 21:38:30 2026 +0200 @@ -450,14 +450,19 @@ UIEXPORT void ui_list_args_set_getstyle_data(UiListArgs *args, void *userdata); UIEXPORT void ui_list_args_set_onactivate(UiListArgs *args, ui_callback callback); UIEXPORT void ui_list_args_set_onactivatedata(UiListArgs *args, void *userdata); +UIEXPORT void ui_list_args_set_onactivate_action(UiListArgs *args, const char *action); UIEXPORT void ui_list_args_set_onselection(UiListArgs *args, ui_callback callback); UIEXPORT void ui_list_args_set_onselectiondata(UiListArgs *args, void *userdata); +UIEXPORT void ui_list_args_set_onselection_action(UiListArgs *args, const char *action); UIEXPORT void ui_list_args_set_ondragstart(UiListArgs *args, ui_callback callback); UIEXPORT void ui_list_args_set_ondragstartdata(UiListArgs *args, void *userdata); +UIEXPORT void ui_list_args_set_ondragstart_action(UiListArgs *args, const char *action); UIEXPORT void ui_list_args_set_ondragcomplete(UiListArgs *args, ui_callback callback); UIEXPORT void ui_list_args_set_ondragcompletedata(UiListArgs *args, void *userdata); +UIEXPORT void ui_list_args_set_ondragcomplete_action(UiListArgs *args, const char *action); UIEXPORT void ui_list_args_set_ondrop(UiListArgs *args, ui_callback callback); UIEXPORT void ui_list_args_set_ondropdata(UiListArgs *args, void *userdata); +UIEXPORT void ui_list_args_set_ondrop_action(UiListArgs *args, const char *action); UIEXPORT void ui_list_args_set_onsave(UiListArgs *args, ui_list_savefunc onsave); UIEXPORT void ui_list_args_set_onsavedata(UiListArgs *args, void *userdata); UIEXPORT void ui_list_args_set_multiselection(UiListArgs *args, UiBool multiselection); diff -r 2b1574ae72b5 -r e6fc42b4248d ui/gtk/list.c --- a/ui/gtk/list.c Wed May 20 20:00:35 2026 +0200 +++ b/ui/gtk/list.c Sat May 23 21:38:30 2026 +0200 @@ -33,6 +33,7 @@ #include "../common/context.h" #include "../common/object.h" +#include "../common/action.h" #include "container.h" #include @@ -83,14 +84,19 @@ tableview->multiselection = args->multiselection; tableview->onactivate = args->onactivate; tableview->onactivatedata = args->onactivatedata; + tableview->onactivate_action = args->onactivate_action ? strdup(args->onactivate_action) : NULL; tableview->onselection = args->onselection; tableview->onselectiondata = args->onselectiondata; + tableview->onselection_action = args->onselection_action ? strdup(args->onselection_action) : NULL; tableview->ondragstart = args->ondragstart; tableview->ondragstartdata = args->ondragstartdata; + tableview->ondragstart_action = args->ondragstart_action ? strdup(args->ondragstart_action) : NULL; tableview->ondragcomplete = args->ondragcomplete; tableview->ondragcompletedata = args->ondragcompletedata; + tableview->ondragcomplete_action = args->ondragcomplete_action ? strdup(args->ondragcomplete_action) : NULL; tableview->ondrop = args->ondrop; tableview->ondropdata = args->ondropdata; + tableview->ondrop_action = args->ondrop_action ? strdup(args->ondrop_action) : NULL; tableview->selection.count = 0; tableview->selection.rows = NULL; tableview->current_row = -1; @@ -508,7 +514,7 @@ } // event handling - if(args->onactivate) { + if(args->onactivate || args->onactivate_action) { // columnview and listview can use the same callback function, because // the first parameter (which is technically a different pointer type) // is ignored @@ -806,7 +812,7 @@ return sel; } -static void listview_event(ui_callback cb, void *cbdata, UiListView *view) { +static void listview_event(ui_callback cb, void *cbdata, const char *action, UiListView *view) { UiEvent event; event.obj = view->obj; event.document = event.obj->ctx->document; @@ -818,6 +824,10 @@ if(cb) { cb(&event, cbdata); } + + if(action) { + uic_action_callback(&event, action); + } } static void listview_update_selection(UiListView *view) { @@ -868,14 +878,14 @@ if(view->selection.count == 0) { listview_update_selection(view); } - listview_event(view->onactivate, view->onactivatedata, view); + listview_event(view->onactivate, view->onactivatedata, view->onactivate_action, view); } void ui_listview_selection_changed(GtkSelectionModel* self, guint position, guint n_items, gpointer userdata) { UiListView *view = userdata; listview_update_selection(view); if(ui_selection_events_is_enabled()) { - listview_event(view->onselection, view->onselectiondata, view); + listview_event(view->onselection, view->onselectiondata, view->onselection_action, view); } } @@ -2171,6 +2181,11 @@ */ void ui_listview_destroy(GtkWidget *w, UiListView *v) { + free(v->onactivate_action); + free(v->onselection_action); + free(v->ondragstart_action); + free(v->ondragcomplete_action); + free(v->ondrop_action); //gtk_tree_view_set_model(GTK_TREE_VIEW(w), NULL); if(v->var) { ui_destroy_boundvar(v->obj->ctx, v->var); diff -r 2b1574ae72b5 -r e6fc42b4248d ui/gtk/list.h --- a/ui/gtk/list.h Wed May 20 20:00:35 2026 +0200 +++ b/ui/gtk/list.h Sat May 23 21:38:30 2026 +0200 @@ -81,14 +81,19 @@ #endif ui_callback onactivate; void *onactivatedata; + char *onactivate_action; ui_callback onselection; void *onselectiondata; + char *onselection_action; ui_callback ondragstart; void *ondragstartdata; + char *ondragstart_action; ui_callback ondragcomplete; void *ondragcompletedata; + char *ondragcomplete_action; ui_callback ondrop; void *ondropdata; + char *ondrop_action; ui_list_savefunc onsave; void *onsavedata; UiListSelection selection; diff -r 2b1574ae72b5 -r e6fc42b4248d ui/ui/list.h --- a/ui/ui/list.h Wed May 20 20:00:35 2026 +0200 +++ b/ui/ui/list.h Sat May 23 21:38:30 2026 +0200 @@ -166,14 +166,19 @@ void *getstyledata; ui_callback onactivate; void *onactivatedata; + const char *onactivate_action; ui_callback onselection; void *onselectiondata; + const char *onselection_action; ui_callback ondragstart; void *ondragstartdata; + const char *ondragstart_action; ui_callback ondragcomplete; void *ondragcompletedata; + const char *ondragcomplete_action; ui_callback ondrop; void *ondropdata; + const char *ondrop_action; UiBool multiselection; UiBool hide_header; UiMenuBuilder *contextmenu;