static void log_window_clip(LogWindow *logwin, guint clip_length) { guint length; guint point; GtkTextBuffer *textbuf = logwin->buffer; GtkTextIter start_iter, end_iter; length = gtk_text_buffer_get_line_count(textbuf); /* debug_print("Log window length: %u\n", length); */ if (length > clip_length) { /* find the end of the first line after the cut off * point */ point = length - clip_length; gtk_text_buffer_get_iter_at_line(textbuf, &end_iter, point); if (!gtk_text_iter_forward_to_line_end(&end_iter)) return; gtk_text_buffer_get_start_iter(textbuf, &start_iter); gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); if (logwin->has_error) { gtk_text_buffer_get_start_iter(textbuf, &start_iter); if (mainwindow_get_mainwindow() && !gtk_text_iter_forward_to_tag_toggle(&start_iter, logwin->error_tag)) { mainwindow_clear_error(mainwindow_get_mainwindow()); logwin->has_error = FALSE; } } } }
/*! *\brief display an error with a View Log button * */ void alertpanel_error_log(const gchar *format, ...) { va_list args; int val; MainWindow *mainwin; gchar buf[ALERT_PANEL_BUFSIZE]; va_start(args, format); g_vsnprintf(buf, sizeof(buf), format, args); va_end(args); strretchomp(buf); mainwin = mainwindow_get_mainwindow(); if (mainwin && mainwin->logwin) { mainwindow_clear_error(mainwin); val = alertpanel_full(_("Error"), buf, GTK_STOCK_CLOSE, _("_View log"), NULL, ALERTFOCUS_FIRST, FALSE, NULL, ALERT_ERROR); if (val == G_ALERTALTERNATE) log_window_show(mainwin->logwin); } else alertpanel_error("%s", buf); }