gtk_widget_hide(logwin->window);
}
+#define LOG_AVG_LINE_LEN 80
void log_window_clear(GtkWidget *text)
{
guint length;
guint point;
- gchar *str;
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;
- gtk_text_set_point (GTK_TEXT (text), point);
- str = gtk_editable_get_chars (GTK_EDITABLE (text),
- point, point + 1);
+
+ 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));
- while(str && *str != '\n')
- str = gtk_editable_get_chars (GTK_EDITABLE (text),
- ++point, point + 2);
/* erase the text */
gtk_text_set_point (GTK_TEXT (text), 0);