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:
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 */