[zenity/gtk4-port] tree: clicking row should check radio/checkboxes



commit 7db5575f2bba510a88aa56d0bcb295b9a07ab104
Author: Logan Rathbone <poprocks gmail com>
Date:   Mon Aug 16 00:09:06 2021 -0400

    tree: clicking row should check radio/checkboxes
    
    Forward-port from gtk3 (master) branch.
    Addresses #37
    Merge and fix conflicts.

 src/tree.c | 51 +++++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 24 deletions(-)
---
diff --git a/src/tree.c b/src/tree.c
index 5f995835..6890452c 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -68,16 +68,15 @@ zenity_tree_dialog_untoggle (GtkTreeModel *model, GtkTreePath *path,
 }
 
 static void
-zenity_tree_toggled_callback (GtkCellRendererToggle *cell, char *path_string,
-               gpointer data)
+check_or_radio_label_activated_cb (GtkTreeView *tree_view,
+               GtkTreePath *path,
+               GtkTreeViewColumn *column,
+               gpointer user_data)
 {
-       GtkTreeModel *model;
+       GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
        GtkTreeIter iter;
-       GtkTreePath *path;
        gboolean value;
 
-       model = GTK_TREE_MODEL (data);
-
        /* Because this is a radio list, we should untoggle the previous toggle so
         * that we only have one selection at any given time
         */
@@ -86,14 +85,11 @@ zenity_tree_toggled_callback (GtkCellRendererToggle *cell, char *path_string,
                gtk_tree_model_foreach (model, zenity_tree_dialog_untoggle, NULL);
        }
 
-       path = gtk_tree_path_new_from_string (path_string);
        gtk_tree_model_get_iter (model, &iter, path);
        gtk_tree_model_get (model, &iter, 0, &value, -1);
 
        value = !value;
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, value, -1);
-
-       gtk_tree_path_free (path);
 }
 
 static void
@@ -465,10 +461,22 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
        tree_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
                                "zenity_tree_view"));
 
-       if (!(tree_data->radiobox || tree_data->checkbox))
+       if (tree_data->radiobox || tree_data->checkbox)
        {
-               g_signal_connect (tree_view, "row-activated",
-                       G_CALLBACK (zenity_tree_row_activated), data);
+               gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(tree_view),
+                               TRUE);
+
+               g_signal_connect (tree_view,
+                       "row-activated",
+                       G_CALLBACK (check_or_radio_label_activated_cb),
+                       data);
+       }
+       else
+       {
+               g_signal_connect (tree_view,
+                       "row-activated",
+                       G_CALLBACK (zenity_tree_row_activated),
+                       data);
        }
 
        /* Create an empty list store */
@@ -499,7 +507,13 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
 
        gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(model));
 
-       if (! (tree_data->radiobox || tree_data->checkbox))
+       if (tree_data->radiobox || tree_data->checkbox)
+       {
+               gtk_tree_selection_set_mode (
+                       gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
+                       GTK_SELECTION_SINGLE);
+       }
+       else
        {
                if (tree_data->multi)
                        gtk_tree_selection_set_mode (
@@ -510,12 +524,6 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
                                gtk_tree_view_get_selection (tree_view),
                                GTK_SELECTION_SINGLE);
        }
-       else
-       {
-               gtk_tree_selection_set_mode (
-                       gtk_tree_view_get_selection (tree_view),
-                       GTK_SELECTION_NONE);
-       }
 
        column_index = 0;
 
@@ -536,11 +544,6 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
                                                G_OBJECT (model), "radio", GINT_TO_POINTER (1));
                                }
 
-                               g_signal_connect (cell_renderer,
-                                       "toggled",
-                                       G_CALLBACK (zenity_tree_toggled_callback),
-                                       model);
-
                                column = gtk_tree_view_column_new_with_attributes (
                                        tmp->data, cell_renderer, "active", column_index, NULL);
                        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]