/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999,2000 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
static LogWindow *logwindow;
-static void key_pressed(GtkWidget *widget, GdkEventKey *event,
- LogWindow *logwin);
+static void hide_cb (GtkWidget *widget,
+ LogWindow *logwin);
+static void key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ LogWindow *logwin);
void log_window_clear(GtkWidget *text);
LogWindow *log_window_create(void)
GtkWidget *scrolledwin;
GtkWidget *text;
- debug_print(_("Creating log window...\n"));
+ debug_print("Creating log window...\n");
logwin = g_new0(LogWindow, 1);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
GTK_SIGNAL_FUNC(key_pressed), logwin);
+ gtk_signal_connect(GTK_OBJECT(window), "hide",
+ GTK_SIGNAL_FUNC(hide_cb), logwin);
gtk_widget_realize(window);
scrolledwin = gtk_scrolled_window_new(NULL, NULL);
(GTK_SCROLLED_WINDOW(scrolledwin)));
gtk_container_add(GTK_CONTAINER(scrolledwin), text);
gtk_widget_show(text);
+ gtk_text_freeze(GTK_TEXT(text));
logwin->window = window;
logwin->scrolledwin = scrolledwin;
void log_window_show(LogWindow *logwin)
{
+ GtkText *text = GTK_TEXT(logwin->text);
+
gtk_widget_hide(logwin->window);
+
+ gtk_text_thaw(text);
+ text->vadj->value = text->vadj->upper - text->vadj->page_size;
+ gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), "value_changed");
+
gtk_widget_show(logwin->window);
}
text = GTK_TEXT(logwindow->text);
switch (type) {
+ case LOG_MSG:
+ color = &logwindow->msg_color;
+ head = "* ";
+ break;
case LOG_WARN:
color = &logwindow->warn_color;
- head = "*** ";
+ head = "** ";
break;
case LOG_ERROR:
color = &logwindow->error_color;
head = "*** ";
break;
- case LOG_MSG:
- color = &logwindow->msg_color;
- break;
default:
break;
}
log_window_clear (GTK_WIDGET (text));
}
+static void hide_cb(GtkWidget *widget, LogWindow *logwin)
+{
+ if (GTK_TEXT(logwin->text)->freeze_count == 0)
+ gtk_text_freeze(GTK_TEXT(logwin->text));
+}
+
static void key_pressed(GtkWidget *widget, GdkEventKey *event,
LogWindow *logwin)
{
{
guint length;
guint point;
- gchar *str;
length = gtk_text_get_length (GTK_TEXT (text));
- debug_print(_("Log window length: %u\n"), length);
+ debug_print("Log window length: %u\n", length);
if (length > prefs_common.loglength) {
gchar *lf;
point = length - prefs_common.loglength;
do {
- 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 += LOG_AVG_LINE_LEN;
- g_free(str);
+ 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);
+ gtk_text_freeze (GTK_TEXT (text));
if (!gtk_text_forward_delete (GTK_TEXT (text), point + 1))
debug_print (_("Error clearing log\n"));
gtk_text_thaw (GTK_TEXT (text));