* 'Forward' button is replace by 'Close' button because it looks more
  natural and users won't be confused
* status messages were enhanced to be more specific

Signed-off-by: Jakub Filak <[email protected]>
---
 src/gui-wizard-gtk/wizard.c |   68 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 54 insertions(+), 14 deletions(-)

diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index 4a2c874..34a60c5 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -1261,6 +1261,29 @@ static void on_btn_cancel_event(GtkButton *button)
         kill(- g_event_child_pid, SIGTERM);
 }
 
+static bool is_reporting_finished()
+{
+    return !g_expert_mode && !g_auto_event_list;
+}
+
+static void update_gui_on_finished_reporting()
+{
+    /* replace 'Forward' with 'Close' 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);
+}
+
+static void terminate_event_chain()
+{
+    if (g_expert_mode)
+        return;
+
+    g_auto_event_list = NULL;
+    update_gui_on_finished_reporting();
+}
+
 static void update_command_run_log(const char* message, struct 
analyze_event_data *evd)
 {
     gtk_label_set_text(g_lbl_event_log, message);
@@ -1278,12 +1301,15 @@ static void run_event_gtk_error(const char *error_line, 
void *param)
 
 static char *run_event_gtk_logging(char *log_line, void *param)
 {
-    update_command_run_log(log_line, (struct analyze_event_data *)param);
+    struct analyze_event_data *evd = (struct analyze_event_data *)param;
+    update_command_run_log(log_line, evd);
 
     if (strcmp(log_line, "THANKYOU") == 0)
     {
         VERB1 log("Received a request for termination of processing of event 
chain. (Request: '%s')", log_line);
-        g_auto_event_list = NULL;
+        terminate_event_chain();
+        if (!g_expert_mode)
+            evd->success_msg = _("Reporting finished. Thank you!");
     }
 
     return log_line;
@@ -1440,12 +1466,6 @@ static gboolean consume_cmd_output(GIOChannel *source, 
GIOCondition condition, g
         }
     }
 
-    if (retval != 0)
-    {
-       /* If we were running -e EV1 -e EV2, stop if EV1 failed: */
-       g_auto_event_list = NULL;
-    }
-
     /* Stop if exit code is not 0, or no more commands */
     if (retval != 0
      || spawn_next_command_in_evd(evd) < 0
@@ -1454,7 +1474,11 @@ static gboolean consume_cmd_output(GIOChannel *source, 
GIOCondition condition, g
         append_to_textview(evd->tv_log, "\n");
 
         if (retval)
+        {
             gtk_label_set_text(evd->status_label, evd->error_msg);
+            /* If we were running -e EV1 -e EV2, stop if EV1 failed: */
+            terminate_event_chain();
+        }
         else
             gtk_label_set_text(evd->status_label, evd->success_msg);
 
@@ -1481,6 +1505,10 @@ static gboolean consume_cmd_output(GIOChannel *source, 
GIOCondition condition, g
         /* Inform abrt-gui that it is a good idea to rescan the directory */
         kill(getppid(), SIGCHLD);
 
+        /* this event was the last event from the chain */
+        if (is_reporting_finished())
+            update_gui_on_finished_reporting();
+
         return FALSE; /* "please remove this event" */
     }
 
@@ -1525,9 +1553,15 @@ static void start_event_run(const char *event_name,
         free_run_event_state(state);
 //TODO: better msg?
         char *msg = xasprintf(_("No processing for event '%s' is defined"), 
event_name);
-        gtk_label_set_text(status_label, msg);
+        if (g_expert_mode)
+            gtk_label_set_text(status_label, msg);
+        else
+        {
+            gtk_label_set_text(status_label, error_msg);
+            append_to_textview(tv_log, msg);
+            terminate_event_chain();
+        }
         free(msg);
-        g_auto_event_list = NULL;
         return;
     }
 
@@ -1923,12 +1957,13 @@ static void on_page_prepare(GtkNotebook *assistant, 
GtkWidget *page, gpointer us
                     g_tv_event_log,
                     g_lbl_event_log,
                     _("Processing..."),
-                    _("Processing failed. You can try another operation if 
available."),
-                    _("Processing finished, please proceed to the next step.")
+                    g_expert_mode ? _("Processing failed. You can try another 
operation if available.")
+                                  : _("Processing failed. Nothing more can be 
done. Thank you!"),
+                    /* this event is the last event from the chain */
+                    is_reporting_finished() ? _("Reporting finished. Thank 
you!")
+                                            : _("Processing finished, please 
proceed to the next step.")
             );
         }
-        else
-            gtk_label_set_text(g_lbl_event_log, _("Thank you!"));
     }
 }
 
@@ -1951,7 +1986,10 @@ static gint select_next_page_no(gint current_page_no, 
gpointer data)
             if (!event)
             {
                 g_event_selected = NULL;
+                /* No next event, go to progress page and finish */
                 current_page_no = pages[PAGENO_EVENT_PROGRESS].page_no - 1;
+                gtk_label_set_text(g_lbl_event_log, "Reporting finished. Thank 
you!");
+                update_gui_on_finished_reporting();
                 goto again;
             }
 
@@ -2469,6 +2507,7 @@ void create_assistant(void)
     g_btn_stop = gtk_button_new_from_stock(GTK_STOCK_STOP);
     gtk_widget_set_no_show_all(g_btn_stop, true); /* else gtk_widget_hide 
won't work */
     g_btn_next = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+    gtk_widget_set_no_show_all(g_btn_next, true); /* else gtk_widget_hide 
won't work */
 
     g_box_buttons = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
     gtk_box_pack_start(g_box_buttons, g_btn_close, false, false, 5);
@@ -2512,6 +2551,7 @@ void create_assistant(void)
 
     gtk_widget_show_all(GTK_WIDGET(g_box_buttons));
     gtk_widget_hide(g_btn_stop);
+    gtk_widget_show(g_btn_next);
 
     g_wnd_assistant = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
     gtk_container_add(GTK_CONTAINER(g_wnd_assistant), 
GTK_WIDGET(g_box_assistant));
-- 
1.7.10.4

Reply via email to