| 41 #include <stdio.h> |
41 #include <stdio.h> |
| 42 #include <string.h> |
42 #include <string.h> |
| 43 |
43 |
| 44 #define PREF_ROOT "/finch/debug" |
44 #define PREF_ROOT "/finch/debug" |
| 45 |
45 |
| |
46 static gboolean |
| |
47 handle_fprintf_stderr_cb(GIOChannel *source, GIOCondition cond, gpointer null) |
| |
48 { |
| |
49 gssize size; |
| |
50 char message[1024]; |
| |
51 |
| |
52 size = read(g_io_channel_unix_get_fd(source), message, sizeof(message) - 1); |
| |
53 if (size <= 0) { |
| |
54 /* Something bad probably happened elsewhere ... let's ignore */ |
| |
55 } else { |
| |
56 message[size] = '\0'; |
| |
57 g_log("stderr", G_LOG_LEVEL_WARNING, "%s", message); |
| |
58 } |
| |
59 |
| |
60 return TRUE; |
| |
61 } |
| |
62 |
| |
63 static void |
| |
64 handle_fprintf_stderr(gboolean stop) |
| |
65 { |
| |
66 GIOChannel *stderrch; |
| |
67 static int readhandle = -1; |
| |
68 int pipes[2]; |
| |
69 |
| |
70 if (stop) { |
| |
71 if (readhandle >= 0) { |
| |
72 g_source_remove(readhandle); |
| |
73 readhandle = -1; |
| |
74 } |
| |
75 return; |
| |
76 } |
| |
77 pipe(pipes); |
| |
78 dup2(pipes[1], STDERR_FILENO); |
| |
79 |
| |
80 stderrch = g_io_channel_unix_new(pipes[0]); |
| |
81 g_io_channel_set_close_on_unref(stderrch, TRUE); |
| |
82 readhandle = g_io_add_watch_full(stderrch, G_PRIORITY_HIGH, |
| |
83 G_IO_IN | G_IO_ERR | G_IO_PRI, |
| |
84 handle_fprintf_stderr_cb, NULL, NULL); |
| |
85 g_io_channel_unref(stderrch); |
| |
86 } |
| |
87 |
| 46 static struct |
88 static struct |
| 47 { |
89 { |
| 48 GntWidget *window; |
90 GntWidget *window; |
| 49 GntWidget *tview; |
91 GntWidget *tview; |
| 50 GntWidget *search; |
92 GntWidget *search; |
| 139 static void |
181 static void |
| 140 print_stderr(const char *string) |
182 print_stderr(const char *string) |
| 141 { |
183 { |
| 142 g_printerr("%s", string); |
184 g_printerr("%s", string); |
| 143 } |
185 } |
| 144 |
|
| 145 static void |
|
| 146 suppress_error_messages(const char *message) |
|
| 147 {} |
|
| 148 |
186 |
| 149 static void |
187 static void |
| 150 toggle_pause(GntWidget *w, gpointer n) |
188 toggle_pause(GntWidget *w, gpointer n) |
| 151 { |
189 { |
| 152 debug.paused = !debug.paused; |
190 debug.paused = !debug.paused; |
| 346 REGISTER_G_LOG_HANDLER("GThread"); |
384 REGISTER_G_LOG_HANDLER("GThread"); |
| 347 REGISTER_G_LOG_HANDLER("Gnt"); |
385 REGISTER_G_LOG_HANDLER("Gnt"); |
| 348 #ifdef USE_GSTREAMER |
386 #ifdef USE_GSTREAMER |
| 349 REGISTER_G_LOG_HANDLER("GStreamer"); |
387 REGISTER_G_LOG_HANDLER("GStreamer"); |
| 350 #endif |
388 #endif |
| |
389 REGISTER_G_LOG_HANDLER("stderr"); |
| 351 |
390 |
| 352 g_set_print_handler(print_stderr); /* Redirect the debug messages to stderr */ |
391 g_set_print_handler(print_stderr); /* Redirect the debug messages to stderr */ |
| 353 if (!purple_debug_is_enabled()) |
392 if (!purple_debug_is_enabled()) |
| 354 g_set_printerr_handler(suppress_error_messages); |
393 handle_fprintf_stderr(FALSE); |
| 355 |
394 |
| 356 purple_prefs_add_none(PREF_ROOT); |
395 purple_prefs_add_none(PREF_ROOT); |
| 357 purple_prefs_add_string(PREF_ROOT "/filter", ""); |
396 purple_prefs_add_string(PREF_ROOT "/filter", ""); |
| 358 purple_prefs_add_none(PREF_ROOT "/size"); |
397 purple_prefs_add_none(PREF_ROOT "/size"); |
| 359 purple_prefs_add_int(PREF_ROOT "/size/width", 60); |
398 purple_prefs_add_int(PREF_ROOT "/size/width", 60); |