From 929176564c779031bec181474364923d6869e30e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 19 Jul 2011 14:37:41 +0200 Subject: [PATCH 07/12] wizard: if more than one reporter is chosen, select all items. Helps with bz#723021 Before this change, in such case all items were unselected. Signed-off-by: Denys Vlasenko --- src/gui-wizard-gtk/wizard.c | 100 +++++++++++++++++++++++------------------- 1 files changed, 55 insertions(+), 45 deletions(-) diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index b100c13..3eea380 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -1655,74 +1655,84 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u /* Based on selected reporter, update item checkboxes */ event_config_t *cfg = get_event_config(g_reporter_events_selected ? g_reporter_events_selected : ""); //log("%s: event:'%s', cfg:'%p'", __func__, g_reporter_events_selected, cfg); + int allowed_by_reporter = 1; + int default_by_reporter = 1; if (cfg) { /* Default settings are... */ - int allowed_by_reporter = 1; if (cfg->ec_exclude_items_always && strcmp(cfg->ec_exclude_items_always, "*") == 0) allowed_by_reporter = 0; - int default_by_reporter = allowed_by_reporter; + default_by_reporter = allowed_by_reporter; if (cfg->ec_exclude_items_by_default && strcmp(cfg->ec_exclude_items_by_default, "*") == 0) default_by_reporter = 0; + } - GHashTableIter iter; - char *name; - struct problem_item *item; - g_hash_table_iter_init(&iter, g_cd); - while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&item)) + GHashTableIter iter; + char *name; + struct problem_item *item; + g_hash_table_iter_init(&iter, g_cd); + while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&item)) + { + /* Decide whether item is allowed, required, and what's the default */ + item->allowed_by_reporter = allowed_by_reporter; + if (cfg) { - /* Decide whether item is allowed, required, and what's the default */ - item->allowed_by_reporter = allowed_by_reporter; if (is_in_comma_separated_list(name, cfg->ec_exclude_items_always)) item->allowed_by_reporter = 0; if ((item->flags & CD_FLAG_BIN) && cfg->ec_exclude_binary_items) item->allowed_by_reporter = 0; + } - item->default_by_reporter = item->allowed_by_reporter ? default_by_reporter : 0; + item->default_by_reporter = item->allowed_by_reporter ? default_by_reporter : 0; + if (cfg) + { if (is_in_comma_separated_list(name, cfg->ec_exclude_items_by_default)) item->default_by_reporter = 0; if (is_in_comma_separated_list(name, cfg->ec_include_items_by_default)) item->allowed_by_reporter = item->default_by_reporter = 1; + } - item->required_by_reporter = 0; + item->required_by_reporter = 0; + if (cfg) + { if (is_in_comma_separated_list(name, cfg->ec_requires_items)) item->default_by_reporter = item->allowed_by_reporter = item->required_by_reporter = 1; + } - int cur_value; - if (item->selected_by_user == 0) - cur_value = item->default_by_reporter; - else - cur_value = !!(item->selected_by_user + 1); /* map -1,1 to 0,1 */ - - //log("%s: '%s' allowed:%d reqd:%d def:%d user:%d", __func__, name, - // item->allowed_by_reporter, - // item->required_by_reporter, - // item->default_by_reporter, - // item->selected_by_user - //); - - /* Find corresponding line and update checkbox */ - GtkTreeIter iter; - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_ls_details), &iter)) - { - do { - gchar *item_name = NULL; - gtk_tree_model_get(GTK_TREE_MODEL(g_ls_details), &iter, - DETAIL_COLUMN_NAME, &item_name, - -1); - if (!item_name) /* paranoia, should never happen */ - continue; - int differ = strcmp(name, item_name); - g_free(item_name); - if (differ) - continue; - gtk_list_store_set(g_ls_details, &iter, - DETAIL_COLUMN_CHECKBOX, cur_value, + int cur_value; + if (item->selected_by_user == 0) + cur_value = item->default_by_reporter; + else + cur_value = !!(item->selected_by_user + 1); /* map -1,1 to 0,1 */ + + //log("%s: '%s' allowed:%d reqd:%d def:%d user:%d", __func__, name, + // item->allowed_by_reporter, + // item->required_by_reporter, + // item->default_by_reporter, + // item->selected_by_user + //); + + /* Find corresponding line and update checkbox */ + GtkTreeIter iter; + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_ls_details), &iter)) + { + do { + gchar *item_name = NULL; + gtk_tree_model_get(GTK_TREE_MODEL(g_ls_details), &iter, + DETAIL_COLUMN_NAME, &item_name, -1); - //log("%s: changed gtk_list_store_set to %d", __func__, (item->allowed_by_reporter && item->selected_by_user >= 0)); - break; - } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(g_ls_details), &iter)); - } + if (!item_name) /* paranoia, should never happen */ + continue; + int differ = strcmp(name, item_name); + g_free(item_name); + if (differ) + continue; + gtk_list_store_set(g_ls_details, &iter, + DETAIL_COLUMN_CHECKBOX, cur_value, + -1); + //log("%s: changed gtk_list_store_set to %d", __func__, (item->allowed_by_reporter && item->selected_by_user >= 0)); + break; + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(g_ls_details), &iter)); } } } -- 1.7.6