--- a/pidgin/pidgindebug.c Thu Feb 03 22:14:31 2022 -0600
+++ b/pidgin/pidgindebug.c Mon Feb 07 23:54:15 2022 -0600
@@ -69,6 +69,13 @@
+ PurpleDebugLevel level; static gboolean debug_print_enabled = FALSE;
static PidginDebugWindow *debug_win = NULL;
static guint debug_enabled_timer = 0;
@@ -682,59 +689,32 @@
-pidgin_debug_g_log_handler(GLogLevelFlags log_level, const GLogField *fields,
- gsize n_fields, G_GNUC_UNUSED gpointer user_data)
+pidgin_debug_g_log_handler_cb(gpointer data) - const gchar *domain = NULL;
- const gchar *arg_s = NULL;
+ PidginDebugMessage *message = data; GtkTextTag *level_tag = NULL;
- GDateTime *local_date_time = NULL;
gchar *local_time = NULL;
!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) {
- if (debug_print_enabled) {
- return g_log_writer_default(log_level, fields, n_fields, user_data);
- return G_LOG_WRITER_UNHANDLED;
- for (i = 0; i < n_fields; i++) {
- if (purple_strequal(fields[i].key, "GLIB_DOMAIN")) {
- domain = fields[i].value;
- } else if (purple_strequal(fields[i].key, "MESSAGE")) {
- arg_s = fields[i].value;
- if((log_level & G_LOG_LEVEL_ERROR) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_ERROR];
- } else if((log_level & G_LOG_LEVEL_CRITICAL) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_FATAL];
- } else if((log_level & G_LOG_LEVEL_WARNING) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_WARNING];
- } else if((log_level & G_LOG_LEVEL_MESSAGE) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_INFO];
- } else if((log_level & G_LOG_LEVEL_INFO) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_INFO];
- } else if((log_level & G_LOG_LEVEL_DEBUG) != 0) {
- level_tag = debug_win->tags.level[PURPLE_DEBUG_MISC];
- level_tag = debug_win->tags.level[PURPLE_DEBUG_MISC];
+ /* The Debug Window may have been closed/disabled after the thread that + * sent this message. */ + g_date_time_unref(message->timestamp); + g_free(message->domain); + g_free(message->message); scroll = view_near_bottom(debug_win);
gtk_text_buffer_get_end_iter(debug_win->buffer, &end);
gtk_text_buffer_move_mark(debug_win->buffer, debug_win->start_mark, &end);
- local_date_time = g_date_time_new_now_local();
- local_time = g_date_time_format(local_date_time, "(%H:%M:%S) ");
- g_date_time_unref(local_date_time);
+ level_tag = debug_win->tags.level[message->level]; + local_time = g_date_time_format(message->timestamp, "(%H:%M:%S) "); gtk_text_buffer_insert_with_tags(
@@ -745,13 +725,11 @@
debug_win->paused ? debug_win->tags.paused : NULL,
- if (domain != NULL && *domain != '\0') {
+ if (message->domain != NULL && *message->domain != '\0') { gtk_text_buffer_insert_with_tags(
debug_win->tags.category,
@@ -771,7 +749,7 @@
gtk_text_buffer_insert_with_tags(
debug_win->paused ? debug_win->tags.paused : NULL,
@@ -804,6 +782,59 @@
debug_win->end_mark, 0, TRUE, 0, 1);
+ g_date_time_unref(message->timestamp); + g_free(message->domain); + g_free(message->message); +pidgin_debug_g_log_handler(GLogLevelFlags log_level, const GLogField *fields, + gsize n_fields, G_GNUC_UNUSED gpointer user_data) + PidginDebugMessage *message = NULL; + if (debug_win == NULL) { + if (debug_print_enabled) { + return g_log_writer_default(log_level, fields, n_fields, user_data); + return G_LOG_WRITER_UNHANDLED; + message = g_new0(PidginDebugMessage, 1); + message->timestamp = g_date_time_new_now_local(); + for (i = 0; i < n_fields; i++) { + if (purple_strequal(fields[i].key, "GLIB_DOMAIN")) { + message->domain = g_strdup(fields[i].value); + } else if (purple_strequal(fields[i].key, "MESSAGE")) { + message->message = g_strdup(fields[i].value); + if((log_level & G_LOG_LEVEL_ERROR) != 0) { + message->level = PURPLE_DEBUG_ERROR; + } else if((log_level & G_LOG_LEVEL_CRITICAL) != 0) { + message->level = PURPLE_DEBUG_FATAL; + } else if((log_level & G_LOG_LEVEL_WARNING) != 0) { + message->level = PURPLE_DEBUG_WARNING; + } else if((log_level & G_LOG_LEVEL_MESSAGE) != 0) { + message->level = PURPLE_DEBUG_INFO; + } else if((log_level & G_LOG_LEVEL_INFO) != 0) { + message->level = PURPLE_DEBUG_INFO; + } else if((log_level & G_LOG_LEVEL_DEBUG) != 0) { + message->level = PURPLE_DEBUG_MISC; + message->level = PURPLE_DEBUG_MISC; + g_timeout_add(0, pidgin_debug_g_log_handler_cb, message); if (debug_print_enabled) {
return g_log_writer_default(log_level, fields, n_fields, user_data);