return FALSE;
}
+/**
+ * @brief Appends a user information message to the log window queue
+ * @param data The message
+ * @returns FALSE
+ *
+ * If the first word of the message is either "error" or "warning"
+ * (case insensitive) the message is color-coded appropriately
+ */
static gboolean log_normal_cb(gpointer data)
{
gchar *buf = data;
- log_window_append(buf, LOG_NORMAL);
+ gchar *buf_casefold = g_utf8_casefold(buf, -1);
+ gchar *error_casefold = g_utf8_casefold(_("error"), -1);
+ gchar *warning_casefold = g_utf8_casefold(_("warning"), -1);
+
+ if (buf_casefold == g_strstr_len(buf_casefold, -1, error_casefold))
+ {
+ log_window_append(buf, LOG_ERROR);
+ }
+ else if (buf_casefold == g_strstr_len(buf_casefold, -1, warning_casefold))
+ {
+ log_window_append(buf, LOG_WARN);
+ }
+ else
+ {
+ log_window_append(buf, LOG_NORMAL);
+ }
+
g_free(buf);
+ g_free(buf_casefold);
+ g_free(error_casefold);
+ g_free(warning_casefold);
return FALSE;
}
GtkWidget *scrolledwin;
GtkWidget *text;
+#if !GTK_CHECK_VERSION(3,0,0)
GdkColor colors[LOG_COUNT];
+#else
+ GtkTextTag *color_tags[LOG_COUNT];
+#endif
guint lines;
GtkWidget *regexp_box;
GtkWidget *debug_level;
};
+#if !GTK_CHECK_VERSION(3,0,0)
typedef struct _LogDef LogDef;
struct _LogDef
{
{ LOG_WARN, "warning", "orange" },
{ LOG_ERROR, "error", "red" },
};
+#endif
static LogWindow *logwindow = NULL;
#if !GTK_CHECK_VERSION(3,0,0)
GdkColormap *colormap;
gboolean success[LOG_COUNT];
-#endif
gint i;
g_assert(logwin != NULL);
g_assert(logwin->colors != NULL);
-#if !GTK_CHECK_VERSION(3,0,0)
for (i = LOG_NORMAL; i < LOG_COUNT; i++)
{
gboolean ok = gdk_color_parse(logdefs[i].color, &logwin->colors[i]);
break;
}
}
-#endif
+
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
for (i = LOG_NORMAL; i < LOG_COUNT; i++)
gtk_text_buffer_create_tag(buffer, logdefs[i].tag,
"foreground-gdk", &logwin->colors[i],
"family", "MonoSpace",
NULL);
+#else
+ g_assert(logwin != NULL);
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(logwin->text));
+
+ logwin->color_tags[LOG_NORMAL] = gtk_text_buffer_create_tag (buffer,
+ "black_foreground", "foreground", "black",
+ "family", "MonoSpace", NULL);
+ logwin->color_tags[LOG_MSG] = gtk_text_buffer_create_tag (buffer,
+ "blue_foreground", "foreground", "blue",
+ "family", "MonoSpace", NULL);
+ logwin->color_tags[LOG_WARN] = gtk_text_buffer_create_tag (buffer,
+ "orange_foreground", "foreground", "orange",
+ "family", "MonoSpace", NULL);
+ logwin->color_tags[LOG_ERROR] = gtk_text_buffer_create_tag (buffer,
+ "red_foreground", "foreground", "red",
+ "family", "MonoSpace", NULL);
+#endif
}
static void log_window_show(LogWindow *logwin)
LogType type;
};
-
+#if !GTK_CHECK_VERSION(3,0,0)
static void log_window_insert_text(GtkTextBuffer *buffer, GtkTextIter *iter,
const gchar *text, const gchar *tag)
{
gtk_text_buffer_insert_with_tags_by_name(buffer, iter, str_utf8, -1, tag, NULL);
g_free(str_utf8);
}
+#else
+static void log_window_insert_text(GtkTextBuffer *buffer, GtkTextIter *iter,
+ const gchar *text, GtkTextTag *tag)
+{
+ gchar *str_utf8;
+ if (!text || !*text) return;
+
+ str_utf8 = utf8_validate_or_convert(text);
+ gtk_text_buffer_insert_with_tags(buffer, iter, str_utf8, -1, tag, NULL);
+ g_free(str_utf8);
+}
+#endif
void log_window_append(const gchar *str, LogType type)
{
GList *prev;
LogMsg *oldest_msg = work->data;
+#if !GTK_CHECK_VERSION(3,0,0)
log_window_insert_text(buffer, &iter, oldest_msg->text, logdefs[oldest_msg->type].tag);
+#else
+ log_window_insert_text(buffer, &iter, oldest_msg->text,
+ logwindow->color_tags[oldest_msg->type]);
+#endif
prev = work->prev;
memory = g_list_delete_link(memory, work);
}
}
+#if !GTK_CHECK_VERSION(3,0,0)
log_window_insert_text(buffer, &iter, str, logdefs[type].tag);
+#else
+ log_window_insert_text(buffer, &iter, str, logwindow->color_tags[type]);
+#endif
if (!options->log_window.paused)
{