summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLogan Rathbone <poprocks@gmail.com>2021-08-16 00:09:06 -0400
committerLogan Rathbone <poprocks@gmail.com>2021-11-15 19:54:59 -0500
commit7db5575f2bba510a88aa56d0bcb295b9a07ab104 (patch)
tree7d2729bdc2e8023946ba5e3ad04f46dc5a8b167f /src
parentf919a7ac20b7f3dce4ae3ca6acb467508b486851 (diff)
downloadzenity-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.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/src/tree.c b/src/tree.c
index 5f99583..6890452 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);
}