talons

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

commit 38ea0d67f58b56a028a50e5c421e1d29c95298e4
parent 897a5ed7241c371232c816d26c4b577dd36899e3
Author: Charles Lehner <charles@claws-mail.org>
Date:   Mon, 20 Jul 2015 22:23:15 -0400

managesieve: close windows when unloading

fixes crash on plugin unload

Diffstat:
Msrc/plugins/managesieve/sieve_editor.c | 3++-
Msrc/plugins/managesieve/sieve_editor.h | 1+
Msrc/plugins/managesieve/sieve_manager.c | 7+++++++
Msrc/plugins/managesieve/sieve_manager.h | 1+
Msrc/plugins/managesieve/sieve_plugin.c | 3+++
5 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/plugins/managesieve/sieve_editor.c b/src/plugins/managesieve/sieve_editor.c @@ -106,8 +106,9 @@ static GtkActionEntry sieve_editor_entries[] = void sieve_editors_close() { if (editors) { - g_slist_free_full(editors, (GDestroyNotify)sieve_editor_close); + GSList *list = editors; editors = NULL; + g_slist_free_full(list, (GDestroyNotify)sieve_editor_close); } } diff --git a/src/plugins/managesieve/sieve_editor.h b/src/plugins/managesieve/sieve_editor.h @@ -45,6 +45,7 @@ struct SieveEditorPage gpointer on_load_error_data; }; +void sieve_editors_close(); SieveEditorPage *sieve_editor_new(SieveSession *session, gchar *script_name); SieveEditorPage *sieve_editor_get(SieveSession *session, gchar *script_name); void sieve_editor_load(SieveEditorPage *page, diff --git a/src/plugins/managesieve/sieve_manager.c b/src/plugins/managesieve/sieve_manager.c @@ -80,6 +80,13 @@ static GSList *manager_pages = NULL; if ((page = (SieveManagerPage *)cur->data) && \ page->active_session == session) +void sieve_managers_done() +{ + GSList *list = manager_pages; + manager_pages = NULL; + g_slist_free_full(list, (GDestroyNotify)sieve_manager_done); +} + static void filters_list_clear(SieveManagerPage *page) { GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->filters_list))); diff --git a/src/plugins/managesieve/sieve_manager.h b/src/plugins/managesieve/sieve_manager.h @@ -36,6 +36,7 @@ struct SieveManagerPage gboolean got_list; }; +void sieve_managers_done(void); void sieve_manager_show(void); void sieve_manager_done(SieveManagerPage *page); void sieve_manager_script_created(SieveSession *session, diff --git a/src/plugins/managesieve/sieve_plugin.c b/src/plugins/managesieve/sieve_plugin.c @@ -31,6 +31,7 @@ #include "log.h" #include "sieve_prefs.h" #include "sieve_manager.h" +#include "sieve_editor.h" #define PLUGIN_NAME (_("ManageSieve")) @@ -84,6 +85,8 @@ gboolean plugin_done(void) MainWindow *mainwin = mainwindow_get_mainwindow(); sieve_prefs_done(); + sieve_managers_done(); + sieve_editors_close(); sieve_sessions_close(); if (mainwin)