OSDN Git Service

fixed various gtk3 deprecation warnings
[eb123/eb123.git] / src / log.c
1
2 #include "defs.h"
3
4 #include "mainwnd.h"
5
6 static gboolean log_message_box(gpointer data, gint type, gchar *msg)
7 {
8     static gboolean active = FALSE;
9     GtkWidget *dialog;
10     GtkWindow *parent;
11
12     if(active)
13         return FALSE;
14
15     active  = TRUE;
16     parent = GTK_WINDOW(gtk_grab_get_current());
17     if(parent == NULL) parent = mainwnd_get_wnd();
18
19     dialog = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, "%s", msg);
20     gtk_dialog_run(GTK_DIALOG(dialog));
21     gtk_widget_destroy(dialog);
22     g_free(msg);
23     active  = FALSE;
24     return FALSE;
25 }
26
27 gboolean log_show_message(gpointer data)
28 {
29     return log_message_box(data, GTK_MESSAGE_INFO, (gchar*)data);
30 }
31
32 gboolean log_show_warning(gpointer data)
33 {
34     return log_message_box(data, GTK_MESSAGE_WARNING, (gchar*)data);
35 }
36
37 gboolean log_show_error(gpointer data)
38 {
39     return log_message_box(data, GTK_MESSAGE_ERROR, (gchar*)data);
40 }
41
42 void log_message(char *message)
43 {
44     g_idle_add(log_show_message, (gpointer)g_strdup(message));
45 }
46
47 void log_warning(char *message)
48 {
49     g_idle_add(log_show_warning, (gpointer)g_strdup(message));
50 }
51
52 void log_error(char *message)
53 {
54     g_idle_add(log_show_error, (gpointer)g_strdup(message));
55 }
56
57 void log_func(const gchar *file, gint line, LOG_LEVEL level, const gchar *message, ...)
58 {
59     va_list ap;
60     gchar format[1024];
61     gchar str[1024];
62
63     switch(level)
64     {
65     case LOG_ERROR:
66         sprintf(format, "%s:%d ERROR : ", file, line);
67         break;
68     case LOG_CRITICAL:
69         sprintf(format, "%s:%d CRITICAL : ", file, line);
70         break;
71     case LOG_WARNING:
72         sprintf(format, "%s:%d WARNING : ", file, line);
73         break;
74     case LOG_MESSAGE:
75         sprintf(format, "%s:%d MESSAGE : ", file, line);
76         break;
77     case LOG_INFO:
78         sprintf(format, "%s:%d INFO : ", file, line);
79         break;
80     }
81
82     va_start(ap, message);
83     vsprintf(str, message, ap);
84     va_end(ap);
85
86 #ifndef __OPTIMIZE__
87     g_printf("%s\n", str);
88 #endif
89
90     // Show message box
91     if(level <= LOG_MESSAGE)
92     {
93         switch(level)
94         {
95         case LOG_ERROR:
96         case LOG_CRITICAL:
97             log_error(str);
98             break;
99         case LOG_WARNING:
100             log_warning(str);
101             break;
102         case LOG_MESSAGE:
103             log_message(str);
104             break;
105         default:
106             break;
107         }
108     }
109 }
110