diff options
-rw-r--r-- | src/gui-wizard-gtk/Makefile.am | 16 | ||||
-rw-r--r-- | src/gui-wizard-gtk/main.c | 7 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.c | 44 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.glade | 9 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.h | 1 | ||||
-rw-r--r-- | src/include/report/run_event.h | 5 |
6 files changed, 56 insertions, 26 deletions
diff --git a/src/gui-wizard-gtk/Makefile.am b/src/gui-wizard-gtk/Makefile.am index 1438c915..90b74586 100644 --- a/src/gui-wizard-gtk/Makefile.am +++ b/src/gui-wizard-gtk/Makefile.am @@ -6,8 +6,9 @@ bug_reporting_wizard_SOURCES = \ main.c \ wizard_glade.c -# -Wl,--export-dynamic and lgmodule-2.0 -# is required for gtk_builder_connect_signals() to work correctly +# Required for gtk_builder_connect_signals() to work correctly: +# -g +# -Wl,--export-dynamic bug_reporting_wizard_CFLAGS = \ -I$(srcdir)/../include/report -I$(srcdir)/../include \ -I$(srcdir)/../lib \ @@ -19,20 +20,21 @@ bug_reporting_wizard_CFLAGS = \ -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ -DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \ + $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ -D_GNU_SOURCE \ - -g \ - -Wl,--export-dynamic \ -Wall -Werror +# Required for gtk_builder_connect_signals() to work correctly: +# -lgmodule-2.0 +# -lgthread-2.0 bug_reporting_wizard_LDADD = \ ../lib/libreport.la \ ../lib/libabrt_dbus.la \ - -lglib-2.0 \ - -lgthread-2.0 \ - -lgmodule-2.0 \ + $(GLIB_LIBS) \ $(GTK_LIBS) + # we don't want to install it, just make it part of tarball # created by make dist GLADE_FILES = wizard.glade diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c index 759390b6..1d35da82 100644 --- a/src/gui-wizard-gtk/main.c +++ b/src/gui-wizard-gtk/main.c @@ -9,6 +9,7 @@ char *g_glade_file = NULL; char *g_dump_dir_name = NULL; char *g_analyze_label_selected = NULL; char *g_analyze_events = NULL; +char *g_reanalyze_events = NULL; char *g_report_events = NULL; crash_data_t *g_cd; @@ -17,14 +18,16 @@ void reload_crash_data_from_dump_dir(void) { free_crash_data(g_cd); free(g_analyze_events); + free(g_reanalyze_events); free(g_report_events); struct dump_dir *dd = dd_opendir(g_dump_dir_name, 0); if (!dd) xfunc_die(); /* dd_opendir already logged error msg */ g_cd = create_crash_data_from_dump_dir(dd); - g_analyze_events = list_possible_events(dd, g_dump_dir_name, "analyze"); - g_report_events = list_possible_events(dd, g_dump_dir_name, "report"); + g_analyze_events = list_possible_events(dd, NULL, "analyze"); + g_reanalyze_events = list_possible_events(dd, NULL, "reanalyze"); + g_report_events = list_possible_events(dd, NULL, "report"); dd_close(dd); } diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 6598301a..73f093b2 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -20,7 +20,8 @@ GtkTreeView *g_tv_details; GtkListStore *g_ls_details; GtkWidget *g_widget_warnings_area; GtkBox *g_box_warning_labels; -GtkToggleButton * g_tb_approve_bt; +GtkToggleButton *g_tb_approve_bt; +GtkButton *g_btn_refresh; static GtkBuilder *builder; @@ -104,12 +105,6 @@ static void remove_child_widget(GtkWidget *widget, gpointer container) } -void on_b_refresh_clicked(GtkButton *button) -{ - g_print("Refresh clicked!\n"); -} - - /* update_gui_state_from_crash_data */ static void analyze_rb_was_toggled(GtkButton *button, gpointer user_data) @@ -237,6 +232,11 @@ void update_gui_state_from_crash_data(void) * We created new widgets (buttons). Need to make them visible. */ gtk_widget_show_all(GTK_WIDGET(g_assistant)); + + if (g_reanalyze_events[0]) + gtk_widget_show(GTK_WIDGET(g_btn_refresh)); + else + gtk_widget_hide(GTK_WIDGET(g_btn_refresh)); } @@ -411,12 +411,13 @@ static void add_warning(const char *warning) { char *label_str = xasprintf("• %s", warning); GtkWidget *warning_lbl = gtk_label_new(label_str); + /* should be safe to free it, gtk calls strdup() to copy it */ + free(label_str); + gtk_misc_set_alignment(GTK_MISC(warning_lbl), 0.0, 0.0); gtk_label_set_justify(GTK_LABEL(warning_lbl), GTK_JUSTIFY_LEFT); gtk_box_pack_start(g_box_warning_labels, warning_lbl, false, false, 0); gtk_widget_show(warning_lbl); - /* should be safe to free it, gtk calls strdup() to copy it */ - free(label_str); } static void check_backtrace_and_allow_send(void) @@ -475,6 +476,21 @@ static void on_bt_approve_toggle(GtkToggleButton *togglebutton, gpointer user_da } +/* Refresh button handling */ + +void on_btn_refresh_clicked(GtkButton *button) +{ + g_analyze_events = append_to_malloced_string(g_analyze_events, g_reanalyze_events); + if (g_analyze_events[0]) + { + /* Refresh GUI so that we see new analyze+reanalyze buttons */ + update_gui_state_from_crash_data(); + /* Let user play with them */ + gtk_assistant_set_current_page(g_assistant, PAGENO_ANALYZE_SELECTOR); + } +} + + /* Page navigation handlers */ static void next_page(GtkAssistant *assistant, gpointer user_data) @@ -661,9 +677,11 @@ static void add_pages(void) g_tv_report_log = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "tv_report_log")); g_tv_backtrace = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "tv_backtrace")); g_tv_details = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tv_details")); - g_box_warning_labels = GTK_BOX(gtk_builder_get_object(builder, "hb_warning_labels")); + g_box_warning_labels = GTK_BOX(gtk_builder_get_object(builder, "b_warning_labels")); g_tb_approve_bt = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "cb_approve_bt")); - g_widget_warnings_area = GTK_WIDGET(gtk_builder_get_object(builder, "hb_warnings_area")); + g_widget_warnings_area = GTK_WIDGET(gtk_builder_get_object(builder, "b_warnings_area")); + g_btn_refresh = GTK_BUTTON(gtk_builder_get_object(builder, "btn_refresh")); + ///* hide the warnings by default */ //gtk_widget_hide(g_widget_warnings_area); @@ -697,9 +715,11 @@ void create_assistant() g_ls_details = gtk_list_store_new(DETAIL_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(g_tv_details, GTK_TREE_MODEL(g_ls_details)); - gtk_builder_connect_signals(builder, NULL); +// gtk_builder_connect_signals(builder, NULL); g_signal_connect(g_tb_approve_bt, "toggled", G_CALLBACK(on_bt_approve_toggle), NULL); + g_signal_connect(g_btn_refresh, "clicked", G_CALLBACK(on_btn_refresh_clicked), NULL); + gtk_assistant_set_page_complete(g_assistant, pages[PAGENO_BACKTRACE_APPROVAL].page_widget, gtk_toggle_button_get_active(g_tb_approve_bt) diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade index 6fb77a44..4b665b96 100644 --- a/src/gui-wizard-gtk/wizard.glade +++ b/src/gui-wizard-gtk/wizard.glade @@ -247,7 +247,7 @@ <property name="visible">True</property> <property name="border_width">5</property> <child> - <object class="GtkHBox" id="hb_warnings_area"> + <object class="GtkHBox" id="b_warnings_area"> <property name="visible">True</property> <property name="no_show_all">True</property> <child> @@ -263,7 +263,7 @@ </packing> </child> <child> - <object class="GtkVBox" id="hb_warning_labels"> + <object class="GtkVBox" id="b_warning_labels"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> @@ -341,11 +341,12 @@ </packing> </child> <child> - <object class="GtkButton" id="b_refresh"> - <property name="label" translatable="yes">Regenerate backgrace</property> + <object class="GtkButton" id="btn_refresh"> + <property name="label" translatable="yes">Regenerate backtrace</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Can create more informative backtrace if you installed additional debug packages</property> <signal name="clicked" handler="on_b_refresh_clicked"/> </object> <packing> diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h index 38f9bfd8..4289caa3 100644 --- a/src/gui-wizard-gtk/wizard.h +++ b/src/gui-wizard-gtk/wizard.h @@ -31,6 +31,7 @@ extern char *g_glade_file; extern char *g_dump_dir_name; extern char *g_analyze_label_selected; extern char *g_analyze_events; +extern char *g_reanalyze_events; extern char *g_report_events; extern crash_data_t *g_cd; void reload_crash_data_from_dump_dir(void); diff --git a/src/include/report/run_event.h b/src/include/report/run_event.h index 5d108a27..7fd8edea 100644 --- a/src/include/report/run_event.h +++ b/src/include/report/run_event.h @@ -69,7 +69,10 @@ int run_event_on_crash_data(struct run_event_state *state, crash_data_t *data, c /* Querying for possible events */ -/* Returns a malloced string with '\n'-terminated event names */ +/* Scans event.conf for events starting with pfx which are applicable + * to dd, or (if dd is NULL), to dump_dir. + * Returns a malloced string with '\n'-terminated event names. + */ char *list_possible_events(struct dump_dir *dd, const char *dump_dir_name, const char *pfx); #ifdef __cplusplus |