diff options
-rw-r--r-- | src/gui-gtk/abrt-gtk.c | 6 | ||||
-rw-r--r-- | src/gui-wizard-gtk/main.c | 49 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.c | 41 | ||||
-rw-r--r-- | src/gui-wizard-gtk/wizard.h | 7 |
4 files changed, 80 insertions, 23 deletions
diff --git a/src/gui-gtk/abrt-gtk.c b/src/gui-gtk/abrt-gtk.c index 15579200..4b4db4c3 100644 --- a/src/gui-gtk/abrt-gtk.c +++ b/src/gui-gtk/abrt-gtk.c @@ -75,7 +75,10 @@ static void on_row_activated_cb(GtkTreeView *treeview, GtkTreePath *path, GtkTre gtk_tree_model_get_value(store, &iter, COLUMN_DUMP_DIR, &d_dir); pid_t pid = vfork(); - if (pid == 0) { + if (pid == 0) + { + /* Undo signal(SIGCHLD, SIG_IGN), or child inherits it and gets terribly confused */ + signal(SIGCHLD, SIG_DFL); execlp("bug-reporting-wizard", "bug-reporting-wizard", g_value_get_string(&d_dir), NULL); perror_msg_and_die("Can't execute %s", "bug-reporting-wizard"); } @@ -235,7 +238,6 @@ GtkWidget *create_main_window(void) gtk_window_set_title(GTK_WINDOW(main_window), _("Automatic Bug Reporting Tool")); gtk_window_set_icon_name(GTK_WINDOW(main_window), "abrt"); - GtkWidget *main_vbox = gtk_vbox_new(false, 0); /* scrolled region inside main window */ diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c index 33d1f114..f2186e70 100644 --- a/src/gui-wizard-gtk/main.c +++ b/src/gui-wizard-gtk/main.c @@ -6,10 +6,23 @@ #define PROGNAME "bug-reporting-wizard" char *g_glade_file = NULL; -char *dump_dir_path = NULL; + +char *g_dump_dir_name = NULL; + +char *g_analyze_label_selected = NULL; crash_data_t *cd; +static void analyze_rb_was_toggled(GtkToggleButton *button, gpointer user_data) +{ + const char *label = gtk_button_get_label(GTK_BUTTON(button)); + if (label) + { + free(g_analyze_label_selected); + g_analyze_label_selected = xstrdup(label); + } +} + int main(int argc, char **argv) { gtk_init(&argc, &argv); @@ -36,12 +49,13 @@ int main(int argc, char **argv) if (!argv[0] || argv[1]) /* zero or >1 arguments */ show_usage_and_die(program_usage_string, program_options); - dump_dir_path = argv[0]; - struct dump_dir *dd = dd_opendir(dump_dir_path, 0); + g_dump_dir_name = argv[0]; + + struct dump_dir *dd = dd_opendir(g_dump_dir_name, 0); if (!dd) return 1; cd = create_crash_data_from_dump_dir(dd); - char *analyze_events = list_possible_events(dd, /*dump_dir_name*/ NULL, "analyze"); + char *analyze_events = list_possible_events(dd, g_dump_dir_name, "analyze"); dd_close(dd); GtkWidget *assistant = create_assistant(); @@ -54,15 +68,24 @@ int main(int argc, char **argv) if (analyze_events[0]) { char *event_name = analyze_events; - char *event_name_end = strchr(event_name, '\n'); - *event_name_end = '\0'; - GtkWidget *rb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(first_rb), event_name); - *event_name_end = '\n'; - event_name = event_name_end + 1; - - if (!first_rb) - first_rb = rb; - gtk_box_pack_start(GTK_BOX(g_vb_analyzers), rb, /*expand*/ false, /*fill*/ false, /*padding*/ 0); + while (event_name[0]) + { + char *event_name_end = strchr(event_name, '\n'); + *event_name_end = '\0'; + GtkWidget *rb = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(first_rb), event_name); + if (!first_rb) + { + first_rb = rb; + free(g_analyze_label_selected); + g_analyze_label_selected = xstrdup(event_name); + } + *event_name_end = '\n'; + event_name = event_name_end + 1; + + gtk_box_pack_start(GTK_BOX(g_vb_analyzers), rb, /*expand*/ false, /*fill*/ false, /*padding*/ 0); + + g_signal_connect(G_OBJECT(rb), "toggled", G_CALLBACK(analyze_rb_was_toggled), NULL); + } } else { /*???*/ } diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 46782413..af56e160 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -25,6 +25,7 @@ GtkLabel *g_lbl_cd_reason; GtkVBox *g_vb_analyzers; +GtkTextView *g_analyze_log; static const gchar *const page_names[] = { @@ -51,7 +52,7 @@ static const gchar *const page_titles[] = static const GtkAssistantPageType page_types[] = { - GTK_ASSISTANT_PAGE_INTRO, + GTK_ASSISTANT_PAGE_CONFIRM, /* need this type to get "apply" signal */ GTK_ASSISTANT_PAGE_PROGRESS, GTK_ASSISTANT_PAGE_CONTENT, GTK_ASSISTANT_PAGE_CONTENT, @@ -127,7 +128,7 @@ void *append_item_to_details_ls(gpointer name, gpointer value, gpointer data) gtk_list_store_set(details_ls, &iter, COLUMN_NAME, (char *)name, COLUMN_VALUE, item->content, - COLUMN_PATH, xasprintf("%s%s", dump_dir_path, name), + COLUMN_PATH, xasprintf("%s%s", g_dump_dir_name, name), -1); } else @@ -135,7 +136,7 @@ void *append_item_to_details_ls(gpointer name, gpointer value, gpointer data) gtk_list_store_set(details_ls, &iter, COLUMN_NAME, (char *)name, COLUMN_VALUE, _("Content is too long, please use the \"View\" button to display it."), - COLUMN_PATH, xasprintf("%s%s", dump_dir_path, name), + COLUMN_PATH, xasprintf("%s%s", g_dump_dir_name, name), -1); } @@ -179,22 +180,52 @@ static void add_pages() gtk_assistant_set_page_title(GTK_ASSISTANT(assistant), page, page_titles[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(assistant), page, page_types[i]); - g_print("added page: %s\n", page_names[i]); + log("added page: %s", page_names[i]); } /* Set pointer to fields we might need to change */ g_lbl_cd_reason = GTK_LABEL(gtk_builder_get_object(builder, "lbl_cd_reason")); - g_vb_analyzers = GTK_VBOX(gtk_builder_get_object(builder, "vb_analyzers")); + g_analyze_log = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "analyze_log")); +} + +static char *add_log_to_analyze_log(char *log_line, void *param) +{ + GtkTextBuffer *tb = gtk_text_view_get_buffer(g_analyze_log); + + gtk_text_buffer_insert_at_cursor(tb, log_line, -1); + gtk_text_buffer_insert_at_cursor(tb, "\n", 1); + + return log_line; +} + +static void next_page(GtkAssistant *assistant, gpointer user_data) +{ + int page_no = gtk_assistant_get_current_page(assistant); + log("page_no:%d", page_no); + + if (g_analyze_label_selected != NULL) + { + struct run_event_state *run_state = new_run_event_state(); + run_state->logging_callback = add_log_to_analyze_log; +// Need async version of run_event_on_dir_name() here! This one will freeze GUI until completion: + log("running event '%s' on '%s'", g_analyze_label_selected, g_dump_dir_name); + int res = run_event_on_dir_name(run_state, g_dump_dir_name, g_analyze_label_selected); + free_run_event_state(run_state); + log("done running event '%s' on '%s': %d", g_analyze_label_selected, g_dump_dir_name, res); + } } GtkWidget *create_assistant() { assistant = gtk_assistant_new(); gtk_window_set_default_size(GTK_WINDOW(assistant), DEFAULT_WIDTH, DEFAULT_HEIGHT); + gtk_window_set_title(GTK_WINDOW(assistant), g_dump_dir_name); + gtk_window_set_icon_name(GTK_WINDOW(assistant), "abrt"); g_signal_connect(G_OBJECT(assistant), "cancel", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(assistant), "close", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(G_OBJECT(assistant), "apply", G_CALLBACK(next_page), NULL); builder = gtk_builder_new(); add_pages(); diff --git a/src/gui-wizard-gtk/wizard.h b/src/gui-wizard-gtk/wizard.h index 221bbc25..be2a1a8c 100644 --- a/src/gui-wizard-gtk/wizard.h +++ b/src/gui-wizard-gtk/wizard.h @@ -1,8 +1,9 @@ -GtkWidget *create_assistant(void); - extern GtkLabel *g_lbl_cd_reason; extern GtkVBox *g_vb_analyzers; +GtkWidget *create_assistant(void); + extern char *g_glade_file; extern crash_data_t *cd; -extern char *dump_dir_path; +extern char *g_analyze_label_selected; +extern char *g_dump_dir_name; |