[zenity/gtk4-port] tree: clicking row should check radio/checkboxes
- From: Logan Rathbone <larathbone src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [zenity/gtk4-port] tree: clicking row should check radio/checkboxes
- Date: Tue, 16 Nov 2021 01:07:12 +0000 (UTC)
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]