54
57
const gchar *message,
55
58
gboolean use_handler);
60
static void gimp_message_log_func (const gchar *log_domain,
64
static void gimp_error_log_func (const gchar *domain,
67
gpointer data) G_GNUC_NORETURN;
58
71
/* public functions */
61
gimp_errors_init (const gchar *_full_prog_name,
62
gboolean _use_debug_handler,
63
GimpStackTraceMode _stack_trace_mode)
74
errors_init (Gimp *gimp,
75
const gchar *_full_prog_name,
76
gboolean _use_debug_handler,
77
GimpStackTraceMode _stack_trace_mode)
79
const gchar * const log_domains[] =
104
g_return_if_fail (GIMP_IS_GIMP (gimp));
65
105
g_return_if_fail (_full_prog_name != NULL);
66
106
g_return_if_fail (full_prog_name == NULL);
68
108
#ifdef GIMP_UNSTABLE
69
g_printerr ("This is a development version of The GIMP.\n"
70
"Debug messages may appear here.\n\n");
73
g_printerr ("You can minimize this window, but don't close it.\n\n");
109
g_printerr ("This is a development version of GIMP. "
110
"Debug messages may appear here.\n\n");
75
111
#endif /* GIMP_UNSTABLE */
113
the_errors_gimp = gimp;
77
115
use_debug_handler = _use_debug_handler ? TRUE : FALSE;
78
116
stack_trace_mode = _stack_trace_mode;
79
117
full_prog_name = g_strdup (_full_prog_name);
83
gimp_message_log_func (const gchar *log_domain,
88
Gimp **gimp = (Gimp **) data;
90
if (gimp && GIMP_IS_GIMP (*gimp))
92
gimp_message (*gimp, NULL, message);
96
g_printerr ("%s: %s\n\n", gimp_filename_to_utf8 (full_prog_name), message);
100
gimp_error_log_func (const gchar *domain,
101
GLogLevelFlags flags,
102
const gchar *message,
105
gimp_fatal_error (message);
119
for (i = 0; i < G_N_ELEMENTS (log_domains); i++)
120
g_log_set_handler (log_domains[i],
122
gimp_message_log_func, gimp);
124
g_log_set_handler (NULL,
125
G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL,
126
gimp_error_log_func, gimp);
135
156
/* private functions */
159
gimp_message_log_func (const gchar *log_domain,
160
GLogLevelFlags flags,
161
const gchar *message,
168
gimp_show_message (gimp, NULL, GIMP_MESSAGE_WARNING, NULL, message);
172
g_printerr ("%s: %s\n\n",
173
gimp_filename_to_utf8 (full_prog_name), message);
178
gimp_error_log_func (const gchar *domain,
179
GLogLevelFlags flags,
180
const gchar *message,
183
gimp_fatal_error (message);
138
187
gimp_eek (const gchar *reason,
139
188
const gchar *message,
140
189
gboolean use_handler)
142
191
#ifndef G_OS_WIN32
144
192
g_printerr ("%s: %s: %s\n", gimp_filename_to_utf8 (full_prog_name),
145
193
reason, message);
149
197
switch (stack_trace_mode)
151
case GIMP_STACK_TRACE_NEVER:
154
case GIMP_STACK_TRACE_QUERY:
158
sigemptyset (&sigset);
159
sigprocmask (SIG_SETMASK, &sigset, NULL);
160
g_on_error_query (full_prog_name);
164
case GIMP_STACK_TRACE_ALWAYS:
168
sigemptyset (&sigset);
169
sigprocmask (SIG_SETMASK, &sigset, NULL);
170
g_on_error_stack_trace (full_prog_name);
199
case GIMP_STACK_TRACE_NEVER:
202
case GIMP_STACK_TRACE_QUERY:
206
sigemptyset (&sigset);
207
sigprocmask (SIG_SETMASK, &sigset, NULL);
210
gimp_gui_ungrab (the_errors_gimp);
212
g_on_error_query (full_prog_name);
216
case GIMP_STACK_TRACE_ALWAYS:
220
sigemptyset (&sigset);
221
sigprocmask (SIG_SETMASK, &sigset, NULL);
223
g_on_error_stack_trace (full_prog_name);
181
233
/* g_on_error_* don't do anything reasonable on Win32. */