From 00e81b42a7aecbcc226a1603f6f903d23ae34577 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mar 29 2011 19:36:50 +0000 Subject: many fixes - improved gnmoe3 compatibility - added analyzer selector to cli - fixed problems with hash+retrace+bugzilla --- diff --git a/a-a-a-backtrace_better_error_handling.patch b/a-a-a-backtrace_better_error_handling.patch new file mode 100644 index 0000000..b03f707 --- /dev/null +++ b/a-a-a-backtrace_better_error_handling.patch @@ -0,0 +1,35 @@ +commit 4def4f1609679232ea2c457ccc6bc4621184201d +Author: Karel Klic +Date: Mon Mar 28 18:08:55 2011 +0200 + + abrt-action-analyze-backtrace: log backtrace parser failure every time; remove dead code + +diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c +index e65b178..b690fc9 100644 +--- a/src/plugins/abrt-action-analyze-backtrace.c ++++ b/src/plugins/abrt-action-analyze-backtrace.c +@@ -88,13 +88,7 @@ int main(int argc, char **argv) + char *executable = dd_load_text(dd, FILENAME_EXECUTABLE); + + /* Read backtrace */ +- /* NB: get_backtrace() closes dd */ + char *backtrace_str = dd_load_text(dd, FILENAME_BACKTRACE); +- if (!backtrace_str) +- { +- backtrace_str = xstrdup(""); +- log("Backtrace file is missing"); +- } + + /* Compute backtrace hash */ + struct btp_location location; +@@ -110,8 +104,8 @@ int main(int argc, char **argv) + * The parser failed. Compute the UUID from the executable + * and package only. This is not supposed to happen often. + */ +- VERB1 log(_("Backtrace parsing failed for %s"), dump_dir_name); +- VERB1 log("%d:%d: %s", location.line, location.column, location.message); ++ log(_("Backtrace parsing failed for %s"), dump_dir_name); ++ log("%d:%d: %s", location.line, location.column, location.message); + struct strbuf *emptybt = strbuf_new(); + strbuf_prepend_str(emptybt, executable); + strbuf_prepend_str(emptybt, package); diff --git a/a-a-a_better2.patch b/a-a-a_better2.patch new file mode 100644 index 0000000..eb3ef8a --- /dev/null +++ b/a-a-a_better2.patch @@ -0,0 +1,25 @@ +commit 1972460bf7ad803097f8fb669dcb858f6135c7d5 +Author: Karel Klic +Date: Mon Mar 28 18:19:01 2011 +0200 + + abrt-action-analyze-backtrace: report failure when run on a dump_dir without backtrace + +diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c +index b690fc9..7ae7e47 100644 +--- a/src/plugins/abrt-action-analyze-backtrace.c ++++ b/src/plugins/abrt-action-analyze-backtrace.c +@@ -88,7 +88,13 @@ int main(int argc, char **argv) + char *executable = dd_load_text(dd, FILENAME_EXECUTABLE); + + /* Read backtrace */ +- char *backtrace_str = dd_load_text(dd, FILENAME_BACKTRACE); ++ char *backtrace_str = dd_load_text_ext(dd, FILENAME_BACKTRACE, ++ DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE); ++ if (!backtrace_str) ++ { ++ dd_close(dd); ++ return 1; ++ } + + /* Compute backtrace hash */ + struct btp_location location; diff --git a/abrt.spec b/abrt.spec index 219b37b..ba9233a 100644 --- a/abrt.spec +++ b/abrt.spec @@ -16,7 +16,7 @@ %if "0%{?_buildid}" != "0" %define pkg_release 0.%{?_buildid}%{?dist} %else -%define pkg_release 1%{?dist} +%define pkg_release 2%{?dist} %endif Summary: Automatic bug detection and reporting tool @@ -31,6 +31,14 @@ Source1: abrt.init Source2: abrt-ccpp.init Patch0: remove_libreport_python.patch Patch1: settings_warning.patch +Patch2: notify_persistence.patch +Patch3: notify_init_name.patch +Patch4: hash_not_in_bz.patch +Patch5: dont_continue_if_event_fails.patch +Patch6: cli_analyze_action_select.patch +Patch7: a-a-a-backtrace_better_error_handling.patch +Patch8: a-a-a_better2.patch +Patch9: g_prgname.patch BuildRequires: dbus-devel BuildRequires: gtk2-devel BuildRequires: curl-devel @@ -267,6 +275,14 @@ generation service over a network using HTTP protocol. %patch0 -p1 -b .libreport_py # FIXME remove when settings check is implemented %patch1 -p1 -b .warning +%patch2 -p1 -b .persistence +%patch3 -p1 -b .notify_progname +%patch4 -p1 -b .bz_hash +%patch5 -p1 -b .analyze_fail +%patch6 -p1 -b .cli_analyze_select +%patch7 -p1 -b .error_handling +%patch8 -p1 -b .error_handling2 +%patch9 -p1 -b .prgname %build autoconf @@ -578,6 +594,10 @@ fi %changelog * Tue Mar 29 2011 Jiri Moskovcak 2.0.0-2 - use %ghost on files in /var/run and /var/lock rhbz#656542 +- fixed notification persistence in gnome3 +- added analyze selector to CLI +- refuse reporting to bz without backtrace or hash +- use g_set_prgname to set the prgname of abrt-gui trac#180 * Wed Mar 16 2011 Jiri Moskovcak 2.0.0-1 - update to the latest upstream version diff --git a/cli_analyze_action_select.patch b/cli_analyze_action_select.patch new file mode 100644 index 0000000..c448f0e --- /dev/null +++ b/cli_analyze_action_select.patch @@ -0,0 +1,311 @@ +Signed-off-by: Nikola Pajkovsky +--- + src/cli/cli.c | 31 ++++++++++- + src/cli/report.cpp | 135 ++++++++++++++++++++++++++++++++++++++++------- + src/cli/report.h | 4 +- + src/plugins/Makefile.am | 4 +- + 4 files changed, 148 insertions(+), 26 deletions(-) + +diff --git a/src/cli/cli.c b/src/cli/cli.c +index 0c895a7..4e0042f 100644 +--- a/src/cli/cli.c ++++ b/src/cli/cli.c +@@ -360,6 +360,9 @@ int main(int argc, char** argv) + print_usage_and_die(argv[0]); + } + ++ /* Get settings */ ++ load_event_config_data(); ++ + /* Do the selected operation. */ + int exitcode = 0; + switch (op) +@@ -409,15 +412,37 @@ int main(int argc, char** argv) + } + case OPT_INFO: + { +- if (run_analyze_event(dump_dir_name) != 0) +- return 1; +- + /* Load crash_data from (possibly updated by analyze) dump dir */ + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (!dd) + return -1; ++ ++ char *analyze_events_as_lines = list_possible_events(dd, NULL, "analyze"); ++ dd_close(dd); ++ ++ if (analyze_events_as_lines && *analyze_events_as_lines) ++ { ++ GList *list_analyze_events = str_to_glist(analyze_events_as_lines, '\n'); ++ free(analyze_events_as_lines); ++ ++ char *event = select_event_option(list_analyze_events); ++ list_free_with_free(list_analyze_events); ++ ++ int analyzer_result = run_analyze_event(dump_dir_name, event); ++ free(event); ++ ++ if (analyzer_result != 0) ++ return 1; ++ } ++ ++ /* Load crash_data from (possibly updated by analyze) dump dir */ ++ dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ if (!dd) ++ return -1; ++ + crash_data_t *crash_data = create_crash_data_from_dump_dir(dd); + dd_close(dd); ++ + add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, + CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE); + +diff --git a/src/cli/report.cpp b/src/cli/report.cpp +index da37bea..7181fe3 100644 +--- a/src/cli/report.cpp ++++ b/src/cli/report.cpp +@@ -15,9 +15,9 @@ + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +-#include "report.h" +-#include "run-command.h" + #include "abrtlib.h" ++#include "run-command.h" ++#include "report.h" + + /* Field separator for the crash report file that is edited by user. */ + #define FIELD_SEP "%----" +@@ -553,7 +553,8 @@ static int run_events(const char *dump_dir_name, + int r = run_event_on_dir_name(run_state, dump_dir_name, event.c_str()); + if (r == 0 && run_state->children_count == 0) + { +- l_state.last_line = xasprintf("Error: no processing is specified for event '%s'", event.c_str()); ++ l_state.last_line = xasprintf("Error: no processing is specified for event '%s'", ++ event.c_str()); + r = -1; + } + if (r == 0) +@@ -585,31 +586,128 @@ static char *do_log(char *log_line, void *param) + log("%s", log_line); + return log_line; + } +-int run_analyze_event(const char *dump_dir_name) ++ ++int run_analyze_event(const char *dump_dir_name, const char *analyzer) + { + VERB2 log("run_analyze_event('%s')", dump_dir_name); + + struct run_event_state *run_state = new_run_event_state(); + run_state->logging_callback = do_log; +- int res = run_event_on_dir_name(run_state, dump_dir_name, "analyze_LocalGDB"); ++ int res = run_event_on_dir_name(run_state, dump_dir_name, analyzer); + free_run_event_state(run_state); + return res; + } + ++/* show even description? */ ++char *select_event_option(GList *list_options) ++{ ++ if (!list_options) ++ return NULL; ++ ++ unsigned count = g_list_length(list_options) - 1; ++ if (!count) ++ return NULL; ++ ++ int pos = -1; ++ fprintf(stdout, _("Select how you would like to analyze the problem:\n")); ++ for (GList *li = list_options; li; li = li->next) ++ { ++ char *opt = (char*)li->data; ++ event_config_t *config = get_event_config(opt); ++ if (config) ++ { ++ ++pos; ++ printf(" %i) %s\n", pos, config->screen_name); ++ } ++ } ++ ++ unsigned picked; ++ unsigned ii; ++ for (ii = 0; ii < 3; ++ii) ++ { ++ fprintf(stdout, _("Choose option [0 - %u]: "), count); ++ fflush(NULL); ++ ++ char answer[16]; ++ if (!fgets(answer, sizeof(answer), stdin)) ++ continue; ++ ++ answer[strlen(answer) - 1] = '\0'; ++ if (!*answer) ++ continue; ++ ++ picked = xatou(answer); ++ if (picked > count) ++ { ++ fprintf(stdout, _("You have chosen number out of range")); ++ continue; ++ } ++ ++ break; ++ } ++ ++ if (ii == 3) ++ error_msg_and_die(_("Invalid input, program exiting...")); ++ ++ GList *choosen = g_list_nth(list_options, picked); ++ return xstrdup((char*)choosen->data); ++} ++ ++GList *str_to_glist(char *str, int delim) ++{ ++ GList *list = NULL; ++ while (*str) ++ { ++ char *end = strchrnul(str, delim); ++ char *tmp = xstrndup(str, end - str); ++ if (*tmp) ++ list = g_list_append(list, tmp); ++ ++ str = end; ++ if (!*str) ++ break; ++ str++; ++ } ++ ++ if (!list && !g_list_length(list)) ++ return NULL; ++ ++ return list; ++} + + /* Report the crash */ + int report(const char *dump_dir_name, int flags) + { +- if (run_analyze_event(dump_dir_name) != 0) +- return 1; +- + /* Load crash_data from (possibly updated by analyze) dump dir */ + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (!dd) + return -1; + ++ char *analyze_events_as_lines = list_possible_events(dd, NULL, "analyze"); ++ dd_close(dd); ++ ++ if (analyze_events_as_lines && *analyze_events_as_lines) ++ { ++ GList *list_analyze_events = str_to_glist(analyze_events_as_lines, '\n'); ++ free(analyze_events_as_lines); ++ ++ char *event = select_event_option(list_analyze_events); ++ list_free_with_free(list_analyze_events); ++ ++ int analyzer_result = run_analyze_event(dump_dir_name, event); ++ free(event); ++ ++ if (analyzer_result != 0) ++ return 1; ++ } ++ ++ /* Load crash_data from (possibly updated by analyze) dump dir */ ++ dd = dd_opendir(dump_dir_name, /*flags:*/ 0); ++ if (!dd) ++ return -1; ++ ++ char *report_events_as_lines = list_possible_events(dd, NULL, "report"); + crash_data_t *crash_data = create_crash_data_from_dump_dir(dd); +- char *events_as_lines = list_possible_events(dd, NULL, ""); + dd_close(dd); + + if (!(flags & CLI_REPORT_BATCH)) +@@ -620,7 +718,7 @@ int report(const char *dump_dir_name, int flags) + if (result != 0) + { + free_crash_data(crash_data); +- free(events_as_lines); ++ free(report_events_as_lines); + return 1; + } + /* Save comment, backtrace */ +@@ -639,26 +737,24 @@ int report(const char *dump_dir_name, int flags) + } + + /* Get possible reporters associated with this particular crash */ ++ /* TODO: npajkovs: remove this annoying c++ vector_string_t */ + vector_string_t report_events; +- if (events_as_lines) ++ if (report_events_as_lines && *report_events_as_lines) + { +- char *events = events_as_lines; ++ char *events = report_events_as_lines; + while (*events) + { + char *end = strchrnul(events, '\n'); +- if (strncmp(events, "report", 6) == 0 +- && (events[6] == '\0' || events[6] == '_') +- ) { +- char *tmp = xstrndup(events, end - events); +- report_events.push_back(tmp); +- free(tmp); +- } ++ char *tmp = xstrndup(events, end - events); ++ report_events.push_back(tmp); ++ free(tmp); + events = end; + if (!*events) + break; + events++; + } + } ++ free(report_events_as_lines); + + /* Get settings */ + load_event_config_data(); +@@ -723,6 +819,5 @@ int report(const char *dump_dir_name, int flags) + + printf(_("Crash reported via %d report events (%d errors)\n"), plugins, errors); + free_crash_data(crash_data); +- free(events_as_lines); + return errors; + } +diff --git a/src/cli/report.h b/src/cli/report.h +index 58b8c25..a393784 100644 +--- a/src/cli/report.h ++++ b/src/cli/report.h +@@ -22,7 +22,9 @@ + extern "C" { + #endif + +-int run_analyze_event(const char *dump_dir_name); ++int run_analyze_event(const char *dump_dir_name, const char *analyzer); ++char *select_event_option(GList *list_options); ++GList *str_to_glist(char *str, int delim); + + /* Report the crash */ + enum { +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index 5344cdb..7468188 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -65,8 +65,8 @@ $(DESTDIR)/$(DEBUG_INFO_DIR): + $(mkdir_p) '$@' + + install-data-hook: $(DESTDIR)/$(DEBUG_INFO_DIR) +- $(LN_S) analyze_RetraceServer.xml $(DESTDIR)$(eventsdir)/reanalyze_RetraceServer.xml +- $(LN_S) analyze_LocalGDB.xml $(DESTDIR)$(eventsdir)/reanalyze_LocalGDB.xml ++ $(LN_S) -f analyze_RetraceServer.xml $(DESTDIR)$(eventsdir)/reanalyze_RetraceServer.xml ++ $(LN_S) -f analyze_LocalGDB.xml $(DESTDIR)$(eventsdir)/reanalyze_LocalGDB.xml + + abrt_dump_oops_SOURCES = \ + abrt-dump-oops.c +-- +1.7.1 + +_______________________________________________ +Crash-catcher mailing list +Crash-catcher@lists.fedorahosted.org +https://fedorahosted.org/mailman/listinfo/crash-catcher diff --git a/dont_continue_if_event_fails.patch b/dont_continue_if_event_fails.patch new file mode 100644 index 0000000..d90dc6a --- /dev/null +++ b/dont_continue_if_event_fails.patch @@ -0,0 +1,25 @@ +commit 82ab98c161e01de5a41902ea1961016b4d4bccca +Author: Jiri Moskovcak +Date: Sun Mar 27 18:43:33 2011 +0200 + + gui-wizard-gtk: don't allow user to continue if analyzer fails + +diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c +index 31c7bb2..33a6911 100644 +--- a/src/gui-wizard-gtk/wizard.c ++++ b/src/gui-wizard-gtk/wizard.c +@@ -780,8 +780,12 @@ static gboolean consume_cmd_output(GIOChannel *source, GIOCondition condition, g + char *msg = xasprintf(evd->end_msg, retval); + gtk_label_set_text(evd->status_label, msg); + free(msg); +- /* Unfreeze assistant */ +- gtk_assistant_set_page_complete(g_assistant, evd->page_widget, true); ++ /* Unfreeze assistant ++ * we can't allow user to continue if analyze action fails ++ * i.e: if gdb fails to generate backtrace ++ */ ++ if (retval == 0 || (strncmp(evd->event_name, "analyze", strlen("analyze")) != 0)) ++ gtk_assistant_set_page_complete(g_assistant, evd->page_widget, true); + + /*g_source_remove(evd->event_source_id);*/ + close(evd->fd); diff --git a/g_prgname.patch b/g_prgname.patch new file mode 100644 index 0000000..b7e32df --- /dev/null +++ b/g_prgname.patch @@ -0,0 +1,22 @@ +commit aa08665949da429660dd78a6d26a0fc3cb11d6cd +Author: Jiri Moskovcak +Date: Tue Mar 29 18:10:17 2011 +0200 + + gui: fixed the prgname trac#180 + +diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c +index 4602012..b3f6bdc 100644 +--- a/src/gui-gtk/main.c ++++ b/src/gui-gtk/main.c +@@ -147,6 +147,11 @@ int main(int argc, char **argv) + textdomain(PACKAGE); + #endif + ++ /* without this the name is set to argv[0] which confuses ++ * desktops which uses the name to find the corresponding .desktop file ++ * trac#180 ++ */ ++ g_set_prgname("abrt"); + gtk_init(&argc, &argv); + + char *env_verbose = getenv("ABRT_VERBOSE"); diff --git a/hash_not_in_bz.patch b/hash_not_in_bz.patch new file mode 100644 index 0000000..ec97313 --- /dev/null +++ b/hash_not_in_bz.patch @@ -0,0 +1,37 @@ +commit 42ab4016ea8901108a22233a1b4a44a995e9a194 +Author: Nikola Pajkovsky +Date: Mon Mar 28 14:01:53 2011 +0200 + + Ticket #160 Hash is not present in Bugzilla + + Signed-off-by: Nikola Pajkovsky + +diff --git a/src/plugins/abrt-action-bugzilla.cpp b/src/plugins/abrt-action-bugzilla.cpp +index abc3fa1..e5e5bc8 100644 +--- a/src/plugins/abrt-action-bugzilla.cpp ++++ b/src/plugins/abrt-action-bugzilla.cpp +@@ -299,7 +299,8 @@ void ctx::get_bug_cc(xmlrpc_value* result_xml, struct bug_info* bz) + return; + } + +-xmlrpc_value* ctx::call_quicksearch_duphash(const char* component, const char* release, const char* duphash) ++xmlrpc_value* ctx::call_quicksearch_duphash(const char* component, ++ const char* release, const char* duphash) + { + char *query = NULL; + if (!release) +@@ -657,6 +658,14 @@ static void report_to_bugzilla( + + const char *component = get_crash_item_content_or_NULL(crash_data, FILENAME_COMPONENT); + const char *duphash = get_crash_item_content_or_NULL(crash_data, FILENAME_DUPHASH); ++ if (!duphash) ++ error_msg_and_die(_("Essential file '%s' is missing, can't continue.."), ++ FILENAME_DUPHASH); ++ ++ if (!*duphash) ++ error_msg_and_die(_("Essential file '%s' is empty, can't continue.."), ++ FILENAME_DUPHASH); ++ + const char *release = get_crash_item_content_or_NULL(crash_data, FILENAME_OS_RELEASE); + if (!release) /* Old dump dir format compat. Remove in abrt-2.1 */ + release = get_crash_item_content_or_NULL(crash_data, "release"); diff --git a/notify_init_name.patch b/notify_init_name.patch new file mode 100644 index 0000000..184cb2e --- /dev/null +++ b/notify_init_name.patch @@ -0,0 +1,19 @@ +commit 466f32513e67bf937d42321d1b979c5a477905b6 +Author: Jiri Moskovcak +Date: Mon Mar 28 17:26:00 2011 +0200 + + applet: fixed the notification program name + +diff --git a/src/applet/applet_gtk.c b/src/applet/applet_gtk.c +index 0ba9499..8071ec1 100644 +--- a/src/applet/applet_gtk.c ++++ b/src/applet/applet_gtk.c +@@ -355,7 +355,7 @@ struct applet *applet_new(const char* app_name) + applet->ap_menu = create_menu(applet); + } + +- notify_init(app_name); ++ notify_init("abrt"); + return applet; + } + diff --git a/notify_persistence.patch b/notify_persistence.patch new file mode 100644 index 0000000..96196f5 --- /dev/null +++ b/notify_persistence.patch @@ -0,0 +1,85 @@ +commit 78304637542f455b4a00ab32c418b00d2ee17781 +Author: Jiri Moskovcak +Date: Mon Mar 28 15:23:01 2011 +0200 + + applet: really fixed: don't show status icon when server support persistence trac#127 + +diff --git a/src/applet/applet_gtk.c b/src/applet/applet_gtk.c +index 78719ef..0ba9499 100644 +--- a/src/applet/applet_gtk.c ++++ b/src/applet/applet_gtk.c +@@ -21,26 +21,26 @@ + + static gboolean persistent_notification; + +-#if !defined(NOTIFY_VERSION_MINOR) || (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7) ++#if defined(NOTIFY_VERSION_MINOR) && (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR >= 6) + static gboolean server_has_persistence (void) + { +- gboolean has; +- GList *caps; +- GList *l; +- +- caps = notify_get_server_caps (); +- if (caps == NULL) { +- fprintf (stderr, "Failed to receive server caps.\n"); +- return FALSE; +- } +- +- l = g_list_find_custom (caps, "persistence", (GCompareFunc)strcmp); +- has = l != NULL; ++ gboolean has; ++ GList *caps; ++ GList *l; ++ ++ caps = notify_get_server_caps (); ++ if (caps == NULL) { ++ fprintf (stderr, "Failed to receive server caps.\n"); ++ return FALSE; ++ } + +- g_list_foreach (caps, (GFunc) g_free, NULL); +- g_list_free (caps); ++ l = g_list_find_custom (caps, "persistence", (GCompareFunc)strcmp); ++ has = l != NULL; + +- return has; ++ g_list_foreach (caps, (GFunc) g_free, NULL); ++ g_list_free (caps); ++ VERB1 log("notify server %s support pesistence\n", has ? "DOES" : "DOESN'T"); ++ return has; + } + #endif + +@@ -328,7 +328,7 @@ struct applet *applet_new(const char* app_name) + { + struct applet *applet = (struct applet*)xzalloc(sizeof(struct applet)); + applet->ap_daemon_running = true; +-#if !defined(NOTIFY_VERSION_MINOR) || (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7) ++#if defined(NOTIFY_VERSION_MINOR) && (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR >= 6) + persistent_notification = server_has_persistence(); + #endif + +@@ -398,11 +398,11 @@ void show_crash_notification(struct applet *applet, const char* crash_dir, const + notify_notification_add_action(notification, "REPORT", _("Report"), + NOTIFY_ACTION_CALLBACK(action_report), + applet, NULL); +- notify_notification_add_action(notification, "OPEN_MAIN_WINDOW", _("Open ABRT"), ++ notify_notification_add_action(notification, "default", _("Show"), + NOTIFY_ACTION_CALLBACK(action_open_gui), + applet, NULL); + +- notify_notification_update(notification, _("Warning"), buf, NULL); ++ notify_notification_update(notification, _("A Problem has Occurred"), buf, NULL); + free(buf); + GError *err = NULL; + notify_notification_show(notification, &err); +@@ -429,7 +429,7 @@ void show_msg_notification(struct applet *applet, const char *format, ...) + notify_notification_add_action(notification, "OPEN_MAIN_WINDOW", _("Open ABRT"), + NOTIFY_ACTION_CALLBACK(action_open_gui), + applet, NULL); +- notify_notification_update(notification, _("Warning"), buf, NULL); ++ notify_notification_update(notification, _("A Problem has Occurred"), buf, NULL); + free(buf); + GError *err = NULL; + notify_notification_show(notification, &err);