diff options
author | Logan Rathbone <poprocks@gmail.com> | 2021-08-16 00:09:06 -0400 |
---|---|---|
committer | Logan Rathbone <poprocks@gmail.com> | 2021-11-15 19:54:59 -0500 |
commit | 7db5575f2bba510a88aa56d0bcb295b9a07ab104 (patch) | |
tree | 7d2729bdc2e8023946ba5e3ad04f46dc5a8b167f /src | |
parent | f919a7ac20b7f3dce4ae3ca6acb467508b486851 (diff) | |
download | zenity-7db5575f2bba510a88aa56d0bcb295b9a07ab104.tar.gz |
tree: clicking row should check radio/checkboxes
Forward-port from gtk3 (master) branch.
Addresses #37
Merge and fix conflicts.
Diffstat (limited to 'src')
-rw-r--r-- | src/tree.c | 51 |
1 files changed, 27 insertions, 24 deletions
@@ -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); } |