ui/gtk/list.c

changeset 65
48f43130b4a2
parent 60
ee4e4742391e
--- a/ui/gtk/list.c	Mon Oct 28 07:37:45 2024 +0100
+++ b/ui/gtk/list.c	Mon Oct 28 15:20:58 2024 +0100
@@ -202,22 +202,39 @@
     // bind var
     list->update = ui_listview_update;
     list->getselection = ui_listview_getselection;
+    list->setselection = ui_listview_setselection;
     list->obj = listview;
     
     // add callback
+    UiTreeEventData *event = malloc(sizeof(UiTreeEventData));
+    event->obj = obj;
+    event->activate = args.onactivate;
+    event->activatedata = args.onactivatedata;
+    event->selection = args.onselection;
+    event->selectiondata = args.onselectiondata;
+    g_signal_connect(
+            view,
+            "destroy",
+            G_CALLBACK(ui_destroy_userdata),
+            event);
+    
     if(args.onactivate) {
-        UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData));
-        event->obj = obj;
-        event->activatedata = args.onactivatedata;
-        event->activate = args.onactivate;
-        event->selection = NULL;
-
         g_signal_connect(
                 view,
                 "row-activated",
                 G_CALLBACK(ui_listview_activate_event),
                 event);
     }
+    if(args.onselection) {
+        GtkTreeSelection *selection = gtk_tree_view_get_selection(
+                GTK_TREE_VIEW(view));
+        g_signal_connect(
+                selection,
+                "changed",
+                G_CALLBACK(ui_listview_selection_event),
+                event);
+    }
+    
     
     // add widget to the current container
     GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
@@ -492,6 +509,14 @@
     return selection;
 }
 
+void ui_listview_setselection(UiList *list, UiListSelection selection) {
+    UiListView *view = list->obj;
+    GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view->widget));
+    GtkTreePath *path = gtk_tree_path_new_from_indicesv(selection.rows, selection.count);
+    gtk_tree_selection_select_path(sel, path);
+    //g_object_unref(path);
+}
+
 void ui_listview_destroy(GtkWidget *w, UiListView *v) {
     gtk_tree_view_set_model(GTK_TREE_VIEW(w), NULL);
     ui_destroy_boundvar(v->obj->ctx, v->var);

mercurial