Fixed a crash introduced in 0.8.0claws5 when log is cut under
[claws.git] / src / logwindow.c
index 56356182648769de6394057c8c2e250c50fb927d..39ce93654903ab92ec6c235d6331737fb6370814 100644 (file)
@@ -160,26 +160,35 @@ static void key_pressed(GtkWidget *widget, GdkEventKey *event,
                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);