summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Rathbone <poprocks@gmail.com>2021-08-16 00:09:06 -0400
committerLogan Rathbone <poprocks@gmail.com>2021-08-16 01:01:44 -0400
commitd55fc8a4d12b115f2ef13163636aeb04b9659d0b (patch)
tree07f4dd369d1a6958cf5ff3df65d27595bf16e4bf
parent4aa7c7f898fb1a1c968ad40ee9ff31a1b2192ee7 (diff)
downloadzenity-check-radio-box-fixes.tar.gz
tree: clicking row should check radio/checkboxescheck-radio-box-fixes
Addresses #37
-rw-r--r--src/tree.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/tree.c b/src/tree.c
index d94ce7e..226052f 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -63,32 +63,28 @@ zenity_tree_dialog_untoggle (
}
static void
-zenity_tree_toggled_callback (
- GtkCellRendererToggle *cell, gchar *path_string, gpointer data) {
- GtkTreeModel *model;
+check_or_radio_label_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ gpointer user_data)
+{
+ 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
*/
-
if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (model), "radio")) == 1) {
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
@@ -453,11 +449,23 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
tree_view = gtk_builder_get_object (builder, "zenity_tree_view");
- if (!(tree_data->radiobox || tree_data->checkbox))
+ if (tree_data->radiobox || tree_data->checkbox)
+ {
+ 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 */
model = g_object_new (GTK_TYPE_LIST_STORE, NULL);
@@ -486,7 +494,14 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
gtk_tree_view_set_model (GTK_TREE_VIEW (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 (
gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
@@ -495,10 +510,7 @@ zenity_tree (ZenityData *data, ZenityTreeData *tree_data) {
gtk_tree_selection_set_mode (
gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
GTK_SELECTION_SINGLE);
- } else
- gtk_tree_selection_set_mode (
- gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
- GTK_SELECTION_NONE);
+ }
column_index = 0;
@@ -516,11 +528,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);
} else if (tree_data->imagebox) {