diff options
author | Logan Rathbone <poprocks@gmail.com> | 2023-02-04 12:35:23 -0500 |
---|---|---|
committer | Logan Rathbone <poprocks@gmail.com> | 2023-02-04 12:35:23 -0500 |
commit | 639b1c1062e7573a94cc69f40e05c2009b8d09ff (patch) | |
tree | b50483f4010d3cf2ce72b2d6913ea1e8febe1f37 /src | |
parent | 32db7d97ef533f64d8199006b402a957a3ec06aa (diff) | |
download | zenity-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.c | 38 |
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; } |