summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLogan Rathbone <poprocks@gmail.com>2023-02-04 12:35:23 -0500
committerLogan Rathbone <poprocks@gmail.com>2023-02-04 12:35:23 -0500
commit639b1c1062e7573a94cc69f40e05c2009b8d09ff (patch)
treeb50483f4010d3cf2ce72b2d6913ea1e8febe1f37 /src
parent32db7d97ef533f64d8199006b402a957a3ec06aa (diff)
downloadzenity-639b1c1062e7573a94cc69f40e05c2009b8d09ff.tar.gz
tree-cv: Single clicking on list rows should activate check/radio buttons
Diffstat (limited to 'src')
-rw-r--r--src/zenity-tree-column-view.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/zenity-tree-column-view.c b/src/zenity-tree-column-view.c
index d4d4e2c..9b4b5a6 100644
--- a/src/zenity-tree-column-view.c
+++ b/src/zenity-tree-column-view.c
@@ -336,6 +336,36 @@ zenity_tree_column_view_emit_activated (ZenityTreeColumnView *self)
g_signal_emit (self, zenity_tree_column_view_signals[ACTIVATED], 0);
}
+static void
+cv_check_or_radio_activated_cb (ZenityTreeColumnView *self, guint position, GtkColumnView *cv)
+{
+ GListModel *model = zenity_tree_column_view_get_model (self);
+ ZenityTreeRow *row = g_list_model_get_item (model, position);
+ ZenityTreeItem *item = zenity_tree_row_get_item (row, 0);
+ GtkWidget *item_child = zenity_tree_item_get_child (item);
+ GtkCheckButton *cb;
+
+ if (! GTK_IS_CHECK_BUTTON (item_child))
+ return;
+
+ cb = GTK_CHECK_BUTTON(item_child);
+
+ switch (self->list_type)
+ {
+ case ZENITY_TREE_LIST_CHECK:
+ gtk_check_button_set_active (cb, !gtk_check_button_get_active (cb));
+ break;
+
+ case ZENITY_TREE_LIST_RADIO:
+ gtk_check_button_set_active (cb, TRUE);
+ break;
+
+ default:
+ g_warning ("%s: Programmer error: invalid list type.", __func__);
+ break;
+ }
+}
+
void
zenity_tree_column_view_set_list_type (ZenityTreeColumnView *self, ZenityTreeListType type)
{
@@ -347,10 +377,18 @@ zenity_tree_column_view_set_list_type (ZenityTreeColumnView *self, ZenityTreeLis
{
case ZENITY_TREE_LIST_NONE:
case ZENITY_TREE_LIST_IMAGE:
+ gtk_column_view_set_single_click_activate (self->child_cv, FALSE);
g_signal_connect_swapped (self->child_cv, "activate", G_CALLBACK(zenity_tree_column_view_emit_activated), self);
break;
+ case ZENITY_TREE_LIST_RADIO:
+ case ZENITY_TREE_LIST_CHECK:
+ gtk_column_view_set_single_click_activate (self->child_cv, TRUE);
+ g_signal_connect_swapped (self->child_cv, "activate", G_CALLBACK(cv_check_or_radio_activated_cb), self);
+ break;
+
default:
+ g_warning ("%s: Invalid ZenityTreeListType provided.", __func__);
break;
}