talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 635d07f3dd7e749fe5fd5adbd44292758f4e96cd
parent 3c8f5d6e9e699b83877a991bdff6ad344480d0b1
Author: Oliver Lowe <o@olowe.co>
Date:   Sun, 24 Aug 2025 15:01:56 +1000

Keep all network log around for lifetime of program

Diffstat:
Msrc/Makefile.am | 2--
Msrc/gtk/logwindow.c | 55+++++--------------------------------------------------
Msrc/gtk/logwindow.h | 5+----
Msrc/main.c | 10----------
Msrc/prefs_common.c | 26--------------------------
Msrc/prefs_common.h | 4----
Dsrc/prefs_logging.c | 231-------------------------------------------------------------------------------
Dsrc/prefs_logging.h | 26--------------------------
8 files changed, 6 insertions(+), 353 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am @@ -93,7 +93,6 @@ claws_mail_SOURCES = \ prefs_ext_prog.c \ prefs_folder_item.c \ prefs_gtk.c \ - prefs_logging.c \ prefs_matcher.c \ prefs_message.c \ prefs_other.c \ @@ -192,7 +191,6 @@ claws_mailinclude_HEADERS = \ prefs_ext_prog.h \ prefs_folder_item.h \ prefs_gtk.h \ - prefs_logging.h \ prefs_matcher.h \ prefs_message.h \ prefs_other.h \ diff --git a/src/gtk/logwindow.c b/src/gtk/logwindow.c @@ -43,14 +43,12 @@ static void size_allocate_cb (GtkWidget *widget, gpointer data); static gboolean log_window_append (gpointer source, gpointer data); -static void log_window_clip (LogWindow *logwin, - guint glip_length); static void log_window_clear (GtkWidget *widget, LogWindow *logwin); static void log_window_popup_menu_extend (GtkTextView *textview, GtkMenu *menu, LogWindow *logwin); - + /*! *\brief Save Gtk object size to prefs dataset */ @@ -234,14 +232,6 @@ void log_window_show_error(LogWindow *logwin) log_window_jump_to_error(logwin); } -void log_window_set_clipping(LogWindow *logwin, gboolean clip, guint clip_length) -{ - cm_return_if_fail(logwin != NULL); - - logwin->clip = clip; - logwin->clip_length = clip_length; -} - static gboolean log_window_append(gpointer source, gpointer data) { LogText *logtext = (LogText *) source; @@ -256,9 +246,6 @@ static gboolean log_window_append(gpointer source, gpointer data) cm_return_val_if_fail(logtext->text != NULL, TRUE); cm_return_val_if_fail(logwindow != NULL, FALSE); - if (logwindow->clip && !logwindow->clip_length) - return FALSE; - text = GTK_TEXT_VIEW(logwindow->text); buffer = logwindow->buffer; gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1); @@ -327,15 +314,12 @@ static gboolean log_window_append(gpointer source, gpointer data) } gtk_text_buffer_get_start_iter(buffer, &iter); - if (logwindow->clip) - log_window_clip (logwindow, logwindow->clip_length); - if (!logwindow->hidden) { GtkAdjustment *vadj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(text)); gfloat upper = gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj); gfloat value = gtk_adjustment_get_value(vadj); - if (value == upper || + if (value == upper || (upper - value < 16 && value < 8)) gtk_text_view_scroll_mark_onscreen(text, logwindow->end_mark); } @@ -353,46 +337,17 @@ static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, { if (event && event->keyval == GDK_KEY_Escape) gtk_widget_hide(logwin->window); - else if (event && event->keyval == GDK_KEY_Delete) + else if (event && event->keyval == GDK_KEY_Delete) log_window_clear(NULL, logwin); return FALSE; } -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; - } - } - } -} - static void log_window_clear(GtkWidget *widget, LogWindow *logwin) { GtkTextBuffer *textbuf = logwin->buffer; GtkTextIter start_iter, end_iter; - + gtk_text_buffer_get_start_iter(textbuf, &start_iter); gtk_text_buffer_get_end_iter(textbuf, &end_iter); gtk_text_buffer_delete(textbuf, &start_iter, &end_iter); @@ -407,7 +362,7 @@ static void log_window_popup_menu_extend(GtkTextView *textview, GtkMenu *menu, LogWindow *logwin) { GtkWidget *menuitem; - + cm_return_if_fail(menu != NULL); cm_return_if_fail(GTK_IS_MENU_SHELL(menu)); diff --git a/src/gtk/logwindow.h b/src/gtk/logwindow.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * */ #ifndef __LOGWINDOW_H__ @@ -42,8 +42,6 @@ struct _LogWindow GdkRGBA *status_nok_color; GdkRGBA *status_skip_color; - gboolean clip; - guint clip_length; gulong hook_id; GtkTextBuffer *buffer; GtkTextTag *error_tag; @@ -58,6 +56,5 @@ LogWindow *log_window_create(LogInstance instance); void log_window_init(LogWindow *logwin); void log_window_show(LogWindow *logwin); void log_window_show_error(LogWindow *logwin); -void log_window_set_clipping(LogWindow *logwin, gboolean clip, guint clip_length); #endif /* __LOGWINDOW_H__ */ diff --git a/src/main.c b/src/main.c @@ -65,7 +65,6 @@ #include "prefs_summaries.h" #include "prefs_themes.h" #include "prefs_other.h" -#include "prefs_logging.h" #include "prefs_send.h" #include "prefs_wrapping.h" #include "prefs_compose_writing.h" @@ -255,12 +254,6 @@ static gboolean defer_jump(void *data) return FALSE; } -static void chk_update_val(GtkWidget *widget, gpointer data) -{ - gboolean *val = (gboolean *)data; - *val = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); -} - static gboolean sc_exiting = FALSE; static gboolean show_at_startup = TRUE; @@ -500,7 +493,6 @@ int main(int argc, char *argv[]) prefs_summaries_init(); prefs_message_init(); prefs_other_init(); - prefs_logging_init(); prefs_receive_init(); prefs_send_init(); matcher_init(); @@ -511,7 +503,6 @@ int main(int argc, char *argv[]) sock_set_io_timeout(prefs_common.io_timeout_secs); prefs_actions_read_config(); prefs_display_header_read_config(); - /* prefs_filtering_read_config(); */ addressbook_read_file(); gtkut_widget_init(); priv_pixbuf_gdk(PRIV_PIXMAP_CLAWS_MAIL_ICON, &icon); @@ -807,7 +798,6 @@ static void exit_claws(MainWindow *mainwin) prefs_message_done(); prefs_other_done(); prefs_receive_done(); - prefs_logging_done(); prefs_send_done(); claws_done(); } diff --git a/src/prefs_common.c b/src/prefs_common.c @@ -653,14 +653,6 @@ static PrefParam param[] = { NULL, NULL, NULL}, {"log_length", "500", &prefs_common.loglength, P_INT, NULL, NULL, NULL}, - {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL, - NULL, NULL, NULL}, - {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL, - NULL, NULL, NULL}, - {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL, - NULL, NULL, NULL}, - {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL, - NULL, NULL, NULL}, {"log_msg_color", "#00af00", &prefs_common.color[COL_LOG_MSG], P_COLOR, NULL, NULL, NULL}, {"log_warn_color", "#af0000", &prefs_common.color[COL_LOG_WARN], @@ -1282,24 +1274,6 @@ gboolean prefs_common_unsafe_ssl_certs(void) return prefs_common.unsafe_ssl_certs; } -gboolean prefs_common_enable_log_standard(void) -{ - return prefs_common.enable_log_standard; -} - -gboolean prefs_common_enable_log_warning(void) -{ - return prefs_common.enable_log_warning; -} -gboolean prefs_common_enable_log_error(void) -{ - return prefs_common.enable_log_error; -} -gboolean prefs_common_enable_log_status(void) -{ - return prefs_common.enable_log_status; -} - /** return the translated name of a header, if the translate_header option is set, otherwise return the untranslated header name (header_name itself). diff --git a/src/prefs_common.h b/src/prefs_common.h @@ -387,10 +387,6 @@ struct _PrefsCommon gboolean cliplog; guint loglength; - gboolean enable_log_standard; - gboolean enable_log_warning; - gboolean enable_log_error; - gboolean enable_log_status; gboolean confirm_on_exit; gboolean session_passwords; diff --git a/src/prefs_logging.c b/src/prefs_logging.c @@ -1,231 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2025 the Claws Mail team - * - * 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 - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#include "claws-features.h" -#endif - -#include "defs.h" - -#include <stdio.h> -#include <stdlib.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> - -#include "prefs_common.h" -#include "prefs_gtk.h" - -#include "gtk/gtkutils.h" -#include "gtk/prefswindow.h" -#include "gtk/menu.h" - -#include "manage_window.h" - -#include "log.h" -#include "combobox.h" - -typedef struct _LoggingPage -{ - PrefsPage page; - - GtkWidget *window; - - GtkWidget *checkbtn_clip_network_log; - GtkWidget *spinbtn_network_log_length; - GtkWidget *checkbtn_log_standard; - GtkWidget *checkbtn_log_warning; - GtkWidget *checkbtn_log_error; - GtkWidget *checkbtn_log_status; -} LoggingPage; - -static GtkWidget *prefs_logging_create_check_buttons(GtkWidget **checkbtn1, - gchar *label1, GtkWidget **checkbtn2, gchar *label2) -{ - GtkWidget *hbox_checkbtn; - - hbox_checkbtn = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VBOX_BORDER); - gtk_widget_show(hbox_checkbtn); - - PACK_CHECK_BUTTON (hbox_checkbtn, *checkbtn1, label1); - gtk_label_set_line_wrap(GTK_LABEL(gtk_bin_get_child(GTK_BIN((*checkbtn1)))), TRUE); - - PACK_CHECK_BUTTON (hbox_checkbtn, *checkbtn2, label2); - gtk_label_set_line_wrap(GTK_LABEL(gtk_bin_get_child(GTK_BIN((*checkbtn2)))), TRUE); - - return hbox_checkbtn; -} - -static void prefs_logging_create_widget(PrefsPage *_page, GtkWindow *window, - gpointer data) -{ - LoggingPage *prefs_logging = (LoggingPage *) _page; - - GtkWidget *vbox1; - - GtkWidget *frame_logging; - GtkWidget *vbox_network_log; - GtkWidget *hbox_clip_network_log; - GtkWidget *checkbtn_clip_network_log; - GtkWidget *spinbtn_network_log_length; - GtkAdjustment *spinbtn_network_log_length_adj; - GtkWidget *hbox_checkbtn; - GtkWidget *frame_disk_log; - GtkWidget *vbox_disk_log; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *checkbtn_log_standard; - GtkWidget *checkbtn_log_warning; - GtkWidget *checkbtn_log_error; - GtkWidget *checkbtn_log_status; - GtkSizeGroup *log_size_group; - - vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING); - gtk_widget_show (vbox1); - gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); - - /* Protocol log */ - vbox_network_log = gtkut_get_options_frame(vbox1, &frame_logging, _("Network log")); - - hbox_clip_network_log = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); - gtk_container_add (GTK_CONTAINER (vbox_network_log), hbox_clip_network_log); - gtk_widget_show (hbox_clip_network_log); - - PACK_CHECK_BUTTON (hbox_clip_network_log, checkbtn_clip_network_log, - _("Restrict the log window to")); - - spinbtn_network_log_length_adj = GTK_ADJUSTMENT(gtk_adjustment_new (500, 0, G_MAXINT, 1, 10, 0)); - spinbtn_network_log_length = gtk_spin_button_new - (GTK_ADJUSTMENT (spinbtn_network_log_length_adj), 1, 0); - gtk_widget_show (spinbtn_network_log_length); - gtk_box_pack_start (GTK_BOX (hbox_clip_network_log), spinbtn_network_log_length, - FALSE, FALSE, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_network_log_length), TRUE); - - CLAWS_SET_TIP(spinbtn_network_log_length, - _("0 to stop logging in the log window")); - - label = gtk_label_new(_("lines")); - gtk_widget_show (label); - gtk_box_pack_start(GTK_BOX(hbox_clip_network_log), label, FALSE, FALSE, 0); - - SET_TOGGLE_SENSITIVITY(checkbtn_clip_network_log, spinbtn_network_log_length); - SET_TOGGLE_SENSITIVITY(checkbtn_clip_network_log, label); - - /* disk log */ - vbox_disk_log = gtkut_get_options_frame(vbox1, &frame_disk_log, _("Disk log")); - - label = gtk_label_new(_("Write the following information to disk...")); - gtk_widget_show(label); - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); - gtk_container_add (GTK_CONTAINER (vbox_disk_log), hbox); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - hbox_checkbtn = prefs_logging_create_check_buttons(&checkbtn_log_warning, - _("Warning messages"), &checkbtn_log_standard, - _("Network protocol messages")); - gtk_box_pack_start(GTK_BOX(vbox_disk_log), hbox_checkbtn, FALSE, FALSE, 0); - - hbox_checkbtn = prefs_logging_create_check_buttons(&checkbtn_log_error, - _("Error messages"), &checkbtn_log_status, - _("Status messages for filtering/processing log")); - gtk_box_pack_start(GTK_BOX(vbox_disk_log), hbox_checkbtn, FALSE, FALSE, 0); - - log_size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - gtk_size_group_add_widget(log_size_group, checkbtn_log_warning); - gtk_size_group_add_widget(log_size_group, checkbtn_log_error); - g_object_unref(G_OBJECT(log_size_group)); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_clip_network_log), - prefs_common.cliplog); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_log_standard), - prefs_common.enable_log_standard); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_log_warning), - prefs_common.enable_log_warning); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_log_error), - prefs_common.enable_log_error); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_log_status), - prefs_common.enable_log_status); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_network_log_length), - prefs_common.loglength); - - prefs_logging->checkbtn_clip_network_log = checkbtn_clip_network_log; - prefs_logging->spinbtn_network_log_length = spinbtn_network_log_length; - prefs_logging->checkbtn_log_standard = checkbtn_log_standard; - prefs_logging->checkbtn_log_warning = checkbtn_log_warning; - prefs_logging->checkbtn_log_error = checkbtn_log_error; - prefs_logging->checkbtn_log_status = checkbtn_log_status; - prefs_logging->page.widget = vbox1; -} - -static void prefs_logging_save(PrefsPage *_page) -{ - LoggingPage *page = (LoggingPage *) _page; - MainWindow *mainwindow; - - prefs_common.cliplog = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_clip_network_log)); - prefs_common.loglength = gtk_spin_button_get_value_as_int( - GTK_SPIN_BUTTON(page->spinbtn_network_log_length)); - prefs_common.enable_log_standard = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_log_standard)); - prefs_common.enable_log_warning = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_log_warning)); - prefs_common.enable_log_error = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_log_error)); - prefs_common.enable_log_status = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(page->checkbtn_log_status)); - mainwindow = mainwindow_get_mainwindow(); - log_window_set_clipping(mainwindow->logwin, prefs_common.cliplog, prefs_common.loglength); -} - -static void prefs_logging_destroy_widget(PrefsPage *_page) -{ -} - -LoggingPage *prefs_logging; - -void prefs_logging_init(void) -{ - LoggingPage *page; - static gchar *path[3]; - - path[0] = _("Other"); - path[1] = _("Logging"); - path[2] = NULL; - - page = g_new0(LoggingPage, 1); - page->page.path = path; - page->page.create_widget = prefs_logging_create_widget; - page->page.destroy_widget = prefs_logging_destroy_widget; - page->page.save_page = prefs_logging_save; - page->page.weight = 5.0; - prefs_gtk_register_page((PrefsPage *) page); - prefs_logging = page; -} - -void prefs_logging_done(void) -{ - prefs_gtk_unregister_page((PrefsPage *) prefs_logging); - g_free(prefs_logging); -} diff --git a/src/prefs_logging.h b/src/prefs_logging.h @@ -1,26 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2015 the Claws Mail team - * - * 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 - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#ifndef PREFS_LOGGING_H -#define PREFS_LOGGING_H - -void prefs_logging_init (void); -void prefs_logging_done (void); - -#endif /* PREFS_LOGGING_H */