#include "logwindow.h"
#include "utils.h"
#include "gtkutils.h"
+#include "prefs_common.h"
static LogWindow *logwindow;
static void key_pressed(GtkWidget *widget, GdkEventKey *event,
LogWindow *logwin);
+void log_window_clear(GtkWidget *text);
LogWindow *log_window_create(void)
{
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), _("Protocol log"));
+ gtk_window_set_wmclass(GTK_WINDOW(window), "log_window", "Sylpheed");
gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
gtk_widget_set_usize(window, 520, 400);
gtk_signal_connect(GTK_OBJECT(window), "delete_event",
text = GTK_TEXT(logwindow->text);
- //gtk_text_freeze(text);
-
switch (type) {
case LOG_WARN:
color = &logwindow->warn_color;
color = &logwindow->msg_color;
break;
default:
+ break;
}
if (head) gtk_text_insert(text, NULL, color, NULL, head, -1);
gtk_text_insert(text, NULL, color, NULL, str, -1);
-
- //gtk_text_thaw(text);
+ if (prefs_common.cliplog)
+ log_window_clear (GTK_WIDGET (text));
}
static void key_pressed(GtkWidget *widget, GdkEventKey *event,
if (event && event->keyval == GDK_Escape)
gtk_widget_hide(logwin->window);
}
+
+#define LOG_AVG_LINE_LEN 80
+void log_window_clear(GtkWidget *text)
+{
+ guint length;
+ guint point;
+
+ length = gtk_text_get_length (GTK_TEXT (text));
+ debug_print(_("Log window length: %u\n"), length);
+
+ if (length > prefs_common.loglength) {
+ gchar *lf;
+ /* find the end of the first line after the cut off
+ * point */
+ point = length - prefs_common.loglength;
+
+ do {
+ gchar *str;
+ if ((str = gtk_editable_get_chars (GTK_EDITABLE (text),
+ point, point + LOG_AVG_LINE_LEN))) {
+ if ((lf = strchr(str, '\n')) != NULL)
+ point += lf - str;
+ else
+ point += strlen(str);
+ g_free(str);
+ } else
+ break;
+ } while (lf == NULL);
+
+ gtk_text_freeze (GTK_TEXT (text));
+
+ /* erase the text */
+ gtk_text_set_point (GTK_TEXT (text), 0);
+ if (!gtk_text_forward_delete (GTK_TEXT (text), point + 1))
+ debug_print (_("Error clearing log\n"));
+ gtk_text_thaw (GTK_TEXT (text));
+ gtk_text_set_point (GTK_TEXT (text),
+ gtk_text_get_length (GTK_TEXT (text)));
+ }
+
+}
+
+