Commit | Line | Data |
---|---|---|
41666588 JA |
1 | #include <locale.h> |
2 | #include <malloc.h> | |
3 | #include <string.h> | |
4 | #include <stdarg.h> | |
5 | ||
6 | #include <gtk/gtk.h> | |
7 | ||
8 | #include "gfio.h" | |
9 | #include "gerror.h" | |
10 | ||
11 | static void on_info_bar_response(GtkWidget *widget, gint response, | |
3c3ed070 | 12 | gpointer data) |
41666588 JA |
13 | { |
14 | struct gui *ui = (struct gui *) data; | |
15 | ||
16 | if (response == GTK_RESPONSE_OK) { | |
17 | gtk_widget_destroy(widget); | |
18 | ui->error_info_bar = NULL; | |
19 | } | |
20 | } | |
21 | ||
22 | static void report_error(struct gui_entry *ge, GError *error) | |
23 | { | |
24 | struct gui *ui = ge->ui; | |
25 | ||
26 | if (ui->error_info_bar == NULL) { | |
27 | ui->error_info_bar = gtk_info_bar_new_with_buttons(GTK_STOCK_OK, | |
3c3ed070 | 28 | GTK_RESPONSE_OK, NULL); |
41666588 JA |
29 | g_signal_connect(ui->error_info_bar, "response", G_CALLBACK(on_info_bar_response), ui); |
30 | gtk_info_bar_set_message_type(GTK_INFO_BAR(ui->error_info_bar), | |
3c3ed070 JA |
31 | GTK_MESSAGE_ERROR); |
32 | ||
41666588 JA |
33 | ui->error_label = gtk_label_new(error->message); |
34 | GtkWidget *container = gtk_info_bar_get_content_area(GTK_INFO_BAR(ui->error_info_bar)); | |
35 | gtk_container_add(GTK_CONTAINER(container), ui->error_label); | |
3c3ed070 | 36 | |
41666588 JA |
37 | gtk_box_pack_start(GTK_BOX(ui->vbox), ui->error_info_bar, FALSE, FALSE, 0); |
38 | gtk_widget_show_all(ui->vbox); | |
39 | } else { | |
40 | char buffer[256]; | |
41 | snprintf(buffer, sizeof(buffer), "Failed to open file."); | |
f762cef9 | 42 | gtk_label_set_text(GTK_LABEL(ui->error_label), buffer); |
41666588 JA |
43 | } |
44 | } | |
45 | ||
46 | void gfio_report_error(struct gui_entry *ge, const char *format, ...) | |
47 | { | |
48 | va_list args; | |
49 | GError *error; | |
50 | ||
51 | va_start(args, format); | |
52 | error = g_error_new_valist(g_quark_from_string("fio"), 1, format, args); | |
53 | va_end(args); | |
54 | ||
55 | report_error(ge, error); | |
56 | g_error_free(error); | |
57 | } | |
58 | ||
1252d8f2 JA |
59 | void gfio_report_info(struct gui *ui, const char *title, const char *message) |
60 | { | |
61 | GtkWidget *dialog, *content, *label; | |
62 | ||
63 | dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(ui->window), | |
64 | GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, | |
65 | GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); | |
41666588 | 66 | |
1252d8f2 JA |
67 | content = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); |
68 | label = gtk_label_new(message); | |
69 | gtk_container_add(GTK_CONTAINER(content), label); | |
70 | gtk_widget_show_all(dialog); | |
71 | gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); | |
72 | gtk_dialog_run(GTK_DIALOG(dialog)); | |
73 | gtk_widget_destroy(dialog); | |
74 | } |