Miroslav Lichvar <mlichvar(a)redhat.com> writes:
---
src/gui-wizard-gtk/wizard.c | 148 ++++++++++++++++++++++---------------------
1 files changed, 77 insertions(+), 71 deletions(-)
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index 3494125..2663e8b 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -982,6 +982,80 @@ static void append_item_to_ls_details(gpointer name, gpointer value,
gpointer da
DETAIL_COLUMN_CHECKBOX, cur_value,
-1);
}
+
+/* Based on selected reporter, update item checkboxes */
+static void update_ls_details_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);
+ 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 = 1;
+ if (cfg)
+ {
+ if (is_in_comma_separated_list_of_glob_patterns(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;
+ if (cfg)
+ {
+ if (is_in_comma_separated_list_of_glob_patterns(name,
cfg->ec_exclude_items_by_default))
+ item->default_by_reporter = 0;
+ if (is_in_comma_separated_list_of_glob_patterns(name,
cfg->ec_include_items_by_default))
+ item->allowed_by_reporter = item->default_by_reporter = 1;
+ }
+
+ item->required_by_reporter = 0;
+ if (cfg)
+ {
+ if (is_in_comma_separated_list_of_glob_patterns(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,
+ -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));
+ }
+ }
}
/* Update collector/reporter checkboxes according to events parameter.
@@ -1897,77 +1971,7 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget
*page, gpointer u
if (pages[PAGENO_REVIEW_DATA].page_widget == page)
{
- /* 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);
- 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 = 1;
- if (cfg)
- {
- if (is_in_comma_separated_list_of_glob_patterns(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;
- if (cfg)
- {
- if (is_in_comma_separated_list_of_glob_patterns(name,
cfg->ec_exclude_items_by_default))
- item->default_by_reporter = 0;
- if (is_in_comma_separated_list_of_glob_patterns(name,
cfg->ec_include_items_by_default))
- item->allowed_by_reporter = item->default_by_reporter =
1;
- }
-
- item->required_by_reporter = 0;
- if (cfg)
- {
- if (is_in_comma_separated_list_of_glob_patterns(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,
- -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));
- }
- }
+ update_ls_details_checkboxes();
}
}
@@ -2186,6 +2190,8 @@ static void on_btn_add_file(GtkButton *button)
{
reload_problem_data_from_dump_dir();
update_gui_state_from_problem_data();
+ /* Set flags for the new item */
+ update_ls_details_checkboxes();
}
}
free(new_name);
Acked-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
--
Save the whales. Feed the hungry. Free the mallocs