From ef61d27e19c61a6ec1b462a1825dc3c84158ec80 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 19 Aug 2014 15:13:53 +0200 Subject: [PATCH] Fix a bug in logging, add "Repeat" button Signed-off-by: Jakub Filak --- ...logging-test-log-level-at-first-step.patch | 75 +++ ...-json.h-accordingly-to-json-c-CFLAGS.patch | 4 +- ...-json.h-accordingly-to-json-c-CFLAGS.patch | 4 +- 0012-gui-port-to-gtk-3.13.patch | 432 ++++++++++++++ ...rors-introduced-in-the-previous-comm.patch | 30 + ...erate-the-glade-file-with-glade-3.18.patch | 542 ++++++++++++++++++ ...gui-simplify-the-event-selector-page.patch | 126 ++++ ...-conver-report-gtk-to-GtkApplication.patch | 238 ++++++++ ...nsitive-cache-between-two-event-runs.patch | 53 ++ ...emove-already-removed-GTimeoutSource.patch | 54 ++ ...oyed-sensitive-data-warn-widgets-fro.patch | 130 +++++ 0020-gui-add-Repeat-button.patch | 244 ++++++++ libreport.spec | 21 +- 13 files changed, 1946 insertions(+), 7 deletions(-) create mode 100644 0009-logging-test-log-level-at-first-step.patch rename 0001-json-include-json.h-accordingly-to-json-c-CFLAGS.patch => 0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch (91%) rename 0001-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch => 0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch (93%) create mode 100644 0012-gui-port-to-gtk-3.13.patch create mode 100644 0013-gui-fix-build-errors-introduced-in-the-previous-comm.patch create mode 100644 0014-gui-generate-the-glade-file-with-glade-3.18.patch create mode 100644 0015-gui-simplify-the-event-selector-page.patch create mode 100644 0016-gui-conver-report-gtk-to-GtkApplication.patch create mode 100644 0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch create mode 100644 0018-gui-don-t-remove-already-removed-GTimeoutSource.patch create mode 100644 0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch create mode 100644 0020-gui-add-Repeat-button.patch diff --git a/0009-logging-test-log-level-at-first-step.patch b/0009-logging-test-log-level-at-first-step.patch new file mode 100644 index 0000000..6da7969 --- /dev/null +++ b/0009-logging-test-log-level-at-first-step.patch @@ -0,0 +1,75 @@ +From 7d30aa09f740b3559ba610022577189a46dce112 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Thu, 24 Jul 2014 13:34:50 +0200 +Subject: [PATCH 09/20] logging: test log level at first step + +Return from the logger immediately if message's log level is not +sufficient to write it to the log. + +This patch is a workaround for rhbz#1122690 where we try to log a +'post'ed string which has 18MB of size. It is not worth to try to fix it +properly. We do not log such a big amount of data in non-debug mode, we +need to have the logging extremely fast and we can live with crashes in +debug mode. + +Signed-off-by: Jakub Filak +--- + src/lib/logging.c | 26 +++++++++++--------------- + 1 file changed, 11 insertions(+), 15 deletions(-) + +diff --git a/src/lib/logging.c b/src/lib/logging.c +index 259a634..4b9dd87 100644 +--- a/src/lib/logging.c ++++ b/src/lib/logging.c +@@ -66,7 +66,7 @@ static void log_handler(int level, + int line, + const char *func) + { +- if (!logmode) ++ if (!logmode || !should_log(level)) + return; + + /* This is ugly and costs +60 bytes compared to multiple +@@ -122,29 +122,25 @@ static void log_handler(int level, + strcpy(&msg[used], msg_eol); + + if (flags & LOGMODE_STDIO) { +- if(should_log(level)) +- full_write(STDERR_FILENO, msg, used + msgeol_len); ++ full_write(STDERR_FILENO, msg, used + msgeol_len); + } + msg[used] = '\0'; /* remove msg_eol (usually "\n") */ + if (flags & LOGMODE_SYSLOG) { +- if(should_log(level)) +- syslog(level, "%s", msg + prefix_len); ++ syslog(level, "%s", msg + prefix_len); + } + + if ((flags & LOGMODE_CUSTOM) && g_custom_logger) { +- if(should_log(level)) +- g_custom_logger(msg + prefix_len); ++ g_custom_logger(msg + prefix_len); + } + + if (flags & LOGMODE_JOURNAL) { +- if(should_log(level)) +- sd_journal_send("MESSAGE=%s", msg + prefix_len, +- "PRIORITY=%d", level, +- "CODE_FILE=%s", file, +- "CODE_LINE=%d", line, +- "CODE_FUNC=%s", func, +- "SYSLOG_FACILITY=1", +- NULL); ++ sd_journal_send("MESSAGE=%s", msg + prefix_len, ++ "PRIORITY=%d", level, ++ "CODE_FILE=%s", file, ++ "CODE_LINE=%d", line, ++ "CODE_FUNC=%s", func, ++ "SYSLOG_FACILITY=1", ++ NULL); + } + } + +-- +2.0.4 + diff --git a/0001-json-include-json.h-accordingly-to-json-c-CFLAGS.patch b/0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch similarity index 91% rename from 0001-json-include-json.h-accordingly-to-json-c-CFLAGS.patch rename to 0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch index 97a2a96..ab0f4cf 100644 --- a/0001-json-include-json.h-accordingly-to-json-c-CFLAGS.patch +++ b/0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch @@ -1,7 +1,7 @@ From 1cef1ddc28f327534cfdb433d1f2e10d01b10f44 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Thu, 24 Jul 2014 16:07:36 +0200 -Subject: [PATCH] json: include json.h accordingly to json-c CFLAGS +Subject: [PATCH 10/20] json: include json.h accordingly to json-c CFLAGS We use $(pkg-config --cflags json-c) but we include . The proper way to include the json-c header is to include . @@ -30,5 +30,5 @@ index 08ffe8c..fc26bc6 100644 #include #include -- -1.9.3 +2.0.4 diff --git a/0001-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch b/0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch similarity index 93% rename from 0001-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch rename to 0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch index f137c47..f2cf658 100644 --- a/0001-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch +++ b/0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch @@ -1,7 +1,7 @@ From cc36c5c2b109fa7ac864400e695c88808b19a5ed Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Fri, 25 Jul 2014 12:39:28 +0200 -Subject: [PATCH] ureport: include json.h accordingly to json-c CFLAGS +Subject: [PATCH 11/20] ureport: include json.h accordingly to json-c CFLAGS commit 1cef1ddc28f327534cfdb433d1f2e10d01b10f44 @@ -41,5 +41,5 @@ index e6237cc..063a1e7 100644 #include "ureport.h" #include "libreport_curl.h" -- -1.9.3 +2.0.4 diff --git a/0012-gui-port-to-gtk-3.13.patch b/0012-gui-port-to-gtk-3.13.patch new file mode 100644 index 0000000..901cbac --- /dev/null +++ b/0012-gui-port-to-gtk-3.13.patch @@ -0,0 +1,432 @@ +From 8190657d9fb808277f29e5535983a0a1f55badcf Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Tue, 29 Jul 2014 18:59:31 +0200 +Subject: [PATCH 12/20] gui: port to gtk-3.13 + +Signed-off-by: Jakub Filak +--- + src/gtk-helpers/config_dialog.c | 7 ++++- + src/gtk-helpers/event_config_dialog.c | 24 +++++++++++++- + src/gtk-helpers/workflow_config_dialog.c | 7 ++++- + src/gui-wizard-gtk/wizard.c | 47 ++++++++++++++++++++++----- + src/gui-wizard-gtk/wizard.glade | 54 ++++++++++++++++---------------- + 5 files changed, 101 insertions(+), 38 deletions(-) + +diff --git a/src/gtk-helpers/config_dialog.c b/src/gtk-helpers/config_dialog.c +index 2a723cc..5370fcb 100644 +--- a/src/gtk-helpers/config_dialog.c ++++ b/src/gtk-helpers/config_dialog.c +@@ -366,7 +366,7 @@ GtkWindow *create_config_list_window(GHashTable *configs, GtkWindow *parent) + //buttons + GtkWidget *btn_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *configure_btn = gtk_button_new_with_mnemonic(_("C_onfigure")); +- GtkWidget *align = gtk_alignment_new(0, 0, 0, 0); ++ + GtkWidget *close_btn = gtk_button_new_with_mnemonic(_("_Close")); + GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); + //force apply and close to have the same size +@@ -377,8 +377,13 @@ GtkWindow *create_config_list_window(GHashTable *configs, GtkWindow *parent) + g_signal_connect(close_btn, "clicked", (GCallback)on_close_cb, window); + + gtk_box_pack_start(GTK_BOX(btn_box), close_btn, 0, 0, 5); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) ++ GtkWidget *align = gtk_alignment_new(0, 0, 0, 0); + gtk_box_pack_start(GTK_BOX(btn_box), align, true, true, 5); + gtk_box_pack_start(GTK_BOX(btn_box), configure_btn, 0, 0, 5); ++#else ++ gtk_box_pack_end(GTK_BOX(btn_box), configure_btn, 0, 0, 5); ++#endif + + + gtk_box_pack_start(GTK_BOX(main_vbox), btn_box, 0, 0, 0); +diff --git a/src/gtk-helpers/event_config_dialog.c b/src/gtk-helpers/event_config_dialog.c +index 3cc111c..e5ce612 100644 +--- a/src/gtk-helpers/event_config_dialog.c ++++ b/src/gtk-helpers/event_config_dialog.c +@@ -35,9 +35,16 @@ static GtkWidget *gtk_label_new_justify_left(const gchar *label_str) + { + GtkWidget *label = gtk_label_new(label_str); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_misc_set_alignment(GTK_MISC(label), /*xalign:*/ 0, /*yalign:*/ 0.5); + /* Make some space between label and input field to the right of it: */ + gtk_misc_set_padding(GTK_MISC(label), /*xpad:*/ 5, /*ypad:*/ 0); ++#else ++ gtk_widget_set_halign (label, GTK_ALIGN_START); ++ /* Make some space between label and input field to the right of it: */ ++ gtk_widget_set_margin_start(label, 5); ++ gtk_widget_set_margin_end(label, 5); ++#endif + return label; + } + +@@ -146,7 +153,12 @@ static void add_option_to_table(gpointer data, gpointer user_data) + case OPTION_TYPE_HINT_HTML: + label = gtk_label_new(option_label); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_misc_set_alignment(GTK_MISC(label), /*x,yalign:*/ 0.0, 0.0); ++#else ++ gtk_widget_set_halign(label, GTK_ALIGN_START); ++ gtk_widget_set_valign(label, GTK_ALIGN_START); ++#endif + make_label_autowrap_on_resize(GTK_LABEL(label)); + + last_row = add_one_row_to_grid(option_table); +@@ -178,7 +190,12 @@ static void add_option_to_table(gpointer data, gpointer user_data) + { + label = gtk_label_new(option->eo_note_html); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_misc_set_alignment(GTK_MISC(label), /*x,yalign:*/ 0.0, 0.0); ++#else ++ gtk_widget_set_halign(label, GTK_ALIGN_START); ++ gtk_widget_set_valign(label, GTK_ALIGN_START); ++#endif + make_label_autowrap_on_resize(GTK_LABEL(label)); + + last_row = add_one_row_to_grid(option_table); +@@ -194,9 +211,14 @@ static GtkWidget *create_event_config_grid() + { + GtkWidget *option_table = gtk_grid_new(); + ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 11) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 11 && GTK_MICRO_VERSION < 2)) + gtk_widget_set_margin_left(option_table, 5); +- gtk_widget_set_margin_top(option_table, 5); + gtk_widget_set_margin_right(option_table, 5); ++#else ++ gtk_widget_set_margin_start(option_table, 5); ++ gtk_widget_set_margin_end(option_table, 5); ++#endif ++ gtk_widget_set_margin_top(option_table, 5); + gtk_widget_set_margin_bottom(option_table, 5); + + gtk_grid_set_row_homogeneous(GTK_GRID(option_table), FALSE); +diff --git a/src/gtk-helpers/workflow_config_dialog.c b/src/gtk-helpers/workflow_config_dialog.c +index d55f2f0..6ae130d 100644 +--- a/src/gtk-helpers/workflow_config_dialog.c ++++ b/src/gtk-helpers/workflow_config_dialog.c +@@ -37,9 +37,14 @@ static void create_event_config_dialog_content_cb(event_config_t *ec, gpointer n + GtkWidget *ev_lbl = gtk_label_new(ec_get_screen_name(ec)); + + GtkWidget *content = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 11) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 11 && GTK_MICRO_VERSION < 2)) + gtk_widget_set_margin_left(content, 10); +- gtk_widget_set_margin_top(content, 5); + gtk_widget_set_margin_right(content, 10); ++#else ++ gtk_widget_set_margin_start(content, 10); ++ gtk_widget_set_margin_end(content, 10); ++#endif ++ gtk_widget_set_margin_top(content, 5); + gtk_widget_set_margin_bottom(content, 10); + + config_dialog_t *cdialog = create_event_config_dialog_content(ec, (GtkWidget *)content); +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 0fde0f4..d442495 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -261,12 +261,19 @@ static void wrap_fixer(GtkWidget *widget, gpointer data_unused) + { + GtkLabel *label = (GtkLabel*)widget; + //const char *txt = gtk_label_get_label(label); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + GtkMisc *misc = (GtkMisc*)widget; + gfloat yalign; // = 111; + gint ypad; // = 111; + if (gtk_label_get_line_wrap(label) + && (gtk_misc_get_alignment(misc, NULL, &yalign), yalign == 0) + && (gtk_misc_get_padding(misc, NULL, &ypad), ypad == 0) ++#else ++ if (gtk_label_get_line_wrap(label) ++ && (gtk_widget_get_halign(widget) == GTK_ALIGN_START) ++ && (gtk_widget_get_margin_top(widget) == 0) ++ && (gtk_widget_get_margin_bottom(widget) == 0) ++#endif + ) { + //log("label '%s' set to autowrap", txt); + make_label_autowrap_on_resize(label); +@@ -942,7 +949,12 @@ static event_gui_data_t *add_event_buttons(GtkBox *box, + if (!event_name || !event_name[0]) + { + GtkWidget *lbl = gtk_label_new(_("No reporting targets are defined for this problem. Check configuration in /etc/libreport/*")); ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_misc_set_alignment(GTK_MISC(lbl), /*x*/ 0.0, /*y*/ 0.0); ++#else ++ gtk_widget_set_halign (lbl, GTK_ALIGN_START); ++ gtk_widget_set_valign (lbl, GTK_ALIGN_END); ++#endif + make_label_autowrap_on_resize(GTK_LABEL(lbl)); + gtk_box_pack_start(box, lbl, /*expand*/ true, /*fill*/ false, /*padding*/ 0); + return NULL; +@@ -1487,12 +1499,13 @@ static void hide_next_step_button() + /* 1. hide next button */ + gtk_widget_hide(g_btn_next); + /* 2. move close button to the last position */ +- gtk_box_reorder_child(g_box_buttons, g_btn_close, 3); ++ gtk_box_set_child_packing(g_box_buttons, g_btn_close, false, false, 5, GTK_PACK_END); + } + + static void show_next_step_button() + { +- gtk_box_reorder_child(g_box_buttons, g_btn_close, 0); ++ gtk_box_set_child_packing(g_box_buttons, g_btn_close, false, false, 5, GTK_PACK_START); ++ + gtk_widget_show(g_btn_next); + } + +@@ -2044,7 +2057,12 @@ static void add_warning(const char *warning) + /* should be safe to free it, gtk calls strdup() to copy it */ + free(label_str); + ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_misc_set_alignment(GTK_MISC(warning_lbl), 0.0, 0.0); ++#else ++ gtk_widget_set_halign (warning_lbl, GTK_ALIGN_START); ++ gtk_widget_set_valign (warning_lbl, GTK_ALIGN_END); ++#endif + gtk_label_set_justify(GTK_LABEL(warning_lbl), GTK_JUSTIFY_LEFT); + gtk_label_set_line_wrap(GTK_LABEL(warning_lbl), TRUE); + +@@ -3415,17 +3433,16 @@ void create_assistant(bool expert_mode) + gtk_box_pack_start(g_box_buttons, g_btn_stop, false, false, 5); + gtk_box_pack_start(g_box_buttons, g_btn_onfail, false, false, 5); + /* Btns above are to the left, the rest are to the right: */ ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + GtkWidget *w = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); + gtk_box_pack_start(g_box_buttons, w, true, true, 5); + gtk_box_pack_start(g_box_buttons, g_btn_next, false, false, 5); ++#else ++ gtk_widget_set_valign(GTK_WIDGET(g_btn_next), GTK_ALIGN_END); ++ gtk_box_pack_end(g_box_buttons, g_btn_next, false, false, 5); ++#endif + + { /* Warnings area widget definition start */ +- GtkWidget *alignment_left = gtk_alignment_new(0.5,0.5,1,1); +- gtk_widget_set_visible(alignment_left, TRUE); +- +- GtkWidget *alignment_right = gtk_alignment_new(0.5,0.5,1,1); +- gtk_widget_set_visible(alignment_right, TRUE); +- + g_box_warning_labels = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0)); + gtk_widget_set_visible(GTK_WIDGET(g_box_warning_labels), TRUE); + +@@ -3439,10 +3456,24 @@ void create_assistant(bool expert_mode) + g_widget_warnings_area = GTK_WIDGET(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); + gtk_widget_set_visible(g_widget_warnings_area, FALSE); + gtk_widget_set_no_show_all(g_widget_warnings_area, TRUE); ++ ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) ++ GtkWidget *alignment_left = gtk_alignment_new(0.5,0.5,1,1); ++ gtk_widget_set_visible(alignment_left, TRUE); + gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), alignment_left, true, false, 0); ++#else ++ gtk_widget_set_valign(GTK_WIDGET(image), GTK_ALIGN_CENTER); ++ gtk_widget_set_valign(GTK_WIDGET(vbox), GTK_ALIGN_CENTER); ++#endif ++ + gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), image, false, false, 5); + gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), GTK_WIDGET(vbox), false, false, 0); ++ ++#if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), alignment_right, true, false, 0); ++ GtkWidget *alignment_right = gtk_alignment_new(0.5,0.5,1,1); ++ gtk_widget_set_visible(alignment_right, TRUE); ++#endif + } /* Warnings area widget definition end */ + + g_box_assistant = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0)); +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index 2c1f99e..3ad43d6 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -31,8 +31,8 @@ + + True + False +- 4 +- gtk-media-record ++ 4 ++ media-record + 1 + + +@@ -45,7 +45,7 @@ + + True + False +- 6 ++ 6 + 3 + 3 + Possible sensitive data detected, feel free to edit the report and remove them. +@@ -81,7 +81,7 @@ + True + True + False +- 0 ++ start + True + + +@@ -151,8 +151,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + True + + +@@ -170,8 +170,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + On the following screens, you will be asked to describe how the problem occurred, to choose how to analyze the problem (if needed), to review collected data, and to choose where the problem should be reported. Click 'Forward' to proceed. + True + +@@ -230,8 +230,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + How did this problem happen (step-by-step)? How can it be reproduced? Any additional comments useful for diagnosing the problem? Please use English if possible. + True + +@@ -282,8 +282,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + <b>Your comments are not private.</b> They may be included into publicly visible problem reports. + True + True +@@ -302,7 +302,7 @@ + + True + False +- 1 ++ end + If you don't know how to describe it, you can + + +@@ -319,7 +319,7 @@ + True + True + none +- 0 ++ start + + + False +@@ -340,7 +340,7 @@ + True + True + False +- 0 ++ start + True + + +@@ -486,8 +486,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + Please review the data before it gets reported. Depending on reporter chosen, it may end up publicly visible. + True + +@@ -553,7 +553,7 @@ + True + True + False +- 0 ++ start + True + True + +@@ -569,7 +569,7 @@ + True + True + False +- 0 ++ start + True + rb_forbidden_words + +@@ -700,7 +700,7 @@ + + True + False +- 0 ++ start + Size: + right + +@@ -716,7 +716,7 @@ + + True + False +- 0 ++ start + + + 1 +@@ -781,7 +781,7 @@ + False + If you are reporting to a remote server, make sure you removed all private data (such as usernames and passwords). Backtrace, command line, environment variables are the typical items in need of examining. + True +- 0 ++ start + True + + +@@ -835,7 +835,7 @@ + + True + False +- 0 ++ start + Processing did not start yet + True + fill +@@ -902,8 +902,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + Reporting has finished. You can close this window now. + True + +@@ -917,8 +917,8 @@ + + True + False +- 0 +- 0 ++ start ++ start + If you want to report the problem to a different destination, collect additional information, or provide a better problem description and repeat reporting process, press 'Forward'. + True + +-- +2.0.4 + diff --git a/0013-gui-fix-build-errors-introduced-in-the-previous-comm.patch b/0013-gui-fix-build-errors-introduced-in-the-previous-comm.patch new file mode 100644 index 0000000..4a84848 --- /dev/null +++ b/0013-gui-fix-build-errors-introduced-in-the-previous-comm.patch @@ -0,0 +1,30 @@ +From 4f5c37633628ddc5ade13ba8407c2e2c725aa206 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 08:02:17 +0200 +Subject: [PATCH 13/20] gui: fix build errors introduced in the previous commit + +Fixes commit 8190657d9fb808277f29e5535983a0a1f55badcf + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index d442495..993b602 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -3470,9 +3470,9 @@ void create_assistant(bool expert_mode) + gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), GTK_WIDGET(vbox), false, false, 0); + + #if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) +- gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), alignment_right, true, false, 0); + GtkWidget *alignment_right = gtk_alignment_new(0.5,0.5,1,1); + gtk_widget_set_visible(alignment_right, TRUE); ++ gtk_box_pack_start(GTK_BOX(g_widget_warnings_area), alignment_right, true, false, 0); + #endif + } /* Warnings area widget definition end */ + +-- +2.0.4 + diff --git a/0014-gui-generate-the-glade-file-with-glade-3.18.patch b/0014-gui-generate-the-glade-file-with-glade-3.18.patch new file mode 100644 index 0000000..7a5f33e --- /dev/null +++ b/0014-gui-generate-the-glade-file-with-glade-3.18.patch @@ -0,0 +1,542 @@ +From 2f8a61ce9fcf8e83a6cc54b7e5b64c0baf91999f Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 08:28:54 +0200 +Subject: [PATCH 14/20] gui: generate the glade file with glade-3.18 + +No code changes. + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.glade | 447 ++++++++++++++++++++-------------------- + 1 file changed, 226 insertions(+), 221 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index 3ad43d6..c4a86f1 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -1,6 +1,7 @@ + ++ + +- ++ + + True + False +@@ -16,6 +17,217 @@ + + + ++ ++ False ++ Use this button to generate more informative backtrace after you installed additional debug packages ++ ++ ++ True ++ False ++ True ++ True ++ 3 ++ ++ ++ True ++ False ++ start ++ start ++ Please review the data before it gets reported. Depending on reporter chosen, it may end up publicly visible. ++ True ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ True ++ vertical ++ ++ ++ True ++ True ++ True ++ True ++ True ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ ++ ++ True ++ True ++ 1 ++ ++ ++ True ++ False ++ vertical ++ ++ ++ True ++ False ++ ++ ++ Sensitive words ++ True ++ True ++ False ++ start ++ 0.5 ++ True ++ True ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ Custom ++ True ++ True ++ False ++ start ++ 0.5 ++ True ++ rb_forbidden_words ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ True ++ True ++ ++ edit-find ++ False ++ Clear the search bar to see the list of security sensitive words. ++ Clear the search bar to see the list of security sensitive words. ++ ++ ++ True ++ True ++ 2 ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ True ++ in ++ ++ ++ True ++ True ++ ls_sensitive_words ++ False ++ False ++ False ++ 0 ++ both ++ True ++ ++ ++ ++ ++ ++ True ++ file ++ ++ ++ ++ 0 ++ ++ ++ ++ ++ ++ ++ True ++ data ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ 1 ++ ++ ++ ++ ++ ++ ++ True ++ False ++ Search ++ ++ ++ ++ ++ True ++ True ++ ++ ++ ++ ++ True ++ True ++ 1 ++ ++ ++ ++ ++ + + False + +@@ -33,7 +245,7 @@ + False + 4 + media-record +- 1 ++ 1 + + + False +@@ -82,6 +294,7 @@ + True + False + start ++ 0.5 + True + + +@@ -302,7 +515,7 @@ + + True + False +- end ++ end + If you don't know how to describe it, you can + + +@@ -318,8 +531,8 @@ + True + True + True +- none + start ++ none + + + False +@@ -341,6 +554,7 @@ + True + False + start ++ 0.5 + True + + +@@ -472,215 +686,11 @@ + + + +- +- False +- Use this button to generate more informative backtrace after you installed additional debug packages +- +- +- True +- False +- True +- True +- 3 +- +- +- True +- False +- start +- start +- Please review the data before it gets reported. Depending on reporter chosen, it may end up publicly visible. +- True +- +- +- False +- True +- 0 +- +- +- +- +- True +- True +- vertical +- +- +- True +- True +- True +- True +- True +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- True +- True +- +- +- +- +- True +- True +- 1 +- +- +- True +- False +- vertical +- +- +- True +- False +- +- +- Sensitive words +- True +- True +- False +- start +- True +- True +- +- +- False +- True +- 0 +- +- +- +- +- Custom +- True +- True +- False +- start +- True +- rb_forbidden_words +- +- +- False +- True +- 1 +- +- +- +- +- True +- False +- True +- True +- +- True +- edit-find +- False +- Clear the search bar to see the list of security sensitive words. +- Clear the search bar to see the list of security sensitive words. +- +- +- True +- True +- 2 +- +- +- +- +- False +- True +- 0 +- +- +- +- +- True +- True +- in +- +- +- True +- True +- ls_sensitive_words +- False +- False +- False +- 0 +- both +- True +- +- +- +- +- +- True +- file +- +- +- +- 0 +- +- +- +- +- +- +- True +- data +- +- +- +- 1 +- +- +- +- +- +- +- +- +- True +- True +- 1 +- +- +- +- +- +- +- True +- False +- Search +- +- +- +- +- True +- True +- +- +- +- +- True +- True +- 1 +- +- +- +- ++ ++ ++ ++ ++ + + + False +@@ -780,8 +790,9 @@ + True + False + If you are reporting to a remote server, make sure you removed all private data (such as usernames and passwords). Backtrace, command line, environment variables are the typical items in need of examining. +- True + start ++ True ++ 0.5 + True + + +@@ -822,7 +833,7 @@ + False + True + dialog-error +- 1 ++ 1 + + + False +@@ -954,10 +965,4 @@ + + + +- +- +- +- +- +- + +-- +2.0.4 + diff --git a/0015-gui-simplify-the-event-selector-page.patch b/0015-gui-simplify-the-event-selector-page.patch new file mode 100644 index 0000000..6fe9aa2 --- /dev/null +++ b/0015-gui-simplify-the-event-selector-page.patch @@ -0,0 +1,126 @@ +From 277b702a90a2d0406c8edb542d80d07f920362ae Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 08:33:37 +0200 +Subject: [PATCH 15/20] gui: simplify the event selector page + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.glade | 74 ++++++++++++----------------------------- + 1 file changed, 21 insertions(+), 53 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index c4a86f1..9e43cce 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -352,6 +352,7 @@ + + + ++ + + False + +@@ -575,67 +576,40 @@ + 10 + 3 + +- ++ + True + False + vertical + +- +- True +- False +- +- +- +- +- +- True +- True +- 0 +- +- +- +- +- True +- False +- vertical +- +- +- +- +- +- False +- True +- 1 +- +- +- +- +- True +- False +- +- +- +- +- +- True +- True +- 2 +- ++ + + + +- True ++ False + True + 0 + + + +- ++ + True +- False +- True ++ True ++ in + +- ++ ++ True ++ False ++ ++ ++ True ++ False ++ True ++ ++ ++ ++ ++ ++ + + + +@@ -686,12 +660,6 @@ + + + +- +- +- +- +- +- + + False + +-- +2.0.4 + diff --git a/0016-gui-conver-report-gtk-to-GtkApplication.patch b/0016-gui-conver-report-gtk-to-GtkApplication.patch new file mode 100644 index 0000000..bcd2c1a --- /dev/null +++ b/0016-gui-conver-report-gtk-to-GtkApplication.patch @@ -0,0 +1,238 @@ +From b0462c5b29b78961e4ec4a8ee706baa25b936d43 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 09:33:54 +0200 +Subject: [PATCH 16/20] gui: conver report-gtk to GtkApplication + +- improves compatibility with GNOME +- allows us to move "Preferences" to the application menu + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/main.c | 60 ++++++++++++++++++++++++++++++++++++----- + src/gui-wizard-gtk/wizard.c | 26 ++++-------------- + src/gui-wizard-gtk/wizard.glade | 39 --------------------------- + src/gui-wizard-gtk/wizard.h | 2 +- + 4 files changed, 60 insertions(+), 67 deletions(-) + +diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c +index 0bfa45c..697b91f 100644 +--- a/src/gui-wizard-gtk/main.c ++++ b/src/gui-wizard-gtk/main.c +@@ -72,6 +72,55 @@ void problem_data_reload_from_dump_dir(void) + g_cd = new_cd; + } + ++static void ++preferences_activated(GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ GtkApplication *app = GTK_APPLICATION(data); ++ show_config_list_dialog(GTK_WINDOW(gtk_application_get_active_window(app))); ++} ++ ++static void ++quit_activated(GSimpleAction *action, ++ GVariant *parameter, ++ gpointer data) ++{ ++ g_application_quit(G_APPLICATION(data)); ++} ++ ++static GActionEntry app_entries[] = ++{ ++ { "preferences", preferences_activated, NULL, NULL, NULL }, ++ { "quit", quit_activated, NULL, NULL, NULL } ++}; ++ ++static void ++startup_wizard(GApplication *app, ++ gpointer user_data) ++{ ++ g_action_map_add_action_entries(G_ACTION_MAP (app), ++ app_entries, G_N_ELEMENTS (app_entries), ++ app); ++ ++ GMenu *app_menu = g_menu_new(); ++ g_menu_append(app_menu, _("Preferences"), "app.preferences"); ++ ++ GMenu *service_app_menu_sec = g_menu_new(); ++ g_menu_append(service_app_menu_sec, _("Quit"), "app.quit"); ++ g_menu_append_section(app_menu, /*no title*/NULL, G_MENU_MODEL(service_app_menu_sec)); ++ ++ gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL(app_menu)); ++} ++ ++static void ++activate_wizard(GApplication *app, ++ gpointer user_data) ++{ ++ create_assistant(GTK_APPLICATION(app), (bool)user_data); ++ update_gui_state_from_problem_data(UPDATE_SELECTED_EVENT); ++} ++ + int main(int argc, char **argv) + { + bool expert_mode = false; +@@ -166,14 +215,13 @@ int main(int argc, char **argv) + + problem_data_reload_from_dump_dir(); + +- create_assistant(expert_mode); +- + g_custom_logger = &show_error_as_msgbox; +- +- update_gui_state_from_problem_data(UPDATE_SELECTED_EVENT); +- ++ GtkApplication *app = gtk_application_new("org.freedesktop.libreport.report", G_APPLICATION_FLAGS_NONE); ++ g_signal_connect(app, "activate", G_CALLBACK(activate_wizard), (gpointer)expert_mode); ++ g_signal_connect(app, "startup", G_CALLBACK(startup_wizard), NULL); + /* Enter main loop */ +- gtk_main(); ++ g_application_run(G_APPLICATION(app), argc, argv); ++ g_object_unref(app); + + if (opts & OPT_d) + delete_dump_dir_possibly_using_abrtd(g_dump_dir_name); +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 993b602..5c4bd6a 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -2174,12 +2174,6 @@ static void on_log_changed(GtkTextBuffer *buffer, gpointer user_data) + gtk_widget_show(GTK_WIDGET(g_exp_report_log)); + } + +- +-static void on_show_event_list_cb(GtkWidget *button, gpointer user_data) +-{ +- show_config_list_dialog(GTK_WINDOW(g_wnd_assistant)); +-} +- + #if 0 + static void log_ready_state(void) + { +@@ -3237,16 +3231,6 @@ static void add_pages(void) + gtk_widget_override_font(GTK_WIDGET(g_tv_event_log), g_monospace_font); + fix_all_wrapped_labels(GTK_WIDGET(g_assistant)); + +- /* Configure btn on select analyzers page */ +- GtkWidget *img_config_btn = gtk_image_new_from_icon_name("preferences-system", GTK_ICON_SIZE_BUTTON); +- GtkWidget *config_btn = GTK_WIDGET(gtk_builder_get_object(g_builder, "button_cfg1")); +- if (config_btn) +- { +- g_signal_connect(G_OBJECT(config_btn), "clicked", G_CALLBACK(on_show_event_list_cb), NULL); +- gtk_button_set_image(GTK_BUTTON(config_btn), img_config_btn); +- gtk_button_set_image_position(GTK_BUTTON(config_btn), GTK_POS_RIGHT); +- } +- + g_signal_connect(g_cb_no_comment, "toggled", G_CALLBACK(on_no_comment_toggled), NULL); + + g_signal_connect(g_rb_forbidden_words, "toggled", G_CALLBACK(on_forbidden_words_toggled), NULL); +@@ -3342,7 +3326,7 @@ static void assistant_quit_cb(void *obj, void *data) + g_loaded_texts = NULL; + } + +- gtk_main_quit(); ++ gtk_widget_destroy(GTK_WIDGET(data)); + } + + static void on_btn_startcast(GtkWidget *btn, gpointer user_data) +@@ -3398,7 +3382,7 @@ static bool is_screencast_available() + return status == 0; + } + +-void create_assistant(bool expert_mode) ++void create_assistant(GtkApplication *app, bool expert_mode) + { + g_loaded_texts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + +@@ -3487,7 +3471,7 @@ void create_assistant(bool expert_mode) + gtk_widget_hide(g_btn_onfail); + gtk_widget_show(g_btn_next); + +- g_wnd_assistant = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); ++ g_wnd_assistant = GTK_WINDOW(gtk_application_window_new(app)); + gtk_container_add(GTK_CONTAINER(g_wnd_assistant), GTK_WIDGET(g_box_assistant)); + + gtk_window_set_default_size(g_wnd_assistant, DEFAULT_WIDTH, DEFAULT_HEIGHT); +@@ -3502,12 +3486,12 @@ void create_assistant(bool expert_mode) + + create_details_treeview(); + +- g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), NULL); ++ g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); + g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL); + g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL); + g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL); + +- g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), NULL); ++ g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); + g_signal_connect(g_assistant, "switch-page", G_CALLBACK(on_page_prepare), NULL); + + g_signal_connect(g_tb_approve_bt, "toggled", G_CALLBACK(on_bt_approve_toggle), NULL); +diff --git a/src/gui-wizard-gtk/wizard.glade b/src/gui-wizard-gtk/wizard.glade +index 9e43cce..854a402 100644 +--- a/src/gui-wizard-gtk/wizard.glade ++++ b/src/gui-wizard-gtk/wizard.glade +@@ -618,45 +618,6 @@ + 1 + + +- +- +- True +- False +- +- +- _Preferences +- True +- True +- True +- True +- +- +- False +- False +- 0 +- +- +- +- +- True +- False +- +- +- +- +- +- True +- True +- 1 +- +- +- +- +- False +- False +- 2 +- +- + + + +diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h +index a6d8b5d..4c891dc 100644 +--- a/src/gui-wizard-gtk/wizard.h ++++ b/src/gui-wizard-gtk/wizard.h +@@ -21,7 +21,7 @@ + + #include "internal_libreport_gtk.h" + +-void create_assistant(bool expert_mode); ++void create_assistant(GtkApplication *app, bool expert_mode); + + enum + { +-- +2.0.4 + diff --git a/0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch b/0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch new file mode 100644 index 0000000..66c8b7e --- /dev/null +++ b/0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch @@ -0,0 +1,53 @@ +From 109702a42d08e52f54c5f740b370a3ec9a3a5d16 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 13:44:02 +0200 +Subject: [PATCH 17/20] gui: clear the sensitive cache between two event runs + +Was causing a SIGSEGV. + +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 5c4bd6a..fc44547 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -1123,6 +1123,31 @@ static void remove_tabs_from_notebook(GtkNotebook *notebook) + */ + gtk_notebook_remove_page(notebook, 0); //we need to always the page 0 + } ++ ++ /* Turn off the changed callback during the update */ ++ g_signal_handler_block(g_tv_sensitive_sel, g_tv_sensitive_sel_hndlr); ++ ++ g_current_highlighted_word = NULL; ++ ++ GtkTreeIter iter; ++ gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_ls_sensitive_list), &iter); ++ while (valid) ++ { ++ char *text = NULL; ++ search_item_t *word = NULL; ++ ++ gtk_tree_model_get(GTK_TREE_MODEL(g_ls_sensitive_list), &iter, ++ SEARCH_COLUMN_TEXT, &text, ++ SEARCH_COLUMN_ITEM, &word, ++ -1); ++ ++ free(text); ++ free(word); ++ ++ valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(g_ls_sensitive_list), &iter); ++ } ++ gtk_list_store_clear(g_ls_sensitive_list); ++ g_signal_handler_unblock(g_tv_sensitive_sel, g_tv_sensitive_sel_hndlr); + } + + static void append_item_to_ls_details(gpointer name, gpointer value, gpointer data) +-- +2.0.4 + diff --git a/0018-gui-don-t-remove-already-removed-GTimeoutSource.patch b/0018-gui-don-t-remove-already-removed-GTimeoutSource.patch new file mode 100644 index 0000000..a5f2d52 --- /dev/null +++ b/0018-gui-don-t-remove-already-removed-GTimeoutSource.patch @@ -0,0 +1,54 @@ +From b4dbde9febbc85ead1d7c650df858936828e31a2 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 13:46:57 +0200 +Subject: [PATCH 18/20] gui: don't remove already removed GTimeoutSource + +Was causing a GLib warning + +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index fc44547..c9d5926 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -2956,17 +2956,20 @@ static void on_sensitive_word_selection_changed(GtkTreeSelection *sel, gpointer + gtk_text_view_scroll_to_iter(new_word->tev, &(new_word->start), 0.0, false, 0, 0); + } + +-static gboolean highlight_search(gpointer user_data) ++static void highlight_search(GtkEntry *entry) + { +- GtkEntry *entry = GTK_ENTRY(user_data); +- + g_search_text = gtk_entry_get_text(entry); + + log_notice("searching: '%s'", g_search_text); + GList *words = g_list_append(NULL, (gpointer)g_search_text); + highligh_words_in_tabs(words, NULL, /*case insensitive*/true); + g_list_free(words); ++} + ++static gboolean highlight_search_on_timeout(gpointer user_data) ++{ ++ g_timeout = 0; ++ highlight_search(GTK_ENTRY(user_data)); + /* returning false will make glib to remove this event */ + return false; + } +@@ -2980,7 +2983,7 @@ static void search_timeout(GtkEntry *entry) + */ + if (g_timeout != 0) + g_source_remove(g_timeout); +- g_timeout = g_timeout_add(500, &highlight_search, (gpointer)entry); ++ g_timeout = g_timeout_add(500, &highlight_search_on_timeout, (gpointer)entry); + } + + static void on_forbidden_words_toggled(GtkToggleButton *btn, gpointer user_data) +-- +2.0.4 + diff --git a/0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch b/0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch new file mode 100644 index 0000000..781baf7 --- /dev/null +++ b/0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch @@ -0,0 +1,130 @@ +From aa8b6220a83dbccc9df31f988c1b8dcfef8833b5 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 13:48:59 +0200 +Subject: [PATCH 19/20] gui: reload destroyed sensitive data warn widgets from + the galde + +clear_warnings() destroys the warning widgets. The sensitive data +widgets needs to be reloaded as GtkBuilder does not return clones of +object but the instances from its cache. + +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 75 +++++++++++++++++++++++++++------------------ + 1 file changed, 46 insertions(+), 29 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index c9d5926..e803394 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -229,6 +229,45 @@ static bool check_minimal_bt_rating(const char *event_name); + static char *get_next_processed_event(GList **events_list); + static void on_next_btn_cb(GtkWidget *btn, gpointer user_data); + ++/* wizard.glade file as a string WIZARD_GLADE_CONTENTS: */ ++#include "wizard_glade.c" ++ ++static GtkBuilder *make_builder() ++{ ++ GError *error = NULL; ++ GtkBuilder *builder = gtk_builder_new(); ++ if (!g_glade_file) ++ { ++ /* load additional widgets from glade */ ++ gtk_builder_add_objects_from_string(builder, ++ WIZARD_GLADE_CONTENTS, sizeof(WIZARD_GLADE_CONTENTS) - 1, ++ (gchar**)misc_widgets, ++ &error); ++ if (error != NULL) ++ error_msg_and_die("Error loading glade data: %s", error->message); ++ /* Load pages from internal string */ ++ gtk_builder_add_objects_from_string(builder, ++ WIZARD_GLADE_CONTENTS, sizeof(WIZARD_GLADE_CONTENTS) - 1, ++ (gchar**)page_names, ++ &error); ++ if (error != NULL) ++ error_msg_and_die("Error loading glade data: %s", error->message); ++ } ++ else ++ { ++ /* -g FILE: load UI from it */ ++ /* load additional widgets from glade */ ++ gtk_builder_add_objects_from_file(builder, g_glade_file, (gchar**)misc_widgets, &error); ++ if (error != NULL) ++ error_msg_and_die("Can't load %s: %s", g_glade_file, error->message); ++ gtk_builder_add_objects_from_file(builder, g_glade_file, (gchar**)page_names, &error); ++ if (error != NULL) ++ error_msg_and_die("Can't load %s: %s", g_glade_file, error->message); ++ } ++ ++ return builder; ++} ++ + static void label_wrapper(GtkWidget *widget, gpointer data_unused) + { + if (GTK_IS_CONTAINER(widget)) +@@ -2108,11 +2147,15 @@ static void on_sensitive_ticket_clicked_cb(GtkWidget *button, gpointer user_data + + static void add_sensitive_data_warning(void) + { +- GtkWidget *sens_data_warn = GTK_WIDGET(gtk_builder_get_object(g_builder, SENSITIVE_DATA_WARN)); +- GtkButton *sens_ticket_cb = GTK_BUTTON(gtk_builder_get_object(g_builder, PRIVATE_TICKET_CB)); ++ GtkBuilder *builder = make_builder(); ++ ++ GtkWidget *sens_data_warn = GTK_WIDGET(gtk_builder_get_object(builder, SENSITIVE_DATA_WARN)); ++ GtkButton *sens_ticket_cb = GTK_BUTTON(gtk_builder_get_object(builder, PRIVATE_TICKET_CB)); + + g_signal_connect(sens_ticket_cb, "toggled", G_CALLBACK(on_sensitive_ticket_clicked_cb), NULL); + add_widget_to_warning_area(GTK_WIDGET(sens_data_warn)); ++ ++ g_object_unref(builder); + } + + static void show_warnings(void) +@@ -3173,9 +3216,6 @@ static gint on_key_press_event_in_item_list(GtkTreeView *treeview, GdkEventKey * + + /* Initialization */ + +-/* wizard.glade file as a string WIZARD_GLADE_CONTENTS: */ +-#include "wizard_glade.c" +- + static void on_next_btn_cb(GtkWidget *btn, gpointer user_data) + { + gint current_page_no = gtk_notebook_get_current_page(g_assistant); +@@ -3190,30 +3230,7 @@ static void on_next_btn_cb(GtkWidget *btn, gpointer user_data) + + static void add_pages(void) + { +- GError *error = NULL; +- g_builder = gtk_builder_new(); +- if (!g_glade_file) +- { +- /* load additional widgets from glade */ +- gtk_builder_add_objects_from_string(g_builder, +- WIZARD_GLADE_CONTENTS, sizeof(WIZARD_GLADE_CONTENTS) - 1, +- (gchar**)misc_widgets, +- &error); +- /* Load pages from internal string */ +- gtk_builder_add_objects_from_string(g_builder, +- WIZARD_GLADE_CONTENTS, sizeof(WIZARD_GLADE_CONTENTS) - 1, +- (gchar**)page_names, +- &error); +- if (error != NULL) +- error_msg_and_die("Error loading glade data: %s", error->message); +- } +- else +- { +- /* -g FILE: load IU from it */ +- gtk_builder_add_objects_from_file(g_builder, g_glade_file, (gchar**)page_names, &error); +- if (error != NULL) +- error_msg_and_die("Can't load %s: %s", g_glade_file, error->message); +- } ++ g_builder = make_builder(); + + int i; + int page_no = 0; +-- +2.0.4 + diff --git a/0020-gui-add-Repeat-button.patch b/0020-gui-add-Repeat-button.patch new file mode 100644 index 0000000..eb2fa8f --- /dev/null +++ b/0020-gui-add-Repeat-button.patch @@ -0,0 +1,244 @@ +From 8db880a2c6add7137aac9f8562ae73aef3e1e436 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 30 Jul 2014 13:53:02 +0200 +Subject: [PATCH 20/20] gui: add "Repeat" button + +If an event run fails, the button allows users to modify the +configuration and re-run the event. + +v2: +- add a help text explaining what to do before clicking "Repeat" button + +Related to rhbz#1069917 + +Signed-off-by: Jakub Filak +--- + src/gui-wizard-gtk/wizard.c | 83 ++++++++++++++++++++++++++++++++++----------- + 1 file changed, 63 insertions(+), 20 deletions(-) + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index e803394..e4718bf 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -68,6 +68,7 @@ static GtkWidget *g_btn_stop; + static GtkWidget *g_btn_close; + static GtkWidget *g_btn_next; + static GtkWidget *g_btn_onfail; ++static GtkWidget *g_btn_repeat; + + static GtkBox *g_box_events; + static GtkBox *g_box_workflows; +@@ -1573,24 +1574,31 @@ static void show_next_step_button() + gtk_widget_show(g_btn_next); + } + +-static void terminate_event_chain() ++enum { ++ TERMINATE_NOFLAGS = 0, ++ TERMINATE_WITH_RERUN = 1 << 0, ++}; ++ ++static void terminate_event_chain(int flags) + { + if (g_expert_mode) + return; + ++ hide_next_step_button(); ++ if ((flags & TERMINATE_WITH_RERUN)) ++ return; ++ + free(g_event_selected); + g_event_selected = NULL; + + g_list_free_full(g_auto_event_list, free); + g_auto_event_list = NULL; +- +- hide_next_step_button(); + } + +-static void cancel_processing(GtkLabel *status_label, const char *message) ++static void cancel_processing(GtkLabel *status_label, const char *message, int terminate_flags) + { + gtk_label_set_text(status_label, message ? message : _("Processing was canceled")); +- terminate_event_chain(); ++ terminate_event_chain(terminate_flags); + } + + static void update_command_run_log(const char* message, struct analyze_event_data *evd) +@@ -1755,6 +1763,25 @@ static void on_btn_failed_cb(GtkButton *button) + gtk_widget_hide(GTK_WIDGET(button)); + } + ++static gint select_next_page_no(gint current_page_no, gpointer data); ++static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer user_data); ++ ++static void on_btn_repeat_cb(GtkButton *button) ++{ ++ g_auto_event_list = g_list_prepend(g_auto_event_list, g_event_selected); ++ g_event_selected = NULL; ++ ++ show_next_step_button(); ++ clear_warnings(); ++ ++ const gint current_page_no = gtk_notebook_get_current_page(g_assistant); ++ const int next_page_no = select_next_page_no(pages[PAGENO_SUMMARY].page_no, NULL); ++ if (current_page_no == next_page_no) ++ on_page_prepare(g_assistant, gtk_notebook_get_nth_page(g_assistant, next_page_no), NULL); ++ else ++ gtk_notebook_set_current_page(g_assistant, next_page_no); ++} ++ + static void on_failed_event(const char *event_name) + { + /* Don't show the 'on failure' button if the processed event +@@ -1764,14 +1791,25 @@ static void on_failed_event(const char *event_name) + return; + + add_warning( +-_("Processing of the problem failed. This can have many reasons but there are two most common:\n"\ ++_("Processing of the problem failed. This can have many reasons but there are three most common:\n"\ + "\t▫ network connection problems\n"\ +-"\t▫ corrupted problem data\n")); ++"\t▫ corrupted problem data\n"\ ++"\t▫ invalid configuration" ++)); ++ ++ if (!g_expert_mode) ++ { ++ add_warning( ++_("If you want to update the configuration and try to report again, please open Preferences item\n" ++"in the application menu and after applying the configuration changes click Repeat button.")); ++ gtk_widget_show(g_btn_repeat); ++ } + + add_warning( +-_("If you want to help us, please click on the upload button and provide all problem data for a deep analysis.\n"\ +-"Before you do that, please consider the security risks. Problem data may contain sensitive information like passwords.\n"\ +-"The uploaded data are stored in a protected storage and only a limited number of persons can read them.")); ++_("If you are sure that this problem is not caused by network problems neither by invalid configuration\n" ++"and want to help us, please click on the upload button and provide all problem data for a deep analysis.\n"\ ++"Before you do that, please consider the security risks. Problem data may contain sensitive information like\n"\ ++"passwords. The uploaded data are stored in a protected storage and only a limited number of persons can read them.")); + + show_warnings(); + +@@ -1798,7 +1836,7 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g + retval = 0; + run_state->process_status = 0; + stop_requested = true; +- terminate_event_chain(); ++ terminate_event_chain(TERMINATE_NOFLAGS); + } + + unexport_event_config(evd->env_list); +@@ -1887,17 +1925,17 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g + gtk_widget_show(GTK_WIDGET(g_img_process_fail)); + /* 256 means NOT_REPORTABLE */ + if (retval == 256) +- cancel_processing(g_lbl_event_log, _("Processing was interrupted because the problem is not reportable.")); ++ cancel_processing(g_lbl_event_log, _("Processing was interrupted because the problem is not reportable."), TERMINATE_NOFLAGS); + else + { + /* We use SIGTERM to stop event processing on user's request. + * So SIGTERM is not a failure. + */ + if (retval == EXIT_CANCEL_BY_USER || WTERMSIG(run_state->process_status) == SIGTERM) +- cancel_processing(g_lbl_event_log, /* default message */ NULL); ++ cancel_processing(g_lbl_event_log, /* default message */ NULL, TERMINATE_NOFLAGS); + else + { +- cancel_processing(g_lbl_event_log, _("Processing failed.")); ++ cancel_processing(g_lbl_event_log, _("Processing failed."), TERMINATE_WITH_RERUN); + on_failed_event(evd->event_name); + } + } +@@ -2036,7 +2074,7 @@ static void start_event_run(const char *event_name) + char *msg = xasprintf(_("No processing for event '%s' is defined"), event_name); + append_to_textview(g_tv_event_log, msg); + free(msg); +- cancel_processing(g_lbl_event_log, _("Processing failed.")); ++ cancel_processing(g_lbl_event_log, _("Processing failed."), TERMINATE_NOFLAGS); + return; + } + +@@ -2047,7 +2085,7 @@ static void start_event_run(const char *event_name) + free_run_event_state(state); + if (!g_expert_mode) + { +- cancel_processing(g_lbl_event_log, _("Processing interrupted: can't continue without writable directory.")); ++ cancel_processing(g_lbl_event_log, _("Processing interrupted: can't continue without writable directory."), TERMINATE_NOFLAGS); + } + return; /* user refused to steal, or write error, etc... */ + } +@@ -2534,8 +2572,6 @@ static gboolean highlight_forbidden(void) + return result; + } + +-static gint select_next_page_no(gint current_page_no, gpointer data); +- + static char *get_next_processed_event(GList **events_list) + { + if (!events_list || !*events_list) +@@ -2647,6 +2683,8 @@ static void on_page_prepare(GtkNotebook *assistant, GtkWidget *page, gpointer us + } + + gtk_widget_hide(g_btn_onfail); ++ if (!g_expert_mode) ++ gtk_widget_hide(g_btn_repeat); + /* Save text fields if changed */ + /* Must be called before any GUI operation because the following two + * functions causes recreating of the text items tabs, thus all updates to +@@ -2867,7 +2905,7 @@ static gint select_next_page_no(gint current_page_no, gpointer data) + { + free(event); + +- cancel_processing(g_lbl_event_log, /* default message */ NULL); ++ cancel_processing(g_lbl_event_log, /* default message */ NULL, TERMINATE_NOFLAGS); + current_page_no = pages[PAGENO_EVENT_PROGRESS].page_no - 1; + goto again; + } +@@ -2880,7 +2918,7 @@ static gint select_next_page_no(gint current_page_no, gpointer data) + "(it is likely a known problem). %s"), + problem_data_get_content_or_NULL(g_cd, FILENAME_NOT_REPORTABLE) + ); +- cancel_processing(g_lbl_event_log, msg); ++ cancel_processing(g_lbl_event_log, msg, TERMINATE_NOFLAGS); + free(msg); + current_page_no = pages[PAGENO_EVENT_PROGRESS].page_no - 1; + goto again; +@@ -3453,6 +3491,8 @@ void create_assistant(GtkApplication *app, bool expert_mode) + g_btn_onfail = gtk_button_new_with_label(_("Upload for analysis")); + gtk_button_set_image(GTK_BUTTON(g_btn_onfail), gtk_image_new_from_icon_name("go-up", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_onfail, true); /* else gtk_widget_hide won't work */ ++ g_btn_repeat = gtk_button_new_with_label(_("Repeat")); ++ gtk_widget_set_no_show_all(g_btn_repeat, true); /* else gtk_widget_hide won't work */ + g_btn_next = gtk_button_new_with_mnemonic(_("_Forward")); + gtk_button_set_image(GTK_BUTTON(g_btn_next), gtk_image_new_from_icon_name("go-next", GTK_ICON_SIZE_BUTTON)); + gtk_widget_set_no_show_all(g_btn_next, true); /* else gtk_widget_hide won't work */ +@@ -3461,6 +3501,7 @@ void create_assistant(GtkApplication *app, bool expert_mode) + gtk_box_pack_start(g_box_buttons, g_btn_close, false, false, 5); + gtk_box_pack_start(g_box_buttons, g_btn_stop, false, false, 5); + gtk_box_pack_start(g_box_buttons, g_btn_onfail, false, false, 5); ++ gtk_box_pack_start(g_box_buttons, g_btn_repeat, false, false, 5); + /* Btns above are to the left, the rest are to the right: */ + #if ((GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION < 13) || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION == 13 && GTK_MICRO_VERSION < 5)) + GtkWidget *w = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); +@@ -3514,6 +3555,7 @@ void create_assistant(GtkApplication *app, bool expert_mode) + gtk_widget_show_all(GTK_WIDGET(g_box_buttons)); + gtk_widget_hide(g_btn_stop); + gtk_widget_hide(g_btn_onfail); ++ gtk_widget_hide(g_btn_repeat); + gtk_widget_show(g_btn_next); + + g_wnd_assistant = GTK_WINDOW(gtk_application_window_new(app)); +@@ -3534,6 +3576,7 @@ void create_assistant(GtkApplication *app, bool expert_mode) + g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); + g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), NULL); + g_signal_connect(g_btn_onfail, "clicked", G_CALLBACK(on_btn_failed_cb), NULL); ++ g_signal_connect(g_btn_repeat, "clicked", G_CALLBACK(on_btn_repeat_cb), NULL); + g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL); + + g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(assistant_quit_cb), g_wnd_assistant); +-- +2.0.4 + diff --git a/libreport.spec b/libreport.spec index 406f05b..4c64d16 100644 --- a/libreport.spec +++ b/libreport.spec @@ -7,7 +7,7 @@ Summary: Generic library for reporting various problems Name: libreport Version: 2.2.3 -Release: 4%{?dist} +Release: 5%{?dist} License: GPLv2+ Group: System Environment/Libraries URL: https://fedorahosted.org/abrt/ @@ -22,8 +22,18 @@ Patch5: 0005-wizard-fix-help-text-for-screencasting.patch Patch6: 0006-gui-support-Enter-2Click-in-Preferences-list.patch Patch7: 0007-gui-apply-configuration-dialogues-changes-on-Enter-k.patch Patch8: 0008-gui-close-ask-dialogues-on-Enter-key.patch -Patch9: 0001-json-include-json.h-accordingly-to-json-c-CFLAGS.patch -Patch10: 0001-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch +Patch9: 0009-logging-test-log-level-at-first-step.patch +Patch10: 0010-json-include-json.h-accordingly-to-json-c-CFLAGS.patch +Patch11: 0011-ureport-include-json.h-accordingly-to-json-c-CFLAGS.patch +Patch12: 0012-gui-port-to-gtk-3.13.patch +Patch13: 0013-gui-fix-build-errors-introduced-in-the-previous-comm.patch +Patch14: 0014-gui-generate-the-glade-file-with-glade-3.18.patch +Patch15: 0015-gui-simplify-the-event-selector-page.patch +Patch16: 0016-gui-conver-report-gtk-to-GtkApplication.patch +Patch17: 0017-gui-clear-the-sensitive-cache-between-two-event-runs.patch +Patch18: 0018-gui-don-t-remove-already-removed-GTimeoutSource.patch +Patch19: 0019-gui-reload-destroyed-sensitive-data-warn-widgets-fro.patch +Patch20: 0020-gui-add-Repeat-button.patch # git is need for '%%autosetup -S git' which automatically applies all the # patches above. Please, be aware that the patches must be generated @@ -662,6 +672,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog +* Tue Aug 19 2014 Jakub Filak 2.2.3-5 +- add the "Repeat" button to the reporting wizard +- a bunch of GUI improvements +- fix a bug in logging causing reporter-ureport to crash + * Sun Aug 17 2014 Fedora Release Engineering - 2.2.3-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild