talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 5c9901294fb06ecd87a78cf06d46a681f1757d80
parent 874a232f1c2296facf6e7bdc36af69331af8c7bd
Author: Andrej Kacian <ticho@claws-mail.org>
Date:   Fri,  2 Nov 2018 01:28:15 +0100

Make quicksearch type menu reflect prefs on startup and after a change.

Diffstat:
Msrc/gtk/quicksearch.c | 94++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 74 insertions(+), 20 deletions(-)

diff --git a/src/gtk/quicksearch.c b/src/gtk/quicksearch.c @@ -595,7 +595,7 @@ static void select_correct_combobox_menuitem(QuickSearch *quicksearch) gint active_menuitem, active_type; GtkWidget *combobox = quicksearch->search_type_combo; - /* Figure out which menuitem to activate. QS_MENU_ACTION_ aliases + /* Figure out which menuitem to set as active. QS_MENU_ACTION_ aliases * are in the same order as order of their menu items, so we can * use them as index for gtk_combo_box_set_active(). * @@ -642,6 +642,66 @@ static void select_correct_combobox_menuitem(QuickSearch *quicksearch) (gpointer)quicksearch); } +static gboolean set_search_type_checkboxes_func(GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data) +{ + gboolean has_checkbox; + gint action; + gboolean cur_active, active; + PrefsCommon *prefs = prefs_common_get_prefs(); + + gtk_tree_model_get(model, iter, + SEARCH_TYPE_COL_CHECKBOX, &has_checkbox, + SEARCH_TYPE_COL_CHECKBOX_ACTIVE, &cur_active, + SEARCH_TYPE_COL_ACTION, &action, + -1); + + if (!has_checkbox) + return FALSE; + + prefs = prefs_common_get_prefs(); + switch (action) { + case QS_MENU_ACTION_RECURSIVE: + active = prefs->summary_quicksearch_recurse; + break; + case QS_MENU_ACTION_STICKY: + active = prefs->summary_quicksearch_sticky; + break; + case QS_MENU_ACTION_TYPEAHEAD: + active = prefs->summary_quicksearch_dynamic; + break; + case QS_MENU_ACTION_RUNONSELECT: + active = prefs->summary_quicksearch_autorun; + break; + } + + if (active != cur_active) { + gtk_list_store_set(GTK_LIST_STORE(model), iter, + SEARCH_TYPE_COL_CHECKBOX_ACTIVE, active, + -1); + } + + return FALSE; +} + +/* A function to make status of the toggleable menu items + * in search type combobox reflect configured prefs */ +static void set_search_type_checkboxes(GtkComboBox *combobox) +{ + GtkTreeModel *model; + + cm_return_if_fail(combobox != NULL); + + model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox)); + + if (model == NULL) + return; + + gtk_tree_model_foreach(model, set_search_type_checkboxes_func, NULL); +} + static void search_type_changed_cb(GtkComboBox *combobox, gpointer user_data) { @@ -697,31 +757,22 @@ static void search_type_changed_cb(GtkComboBox *combobox, break; } - /* If one of the toggleable items has been selected, there's + /* If one of the toggleable items has been activated, there's * work to be done */ if (has_checkbox) { - /* Toggle checkbox state of activated menu item */ - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - SEARCH_TYPE_COL_CHECKBOX_ACTIVE, !checkbox_active, - -1); - /* TYPEAHEAD is mutually exclusive with RUNONSELECT */ - if (action == QS_MENU_ACTION_TYPEAHEAD && !checkbox_active) { - if (gtk_tree_model_iter_next(model, &iter)) { - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - SEARCH_TYPE_COL_CHECKBOX_ACTIVE, FALSE, -1); - } - } + if (action == QS_MENU_ACTION_TYPEAHEAD && !checkbox_active) + prefs->summary_quicksearch_autorun = FALSE; /* RUNONSELECT is mutually exclusive with TYPEAHEAD */ - if (action == QS_MENU_ACTION_RUNONSELECT && !checkbox_active) { - if (gtk_tree_model_iter_previous(model, &iter)) { - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - SEARCH_TYPE_COL_CHECKBOX_ACTIVE, FALSE, -1); - } - } + if (action == QS_MENU_ACTION_RUNONSELECT && !checkbox_active) + prefs->summary_quicksearch_dynamic = FALSE; + + /* Update state of the toggleable menu items */ + set_search_type_checkboxes(combobox); - /* Select one of the search types' menu entries */ + /* Activate one of the search types' menu entries, so that + * the current search type is visible on a closed combobox */ select_correct_combobox_menuitem(quicksearch); } @@ -953,6 +1004,9 @@ QuickSearch *quicksearch_new() GTKUT_GDKRGBA_TO_GDKCOLOR(prefs_common.color[COL_QS_ERROR], qs_error_color); + /* Update state of the search type combobox to reflect + * current quicksearch prefs */ + set_search_type_checkboxes(GTK_COMBO_BOX(search_type_combo)); select_correct_combobox_menuitem(quicksearch); return quicksearch;