[balsa/wip/gtk4: 116/351] Cleanup some dispose and finalize methods
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 116/351] Cleanup some dispose and finalize methods
- Date: Wed, 23 May 2018 21:26:41 +0000 (UTC)
commit 6814a92e79c67775edeba3beb07f58af9b522c50
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Jan 8 21:11:45 2018 -0500
Cleanup some dispose and finalize methods
libbalsa/address-book-extern.c | 5 +--
libbalsa/address-book-ldap.c | 10 ++--
libbalsa/address-book-osmo.c | 8 ++--
libbalsa/address-book-rubrica.c | 9 +---
libbalsa/address-book-text.c | 10 +----
libbalsa/address-book.c | 3 -
libbalsa/address-view.c | 9 ++--
libbalsa/address.c | 16 +++----
libbalsa/completion.c | 3 +-
libbalsa/gmime-filter-header.c | 15 -------
libbalsa/gmime-gpgme-signature.c | 2 -
libbalsa/identity.c | 15 ++++++-
libbalsa/imap-server.c | 3 +-
libbalsa/libbalsa-vfs.c | 24 ++++++++++-
libbalsa/mailbox.c | 76 +++++++++++++-------------------------
libbalsa/mailbox_imap.c | 53 +++++++++++++++-----------
libbalsa/mailbox_local.c | 43 ++++++++++-----------
libbalsa/mailbox_mbox.c | 2 +
libbalsa/mailbox_pop3.c | 11 ++---
libbalsa/message.c | 62 +++++++++++++-----------------
libbalsa/misc.c | 14 +++++++
libbalsa/misc.h | 2 +
libbalsa/rfc2445.c | 4 +-
libbalsa/server.c | 12 ++---
libnetclient/net-client-pop.c | 15 +++++++-
libnetclient/net-client.c | 15 +++++++-
src/balsa-message.c | 22 +++++++++--
src/balsa-mime-widget.c | 31 +---------------
src/balsa-print-object-decor.c | 6 +-
src/balsa-print-object-default.c | 18 +++++++-
src/balsa-print-object-header.c | 6 +-
src/balsa-print-object-image.c | 8 ++--
src/balsa-print-object-text.c | 9 ++--
src/balsa-print-object.c | 11 -----
src/filter-run-dialog.c | 8 ++-
src/mailbox-node.c | 21 +++++-----
src/main-window.c | 16 +++-----
src/sendmsg-window.c | 6 +-
src/toolbar-factory.c | 14 ++++++-
39 files changed, 308 insertions(+), 309 deletions(-)
---
diff --git a/libbalsa/address-book-extern.c b/libbalsa/address-book-extern.c
index 51ffa8e..9ee3ace 100644
--- a/libbalsa/address-book-extern.c
+++ b/libbalsa/address-book-extern.c
@@ -166,10 +166,7 @@ libbalsa_address_book_externq_finalize(GObject * object)
g_free(addr_externq->load);
g_free(addr_externq->save);
-
- g_list_foreach(addr_externq->address_list, (GFunc) g_object_unref, NULL);
- g_list_free(addr_externq->address_list);
- addr_externq->address_list = NULL;
+ g_list_free_full(addr_externq->address_list, g_object_unref);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/address-book-ldap.c b/libbalsa/address-book-ldap.c
index a3d8748..b836d10 100644
--- a/libbalsa/address-book-ldap.c
+++ b/libbalsa/address-book-ldap.c
@@ -197,11 +197,11 @@ libbalsa_address_book_ldap_finalize(GObject * object)
libbalsa_address_book_ldap_close_connection(addr_ldap);
- g_free(addr_ldap->host); addr_ldap->host = NULL;
- g_free(addr_ldap->base_dn); addr_ldap->base_dn = NULL;
- g_free(addr_ldap->bind_dn); addr_ldap->bind_dn = NULL;
- g_free(addr_ldap->priv_book_dn); addr_ldap->priv_book_dn = NULL;
- g_free(addr_ldap->passwd); addr_ldap->passwd = NULL;
+ g_free(addr_ldap->host);
+ g_free(addr_ldap->base_dn);
+ g_free(addr_ldap->bind_dn);
+ g_free(addr_ldap->priv_book_dn);
+ g_free(addr_ldap->passwd);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/address-book-osmo.c b/libbalsa/address-book-osmo.c
index bee55da..0b00db8 100644
--- a/libbalsa/address-book-osmo.c
+++ b/libbalsa/address-book-osmo.c
@@ -49,7 +49,7 @@
#define LOOKUP_MIN_LEN 2U
-static void libbalsa_address_book_osmo_finalize(GObject *object);
+static void libbalsa_address_book_osmo_dispose(GObject *object);
static LibBalsaABErr libbalsa_address_book_osmo_load(LibBalsaAddressBook *ab,
const gchar *filter,
LibBalsaAddressBookLoadFunc callback,
@@ -73,7 +73,7 @@ libbalsa_address_book_osmo_class_init(LibBalsaAddressBookOsmoClass *klass)
object_class = G_OBJECT_CLASS(klass);
address_book_class = LIBBALSA_ADDRESS_BOOK_CLASS(klass);
- object_class->finalize = libbalsa_address_book_osmo_finalize;
+ object_class->dispose = libbalsa_address_book_osmo_dispose;
address_book_class->load = libbalsa_address_book_osmo_load;
#if defined(OSMO_CAN_WRITE)
@@ -94,14 +94,14 @@ libbalsa_address_book_osmo_init(LibBalsaAddressBookOsmo *ab)
static void
-libbalsa_address_book_osmo_finalize(GObject *object)
+libbalsa_address_book_osmo_dispose(GObject *object)
{
LibBalsaAddressBookOsmo *osmo;
osmo = LIBBALSA_ADDRESS_BOOK_OSMO(object);
g_clear_object(&osmo->proxy);
- G_OBJECT_CLASS(libbalsa_address_book_osmo_parent_class)->finalize(object);
+ G_OBJECT_CLASS(libbalsa_address_book_osmo_parent_class)->dispose(object);
}
diff --git a/libbalsa/address-book-rubrica.c b/libbalsa/address-book-rubrica.c
index dded807..45fe627 100644
--- a/libbalsa/address-book-rubrica.c
+++ b/libbalsa/address-book-rubrica.c
@@ -142,12 +142,9 @@ libbalsa_address_book_rubrica_finalize(GObject * object)
/* item_list is different from the default
* LibBalsaAddressBookText::item_list, so we free it here. */
- g_slist_foreach(ab_text->item_list, (GFunc) g_object_unref, NULL);
- g_slist_free(ab_text->item_list);
- ab_text->item_list = NULL;
+ g_slist_free_full(ab_text->item_list, g_object_unref);
- (*G_OBJECT_CLASS(libbalsa_address_book_rubrica_parent_class)->
- finalize) (object);
+ G_OBJECT_CLASS(libbalsa_address_book_rubrica_parent_class)->finalize(object);
}
/* Public method */
@@ -425,8 +422,6 @@ lbab_rubrica_load_xml(LibBalsaAddressBookRubrica * ab_rubrica,
g_slist_free(ab_text->item_list);
ab_text->item_list = NULL;
- g_list_foreach(ab_text->name_complete->items,
- (GFunc) completion_data_free, NULL);
libbalsa_completion_clear_items(ab_text->name_complete);
diff --git a/libbalsa/address-book-text.c b/libbalsa/address-book-text.c
index 04cf2f4..2c58acb 100644
--- a/libbalsa/address-book-text.c
+++ b/libbalsa/address-book-text.c
@@ -183,13 +183,7 @@ libbalsa_address_book_text_finalize(GObject * object)
ab_text = LIBBALSA_ADDRESS_BOOK_TEXT(object);
g_free(ab_text->path);
-
- g_slist_foreach(ab_text->item_list, (GFunc) lbab_text_item_free, NULL);
- g_slist_free(ab_text->item_list);
- ab_text->item_list = NULL;
-
- g_list_foreach(ab_text->name_complete->items,
- (GFunc) completion_data_free, NULL);
+ g_slist_free_full(ab_text->item_list, (GDestroyNotify) lbab_text_item_free);
libbalsa_completion_free(ab_text->name_complete);
G_OBJECT_CLASS(parent_class)->finalize(object);
@@ -308,8 +302,6 @@ lbab_text_load_file(LibBalsaAddressBookText * ab_text, FILE * stream)
g_slist_free(ab_text->item_list);
ab_text->item_list = NULL;
- g_list_foreach(ab_text->name_complete->items,
- (GFunc) completion_data_free, NULL);
libbalsa_completion_clear_items(ab_text->name_complete);
parse_address =
diff --git a/libbalsa/address-book.c b/libbalsa/address-book.c
index c97ad3b..ce37e11 100644
--- a/libbalsa/address-book.c
+++ b/libbalsa/address-book.c
@@ -108,10 +108,7 @@ libbalsa_address_book_finalize(GObject * object)
ab = LIBBALSA_ADDRESS_BOOK(object);
g_free(ab->config_prefix);
- ab->config_prefix = NULL;
-
g_free(ab->name);
- ab->name = NULL;
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index 5c775e7..0cd6966 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -101,14 +101,15 @@ libbalsa_address_view_finalize(GObject * object)
g_free(address_view->domain);
g_free(address_view->path_string);
- if (address_view->focus_row)
+ if (address_view->focus_row != NULL) {
gtk_tree_row_reference_free(address_view->focus_row);
+ }
- if (address_view->focus_idle_id)
+ if (address_view->focus_idle_id != 0) {
g_source_remove(address_view->focus_idle_id);
+ }
- (*G_OBJECT_CLASS(libbalsa_address_view_parent_class)->
- finalize) (object);
+ G_OBJECT_CLASS(libbalsa_address_view_parent_class)->finalize(object);
}
static void
diff --git a/libbalsa/address.c b/libbalsa/address.c
index f987b4a..698fe10 100644
--- a/libbalsa/address.c
+++ b/libbalsa/address.c
@@ -94,15 +94,13 @@ libbalsa_address_finalize(GObject * object)
addr = LIBBALSA_ADDRESS(object);
- g_free(addr->nick_name); addr->nick_name = NULL;
- g_free(addr->full_name); addr->full_name = NULL;
- g_free(addr->first_name); addr->first_name = NULL;
- g_free(addr->last_name); addr->last_name = NULL;
- g_free(addr->organization); addr->organization = NULL;
-
- g_list_foreach(addr->address_list, (GFunc) g_free, NULL);
- g_list_free(addr->address_list);
- addr->address_list = NULL;
+ g_free(addr->nick_name);
+ g_free(addr->full_name);
+ g_free(addr->first_name);
+ g_free(addr->last_name);
+ g_free(addr->organization);
+
+ g_list_free_full(addr->address_list, g_free);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/completion.c b/libbalsa/completion.c
index b50cc57..086190b 100644
--- a/libbalsa/completion.c
+++ b/libbalsa/completion.c
@@ -57,6 +57,7 @@
#include <glib.h>
#include "completion.h"
+#include "abook-completion.h"
/**
* SECTION: completion
@@ -193,7 +194,7 @@ libbalsa_completion_clear_items(LibBalsaCompletion * cmp)
{
g_return_if_fail(cmp != NULL);
- g_list_free(cmp->items);
+ g_list_free_full(cmp->items, (GDestroyNotify) completion_data_free);
cmp->items = NULL;
g_list_free(cmp->cache);
cmp->cache = NULL;
diff --git a/libbalsa/gmime-filter-header.c b/libbalsa/gmime-filter-header.c
index 3405d31..2568b5a 100644
--- a/libbalsa/gmime-filter-header.c
+++ b/libbalsa/gmime-filter-header.c
@@ -20,7 +20,6 @@
#include "gmime-filter-header.h"
static void g_mime_filter_header_class_init(GMimeFilterHeaderClass *klass);
-static void g_mime_filter_header_finalize(GObject *object);
static GMimeFilter *filter_copy(GMimeFilter *filter);
static void filter_filter(GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t
*outlen,
@@ -33,19 +32,11 @@ static void filter_reset(GMimeFilter *filter);
G_DEFINE_TYPE(GMimeFilterHeader, g_mime_filter_header, GMIME_TYPE_FILTER)
-static GMimeFilterClass *parent_class = NULL;
-
-
static void
g_mime_filter_header_class_init(GMimeFilterHeaderClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
GMimeFilterClass *filter_class = GMIME_FILTER_CLASS(klass);
- parent_class = g_type_class_ref(GMIME_TYPE_FILTER);
-
- object_class->finalize = g_mime_filter_header_finalize;
-
filter_class->copy = filter_copy;
filter_class->filter = filter_filter;
filter_class->complete = filter_complete;
@@ -59,12 +50,6 @@ g_mime_filter_header_init(GMimeFilterHeader *self)
self->drop_header = FALSE;
}
-static void
-g_mime_filter_header_finalize(GObject *object)
-{
- G_OBJECT_CLASS(parent_class)->finalize(object);
-}
-
static GMimeFilter *
filter_copy(GMimeFilter *filter)
{
diff --git a/libbalsa/gmime-gpgme-signature.c b/libbalsa/gmime-gpgme-signature.c
index 0d49aed..e09f6c1 100644
--- a/libbalsa/gmime-gpgme-signature.c
+++ b/libbalsa/gmime-gpgme-signature.c
@@ -130,10 +130,8 @@ static void
g_mime_gpgme_sigstat_finalize(GMimeGpgmeSigstat * self)
{
g_free(self->fingerprint);
- self->fingerprint = NULL;
if (self->key)
gpgme_key_unref(self->key);
- self->key = NULL;
g_mime_gpgme_sigstat_parent_class->finalize(G_OBJECT(self));
}
diff --git a/libbalsa/identity.c b/libbalsa/identity.c
index 479913a..9b94b4b 100644
--- a/libbalsa/identity.c
+++ b/libbalsa/identity.c
@@ -49,6 +49,7 @@ static GObjectClass* parent_class;
/* Forward references. */
static void libbalsa_identity_class_init(LibBalsaIdentityClass* klass);
static void libbalsa_identity_init(LibBalsaIdentity* ident);
+static void libbalsa_identity_dispose(GObject* object);
static void libbalsa_identity_finalize(GObject* object);
GType
@@ -86,6 +87,7 @@ libbalsa_identity_class_init(LibBalsaIdentityClass* klass)
parent_class = g_type_class_peek_parent(klass);
object_class = G_OBJECT_CLASS(klass);
+ object_class->dispose = libbalsa_identity_dispose;
object_class->finalize = libbalsa_identity_finalize;
}
@@ -129,11 +131,21 @@ libbalsa_identity_init(LibBalsaIdentity* ident)
* Destroy the object, freeing all the values in the process.
*/
static void
-libbalsa_identity_finalize(GObject * object)
+libbalsa_identity_dispose(GObject * object)
{
LibBalsaIdentity *ident = LIBBALSA_IDENTITY(object);
g_clear_object(&ident->ia);
+ g_clear_object(&ident->smtp_server);
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
+
+static void
+libbalsa_identity_finalize(GObject * object)
+{
+ LibBalsaIdentity *ident = LIBBALSA_IDENTITY(object);
+
g_free(ident->identity_name);
g_free(ident->replyto);
g_free(ident->domain);
@@ -141,7 +153,6 @@ libbalsa_identity_finalize(GObject * object)
g_free(ident->reply_string);
g_free(ident->forward_string);
g_free(ident->signature_path);
- g_clear_object(&ident->smtp_server);
g_free(ident->face);
g_free(ident->x_face);
g_free(ident->force_gpg_key_id);
diff --git a/libbalsa/imap-server.c b/libbalsa/imap-server.c
index a4a3063..e8cc9f2 100644
--- a/libbalsa/imap-server.c
+++ b/libbalsa/imap-server.c
@@ -201,7 +201,6 @@ libbalsa_imap_server_init(LibBalsaImapServer * imap_server)
connection_cleanup, imap_server);
}
-/* leave object in sane state (NULLified fields) */
static void
libbalsa_imap_server_finalize(GObject * object)
{
@@ -219,7 +218,7 @@ libbalsa_imap_server_finalize(GObject * object)
libbalsa_imap_server_force_disconnect(imap_server);
g_mutex_clear(&imap_server->lock);
- g_free(imap_server->key); imap_server->key = NULL;
+ g_free(imap_server->key);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/libbalsa-vfs.c b/libbalsa/libbalsa-vfs.c
index bdd6344..7275c1b 100644
--- a/libbalsa/libbalsa-vfs.c
+++ b/libbalsa/libbalsa-vfs.c
@@ -66,6 +66,7 @@ static GObjectClass *libbalsa_vfs_parent_class = NULL;
static void libbalsa_vfs_class_init(LibbalsaVfsClass * klass);
static void libbalsa_vfs_init(LibbalsaVfs * self);
+static void libbalsa_vfs_dispose(LibbalsaVfs * self);
static void libbalsa_vfs_finalize(LibbalsaVfs * self);
@@ -110,6 +111,8 @@ libbalsa_vfs_class_init(LibbalsaVfsClass * klass)
GObjectClass *gobject_klass = G_OBJECT_CLASS(klass);
libbalsa_vfs_parent_class = g_type_class_peek(G_TYPE_OBJECT);
+ gobject_klass->dispose =
+ (GObjectFinalizeFunc) libbalsa_vfs_dispose;
gobject_klass->finalize =
(GObjectFinalizeFunc) libbalsa_vfs_finalize;
}
@@ -123,6 +126,23 @@ libbalsa_vfs_init(LibbalsaVfs * self)
static void
+libbalsa_vfs_dispose(LibbalsaVfs * self)
+{
+ struct _LibbalsaVfsPriv * priv;
+
+ g_return_if_fail(self != NULL);
+ priv = self->priv;
+
+ if (priv != NULL) {
+ g_clear_object(&priv->gio_gfile);
+ g_clear_object(&priv->info);
+ }
+
+ libbalsa_vfs_parent_class->dispose(G_OBJECT(self));
+}
+
+
+static void
libbalsa_vfs_finalize(LibbalsaVfs * self)
{
struct _LibbalsaVfsPriv * priv;
@@ -130,14 +150,12 @@ libbalsa_vfs_finalize(LibbalsaVfs * self)
g_return_if_fail(self != NULL);
priv = self->priv;
- if (priv) {
+ if (priv != NULL) {
g_free(priv->file_uri);
g_free(priv->file_utf8);
g_free(priv->folder_uri);
g_free(priv->mime_type);
g_free(priv->charset);
- g_clear_object(&priv->gio_gfile);
- g_clear_object(&priv->info);
g_free(priv);
}
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index 778c148..c1e217b 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -266,6 +266,10 @@ libbalsa_mailbox_init(LibBalsaMailbox * mailbox)
* called just before finalize, when ref_count is about to be
* decremented to 0
*/
+
+static void lbm_get_index_entry_expunged_cb(LibBalsaMailbox * mailbox, guint seqno);
+static void lbm_msgno_changed_expunged_cb(LibBalsaMailbox * mailbox, guint seqno);
+
static void
libbalsa_mailbox_dispose(GObject * object)
{
@@ -274,6 +278,26 @@ libbalsa_mailbox_dispose(GObject * object)
while (mailbox->open_ref > 0)
libbalsa_mailbox_close(mailbox, FALSE);
+ if (mailbox->msgnos_pending != NULL) {
+ g_signal_handlers_disconnect_by_func(mailbox,
+ lbm_get_index_entry_expunged_cb,
+ mailbox->msgnos_pending);
+ g_array_free(mailbox->msgnos_pending, TRUE);
+ mailbox->msgnos_pending = NULL;
+ }
+
+ if (mailbox->msgnos_changed != NULL) {
+ g_signal_handlers_disconnect_by_func(mailbox,
+ lbm_msgno_changed_expunged_cb,
+ mailbox->msgnos_changed);
+ g_array_free(mailbox->msgnos_changed, TRUE);
+ mailbox->msgnos_changed = NULL;
+ }
+
+ libbalsa_clear_source_id(&mailbox->changed_idle_id);
+ libbalsa_clear_source_id(&mailbox->queue_check_idle_id);
+ libbalsa_clear_source_id(&mailbox->need_threading_idle_id);
+
G_OBJECT_CLASS(parent_class)->dispose(object);
}
@@ -419,14 +443,9 @@ libbalsa_mailbox_index_set_flags(LibBalsaMailbox *mailbox,
}
/* libbalsa_mailbox_finalize:
- destroys mailbox. Must leave it in sane state.
+ destroys mailbox.
*/
-static void lbm_msgno_changed_expunged_cb(LibBalsaMailbox * mailbox,
- guint seqno);
-static void lbm_get_index_entry_expunged_cb(LibBalsaMailbox * mailbox,
- guint seqno);
-
static void
libbalsa_mailbox_finalize(GObject * object)
{
@@ -437,58 +456,15 @@ libbalsa_mailbox_finalize(GObject * object)
mailbox = LIBBALSA_MAILBOX(object);
g_free(mailbox->config_prefix);
- mailbox->config_prefix = NULL;
-
g_free(mailbox->name);
- mailbox->name = NULL;
-
g_free(mailbox->url);
- mailbox->url = NULL;
libbalsa_condition_unref(mailbox->view_filter);
- mailbox->view_filter = NULL;
-
libbalsa_condition_unref(mailbox->persistent_view_filter);
- mailbox->persistent_view_filter = NULL;
- g_slist_foreach(mailbox->filters, (GFunc) g_free, NULL);
- g_slist_free(mailbox->filters);
- mailbox->filters = NULL;
- mailbox->filters_loaded = FALSE;
-
- if (mailbox->msgnos_pending) {
- g_signal_handlers_disconnect_by_func(mailbox,
- lbm_get_index_entry_expunged_cb,
- mailbox->msgnos_pending);
- g_array_free(mailbox->msgnos_pending, TRUE);
- mailbox->msgnos_pending = NULL;
- }
-
- if (mailbox->msgnos_changed) {
- g_signal_handlers_disconnect_by_func(mailbox,
- lbm_msgno_changed_expunged_cb,
- mailbox->msgnos_changed);
- g_array_free(mailbox->msgnos_changed, TRUE);
- mailbox->msgnos_changed = NULL;
- }
+ g_slist_free_full(mailbox->filters, g_free);
libbalsa_mailbox_view_free(mailbox->view);
- mailbox->view = NULL;
-
- if (mailbox->changed_idle_id) {
- g_source_remove(mailbox->changed_idle_id);
- mailbox->changed_idle_id = 0;
- }
-
- if (mailbox->queue_check_idle_id) {
- g_source_remove(mailbox->queue_check_idle_id);
- mailbox->queue_check_idle_id = 0;
- }
-
- if (mailbox->need_threading_idle_id) {
- g_source_remove(mailbox->need_threading_idle_id);
- mailbox->need_threading_idle_id = 0;
- }
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libbalsa/mailbox_imap.c b/libbalsa/mailbox_imap.c
index 910498a..397022c 100644
--- a/libbalsa/mailbox_imap.c
+++ b/libbalsa/mailbox_imap.c
@@ -96,6 +96,7 @@ static off_t ImapCacheSize = 30*1024*1024; /* 30MB */
/* issue message if downloaded part has more than this size */
static unsigned SizeMsgThreshold = 50*1024;
+static void libbalsa_mailbox_imap_dispose(GObject * object);
static void libbalsa_mailbox_imap_finalize(GObject * object);
static void libbalsa_mailbox_imap_class_init(LibBalsaMailboxImapClass *
klass);
@@ -241,6 +242,7 @@ libbalsa_mailbox_imap_class_init(LibBalsaMailboxImapClass * klass)
parent_class = g_type_class_peek_parent(klass);
+ object_class->dispose = libbalsa_mailbox_imap_dispose;
object_class->finalize = libbalsa_mailbox_imap_finalize;
libbalsa_mailbox_class->open_mailbox = libbalsa_mailbox_imap_open;
@@ -301,6 +303,30 @@ libbalsa_mailbox_imap_init(LibBalsaMailboxImap * mailbox)
mailbox->sort_field = -1; /* Initially invalid. */
}
+static void
+libbalsa_mailbox_imap_dispose(GObject * object)
+{
+ LibBalsaMailboxRemote *remote;
+ LibBalsaMailboxImap *mailbox;
+
+ remote = LIBBALSA_MAILBOX_REMOTE(object);
+ if (remote->server != NULL) {
+ g_signal_handlers_disconnect_matched(remote->server,
+ G_SIGNAL_MATCH_DATA, 0,
+ (GQuark) 0, NULL, NULL,
+ remote);
+ g_clear_object(&remote->server);
+ }
+
+ mailbox = LIBBALSA_MAILBOX_IMAP(object);
+ if (mailbox->unread_update_id != 0) {
+ g_source_remove(mailbox->unread_update_id);
+ mailbox->unread_update_id = 0;
+ }
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
+
/* libbalsa_mailbox_imap_finalize:
NOTE: we have to close mailbox ourselves without waiting for
LibBalsaMailbox::finalize because we want to destroy server as well,
@@ -310,7 +336,6 @@ static void
libbalsa_mailbox_imap_finalize(GObject * object)
{
LibBalsaMailboxImap *mailbox;
- LibBalsaMailboxRemote *remote;
g_return_if_fail(LIBBALSA_IS_MAILBOX_IMAP(object));
@@ -318,29 +343,11 @@ libbalsa_mailbox_imap_finalize(GObject * object)
g_assert(LIBBALSA_MAILBOX(mailbox)->open_ref == 0);
- remote = LIBBALSA_MAILBOX_REMOTE(object);
- g_free(mailbox->path); mailbox->path = NULL;
-
- if(remote->server) {
- g_signal_handlers_disconnect_matched(remote->server,
- G_SIGNAL_MATCH_DATA, 0,
- (GQuark) 0, NULL, NULL,
- remote);
- g_object_unref(G_OBJECT(remote->server));
- remote->server = NULL;
- }
-
- g_array_free(mailbox->sort_ranks, TRUE); mailbox->sort_ranks = NULL;
- if(mailbox->unread_update_id) {
- g_source_remove(mailbox->unread_update_id);
- mailbox->unread_update_id = 0;
- }
-
- g_list_foreach(mailbox->acls, (GFunc)imap_user_acl_free, NULL);
- g_list_free(mailbox->acls);
+ g_free(mailbox->path);
+ g_array_free(mailbox->sort_ranks, TRUE);
+ g_list_free_full(mailbox->acls, (GDestroyNotify) imap_user_acl_free);
- if (G_OBJECT_CLASS(parent_class)->finalize)
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(parent_class)->finalize(object);
}
LibBalsaMailbox*
diff --git a/libbalsa/mailbox_local.c b/libbalsa/mailbox_local.c
index 82abbd1..070c9ea 100644
--- a/libbalsa/mailbox_local.c
+++ b/libbalsa/mailbox_local.c
@@ -41,6 +41,7 @@ static LibBalsaMailboxClass *parent_class = NULL;
static void libbalsa_mailbox_local_class_init(LibBalsaMailboxLocalClass *klass);
static void libbalsa_mailbox_local_init(LibBalsaMailboxLocal * mailbox);
+static void libbalsa_mailbox_local_dispose(GObject * object);
static void libbalsa_mailbox_local_finalize(GObject * object);
static void libbalsa_mailbox_local_changed(LibBalsaMailbox * mailbox);
@@ -148,6 +149,7 @@ libbalsa_mailbox_local_class_init(LibBalsaMailboxLocalClass * klass)
parent_class = g_type_class_peek_parent(klass);
+ object_class->dispose = libbalsa_mailbox_local_dispose;
object_class->finalize = libbalsa_mailbox_local_finalize;
libbalsa_mailbox_class->changed =
@@ -381,44 +383,41 @@ lbm_local_free_info(LibBalsaMailboxLocalInfo * info)
}
static void
-libbalsa_mailbox_local_finalize(GObject * object)
+libbalsa_mailbox_local_dispose(GObject * object)
{
LibBalsaMailboxLocal *ml;
g_return_if_fail(LIBBALSA_IS_MAILBOX_LOCAL(object));
ml = LIBBALSA_MAILBOX_LOCAL(object);
- if(ml->sync_id) {
- g_source_remove(ml->sync_id);
- ml->sync_id = 0;
- }
- if(ml->thread_id) {
- g_source_remove(ml->thread_id);
- ml->thread_id = 0;
- }
+ libbalsa_clear_source_id(&ml->sync_id);
+ libbalsa_clear_source_id(&ml->thread_id);
+ libbalsa_clear_source_id(&ml->save_tree_id);
+ libbalsa_clear_source_id(&ml->load_messages_id);
- if(ml->save_tree_id) {
- g_source_remove(ml->save_tree_id);
- ml->save_tree_id = 0;
- }
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
- if (ml->threading_info) {
+static void
+libbalsa_mailbox_local_finalize(GObject * object)
+{
+ LibBalsaMailboxLocal *ml;
+
+ g_return_if_fail(LIBBALSA_IS_MAILBOX_LOCAL(object));
+
+ ml = LIBBALSA_MAILBOX_LOCAL(object);
+
+ if (ml->threading_info != NULL) {
/* The memory owned by ml->threading_info was freed on closing,
* so we free only the array itself. */
g_ptr_array_free(ml->threading_info, TRUE);
- ml->threading_info = NULL;
- }
-
- if (ml->load_messages_id) {
- g_source_remove(ml->load_messages_id);
- ml->load_messages_id = 0;
}
- if (G_OBJECT_CLASS(parent_class)->finalize)
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(parent_class)->finalize(object);
}
+
static void lbm_local_queue_save_tree(LibBalsaMailboxLocal * local);
static void
diff --git a/libbalsa/mailbox_mbox.c b/libbalsa/mailbox_mbox.c
index ff5ecbb..315a085 100644
--- a/libbalsa/mailbox_mbox.c
+++ b/libbalsa/mailbox_mbox.c
@@ -184,6 +184,8 @@ libbalsa_mailbox_mbox_dispose(GObject * object)
{
if(MAILBOX_OPEN(LIBBALSA_MAILBOX(object)))
libbalsa_mailbox_mbox_close_mailbox(LIBBALSA_MAILBOX(object), FALSE);
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
}
static gint
diff --git a/libbalsa/mailbox_pop3.c b/libbalsa/mailbox_pop3.c
index 199a7da..ae97e46 100644
--- a/libbalsa/mailbox_pop3.c
+++ b/libbalsa/mailbox_pop3.c
@@ -48,7 +48,7 @@ struct _LibBalsaMailboxPop3Class {
void (*config_changed) (LibBalsaMailboxPop3* mailbox);
};
-static void libbalsa_mailbox_pop3_finalize(GObject * object);
+static void libbalsa_mailbox_pop3_dispose(GObject * object);
static void libbalsa_mailbox_pop3_class_init(LibBalsaMailboxPop3Class *
klass);
static void libbalsa_mailbox_pop3_init(LibBalsaMailboxPop3 * mailbox);
@@ -104,7 +104,7 @@ libbalsa_mailbox_pop3_class_init(LibBalsaMailboxPop3Class * klass)
parent_class = g_type_class_peek_parent(klass);
- object_class->finalize = libbalsa_mailbox_pop3_finalize;
+ object_class->dispose = libbalsa_mailbox_pop3_dispose;
libbalsa_mailbox_class->open_mailbox = libbalsa_mailbox_pop3_open;
libbalsa_mailbox_class->check = libbalsa_mailbox_pop3_check;
@@ -132,14 +132,13 @@ libbalsa_mailbox_pop3_init(LibBalsaMailboxPop3 * mailbox)
}
static void
-libbalsa_mailbox_pop3_finalize(GObject * object)
+libbalsa_mailbox_pop3_dispose(GObject * object)
{
LibBalsaMailboxRemote *remote = LIBBALSA_MAILBOX_REMOTE(object);
- g_object_unref(G_OBJECT(remote->server));
+ g_clear_object(&remote->server);
- if (G_OBJECT_CLASS(parent_class)->finalize)
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(parent_class)->dispose(object);
}
LibBalsaMailboxPop3*
diff --git a/libbalsa/message.c b/libbalsa/message.c
index 4f068f1..cdf7da2 100644
--- a/libbalsa/message.c
+++ b/libbalsa/message.c
@@ -52,6 +52,7 @@
static void libbalsa_message_class_init(LibBalsaMessageClass * klass);
static void libbalsa_message_init(LibBalsaMessage * message);
+static void libbalsa_message_dispose(GObject * object);
static void libbalsa_message_finalize(GObject * object);
@@ -113,6 +114,7 @@ libbalsa_message_class_init(LibBalsaMessageClass * klass)
parent_class = g_type_class_peek_parent(klass);
+ object_class->dispose = libbalsa_message_dispose;
object_class->finalize = libbalsa_message_finalize;
}
@@ -126,62 +128,52 @@ libbalsa_message_new(void)
return message;
}
+/*
+ * libbalsa_message_dispose: must leave object in a sane state
+ */
+static void
+libbalsa_message_dispose(GObject * object)
+{
+ LibBalsaMessage *message;
+
+ message = LIBBALSA_MESSAGE(object);
+
+ g_clear_object(&message->sender);
+ g_clear_object(&message->mime_msg);
+#ifdef HAVE_GPGME
+ g_clear_object(&message->ident);
+#endif
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
+
+
/* libbalsa_message_finalize:
- finalize methods must leave object in 'sane' state.
- This means NULLifing released pointers.
*/
static void
libbalsa_message_finalize(GObject * object)
{
LibBalsaMessage *message;
- g_return_if_fail(object != NULL);
- g_return_if_fail(LIBBALSA_IS_MESSAGE(object));
-
message = LIBBALSA_MESSAGE(object);
- libbalsa_message_headers_destroy(message->headers);
- message->headers = NULL;
-
- g_clear_object(&message->sender);
-
#if MESSAGE_COPY_CONTENT
g_free(message->subj);
- message->subj = NULL;
#endif
- g_list_foreach(message->references, (GFunc) g_free, NULL);
- g_list_free(message->references);
- message->references = NULL;
-
- g_list_foreach(message->in_reply_to, (GFunc) g_free, NULL);
- g_list_free(message->in_reply_to);
- message->in_reply_to = NULL;
-
g_free(message->message_id);
- message->message_id = NULL;
-
g_free(message->subtype);
- message->subtype = NULL;
-
- g_list_foreach(message->parameters, (GFunc) g_strfreev, NULL);
- g_list_free(message->parameters);
- message->parameters = NULL;
+ g_list_free_full(message->references, g_free);
+ g_list_free_full(message->in_reply_to, g_free);
+ g_list_free_full(message->parameters, (GDestroyNotify) g_strfreev);
+ libbalsa_message_headers_destroy(message->headers);
libbalsa_message_body_free(message->body_list);
- message->body_list = NULL;
-
- g_clear_object(&message->mime_msg);
-
-#ifdef HAVE_GPGME
- g_clear_object(&message->ident);
-#endif
if (message->tempdir) {
- if (rmdir(message->tempdir))
+ if (rmdir(message->tempdir) != 0)
g_warning("Could not remove %s", message->tempdir);
g_free(message->tempdir);
- message->tempdir = NULL;
}
G_OBJECT_CLASS(parent_class)->finalize(object);
diff --git a/libbalsa/misc.c b/libbalsa/misc.c
index 956ed0b..41f23e5 100644
--- a/libbalsa/misc.c
+++ b/libbalsa/misc.c
@@ -1210,3 +1210,17 @@ libbalsa_font_string_to_css(const gchar * font_string,
return g_string_free(string, FALSE);
}
+
+/*
+ * Convenience function for removing and clearing a GSource id
+ */
+void
+libbalsa_clear_source_id(guint * tag)
+{
+ g_return_if_fail(tag != NULL);
+
+ if (*tag != 0) {
+ g_source_remove(*tag);
+ *tag = 0;
+ }
+}
diff --git a/libbalsa/misc.h b/libbalsa/misc.h
index b2639e6..ac02514 100644
--- a/libbalsa/misc.h
+++ b/libbalsa/misc.h
@@ -158,4 +158,6 @@ gchar * libbalsa_text_to_html(const gchar * title, const gchar * body, const gch
GString * libbalsa_html_encode_hyperlinks(GString * paragraph);
gchar *libbalsa_font_string_to_css(const gchar * font_string, const gchar * name);
+void libbalsa_clear_source_id(guint * tag);
+
#endif /* __LIBBALSA_MISC_H__ */
diff --git a/libbalsa/rfc2445.c b/libbalsa/rfc2445.c
index 603cb7a..cfa5f10 100644
--- a/libbalsa/rfc2445.c
+++ b/libbalsa/rfc2445.c
@@ -147,9 +147,9 @@ static void
libbalsa_vcal_finalize(LibBalsaVCal * self)
{
g_return_if_fail(self != NULL);
+
if (self->vevent) {
- g_list_foreach(self->vevent, (GFunc) g_object_unref, NULL);
- g_list_free(self->vevent);
+ g_list_free_full(self->vevent, g_object_unref);
}
libbalsa_vcal_parent_class->finalize(G_OBJECT(self));
diff --git a/libbalsa/server.c b/libbalsa/server.c
index 7b62f25..ebf49d7 100644
--- a/libbalsa/server.c
+++ b/libbalsa/server.c
@@ -171,7 +171,6 @@ libbalsa_server_init(LibBalsaServer * server)
server->security = NET_CLIENT_CRYPT_STARTTLS;
}
-/* leave object in sane state (NULLified fields) */
static void
libbalsa_server_finalize(GObject * object)
{
@@ -181,20 +180,19 @@ libbalsa_server_finalize(GObject * object)
server = LIBBALSA_SERVER(object);
- g_free(server->host); server->host = NULL;
- g_free(server->user); server->user = NULL;
+ g_free(server->host);
+ g_free(server->user);
+ g_free(server->cert_file);
+
if (server->passwd != NULL) {
memset(server->passwd, 0, strlen(server->passwd));
}
- libbalsa_free_password(server->passwd); server->passwd = NULL;
+ libbalsa_free_password(server->passwd);
- g_free(server->cert_file);
- server->cert_file = NULL;
if (server->cert_passphrase != NULL) {
memset(server->cert_passphrase, 0, strlen(server->cert_passphrase));
}
g_free(server->cert_passphrase);
- server->cert_passphrase = NULL;
G_OBJECT_CLASS(parent_class)->finalize(object);
}
diff --git a/libnetclient/net-client-pop.c b/libnetclient/net-client-pop.c
index 9d0a512..8741d8d 100644
--- a/libnetclient/net-client-pop.c
+++ b/libnetclient/net-client-pop.c
@@ -47,6 +47,7 @@ struct _NetClientPopPrivate {
G_DEFINE_TYPE(NetClientPop, net_client_pop, NET_CLIENT_TYPE)
+static void net_client_pop_dispose(GObject *object);
static void net_client_pop_finalise(GObject *object);
static void net_client_pop_get_capa(NetClientPop *client, guint *auth_supported);
static gboolean net_client_pop_read_reply(NetClientPop *client, gchar **reply, GError **error);
@@ -374,6 +375,7 @@ net_client_pop_class_init(NetClientPopClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ gobject_class->dispose = net_client_pop_dispose;
gobject_class->finalize = net_client_pop_finalise;
}
@@ -388,7 +390,7 @@ net_client_pop_init(NetClientPop *self)
static void
-net_client_pop_finalise(GObject *object)
+net_client_pop_dispose(GObject *object)
{
const NetClientPop *client = NET_CLIENT_POP(object);
const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_pop_parent_class);
@@ -396,10 +398,21 @@ net_client_pop_finalise(GObject *object)
/* send the 'QUIT' command - no need to evaluate the reply or check for errors */
(void) net_client_execute(NET_CLIENT(client), NULL, "QUIT", NULL);
+ (*parent_class->dispose)(object);
+}
+
+
+static void
+net_client_pop_finalise(GObject *object)
+{
+ const NetClientPop *client = NET_CLIENT_POP(object);
+ const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_pop_parent_class);
+
if (client->priv != NULL) {
g_free(client->priv->apop_banner);
g_free(client->priv);
}
+
(*parent_class->finalize)(object);
}
diff --git a/libnetclient/net-client.c b/libnetclient/net-client.c
index 78f2455..1332c47 100644
--- a/libnetclient/net-client.c
+++ b/libnetclient/net-client.c
@@ -39,6 +39,7 @@ static guint signals[3];
G_DEFINE_TYPE(NetClient, net_client, G_TYPE_OBJECT)
+static void net_client_dispose(GObject *object);
static void net_client_finalise(GObject *object);
static gboolean cert_accept_cb(GTlsConnection *conn, GTlsCertificate *peer_cert, GTlsCertificateFlags
errors, gpointer user_data);
@@ -453,6 +454,7 @@ net_client_class_init(NetClientClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
g_type_class_add_private(klass, sizeof(NetClientPrivate));
+ gobject_class->dispose = net_client_dispose;
gobject_class->finalize = net_client_finalise;
signals[0] = g_signal_new("cert-check", NET_CLIENT_TYPE, G_SIGNAL_RUN_LAST, 0U, NULL, NULL, NULL,
G_TYPE_BOOLEAN, 2U,
G_TYPE_TLS_CERTIFICATE, G_TYPE_TLS_CERTIFICATE_FLAGS);
@@ -474,7 +476,7 @@ net_client_init(NetClient *self)
static void
-net_client_finalise(GObject *object)
+net_client_dispose(GObject *object)
{
const NetClient *client = NET_CLIENT(object);
const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_parent_class);
@@ -486,6 +488,17 @@ net_client_finalise(GObject *object)
g_clear_object(&client->priv->plain_conn);
g_clear_object(&client->priv->sock);
g_clear_object(&client->priv->certificate);
+
+ (*parent_class->dispose)(object);
+}
+
+
+static void
+net_client_finalise(GObject *object)
+{
+ const NetClient *client = NET_CLIENT(object);
+ const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_parent_class);
+
g_debug("finalised connection to %s", client->priv->host_and_port);
g_free(client->priv->host_and_port);
(*parent_class->finalize)(object);
diff --git a/src/balsa-message.c b/src/balsa-message.c
index e833ba8..0025793 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -153,6 +153,7 @@ static void mdn_dialog_response(GtkWidget * dialog, gint response,
static void balsa_part_info_init(GObject *object, gpointer data);
static BalsaPartInfo* balsa_part_info_new(LibBalsaMessageBody* body);
+static void balsa_part_info_dispose(GObject * object);
static void balsa_part_info_finalize(GObject * object);
@@ -165,12 +166,16 @@ static GdkPixbuf * get_crypto_content_icon(LibBalsaMessageBody * body,
static void message_recheck_crypto_cb(GtkWidget * button, BalsaMessage * bm);
#endif /* HAVE_GPGME */
+static GObjectClass *part_info_parent_class;
static void
balsa_part_info_class_init(BalsaPartInfoClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
+ part_info_parent_class = g_type_class_peek_parent(object_class);
+
+ object_class->dispose = balsa_part_info_dispose;
object_class->finalize = balsa_part_info_finalize;
}
@@ -814,6 +819,7 @@ balsa_message_destroy(GObject * object)
g_clear_object(&bm->save_all_popup);
g_clear_object(&bm->parts_popup);
+ g_clear_object(&bm->bm_widget);
#ifdef HAVE_HTML_WIDGET
g_clear_object(&bm->html_find_info);
@@ -1665,20 +1671,28 @@ balsa_part_info_new(LibBalsaMessageBody* body)
}
static void
+balsa_part_info_dispose(GObject * object)
+{
+ BalsaPartInfo * info;
+
+ info = BALSA_PART_INFO(object);
+ g_clear_object(&info->mime_widget);
+ g_clear_object(&info->popup_menu);
+
+ part_info_parent_class->dispose(object);
+}
+
+static void
balsa_part_info_finalize(GObject * object)
{
BalsaPartInfo * info;
- GObjectClass *part_info_parent_class;
g_return_if_fail(object != NULL);
g_return_if_fail(IS_BALSA_PART_INFO(object));
info = BALSA_PART_INFO(object);
- g_clear_object(&info->mime_widget);
- g_clear_object(&info->popup_menu);
gtk_tree_path_free(info->path);
- part_info_parent_class = g_type_class_peek_parent(G_OBJECT_GET_CLASS(object));
part_info_parent_class->finalize(object);
}
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index 7ca7172..efeba1f 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -38,8 +38,6 @@
/* object related functions */
static void balsa_mime_widget_init (GTypeInstance *instance, gpointer g_class);
-static void balsa_mime_widget_class_init(BalsaMimeWidgetClass * klass);
-static void balsa_mime_widget_finalize(GObject * object);
/* fall-back widget (unknown/unsupported mime type) */
@@ -52,9 +50,6 @@ static BalsaMimeWidget *balsa_mime_widget_new_unknown(BalsaMessage * bm,
static void vadj_change_cb(GtkAdjustment *vadj, GtkWidget *widget);
-static GObjectClass *parent_class = NULL;
-
-
GType
balsa_mime_widget_get_type()
{
@@ -65,7 +60,7 @@ balsa_mime_widget_get_type()
sizeof(BalsaMimeWidgetClass),
NULL, /* base_init */
NULL, /* base_finalize */
- (GClassInitFunc) balsa_mime_widget_class_init,
+ NULL, /* class_init */
NULL, /* class_finalize */
NULL, /* class_data */
sizeof(BalsaMimeWidget),
@@ -92,16 +87,6 @@ balsa_mime_widget_init (GTypeInstance *instance, gpointer g_class)
}
-static void
-balsa_mime_widget_class_init(BalsaMimeWidgetClass * klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_ref(G_TYPE_OBJECT);
- object_class->finalize = balsa_mime_widget_finalize;
-}
-
-
/* wildcard defined whether the mime_type matches all subtypes */
typedef struct _mime_delegate_t {
gboolean wildcard;
@@ -201,20 +186,6 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
}
-static void
-balsa_mime_widget_finalize(GObject * object)
-{
- BalsaMimeWidget * mime_widget = BALSA_MIME_WIDGET(object);
-
- if (mime_widget->container && mime_widget->container != mime_widget->widget)
- gtk_widget_destroy(mime_widget->container);
- mime_widget->container = NULL;
- g_clear_object(&mime_widget->widget);
-
- G_OBJECT_CLASS(parent_class)->finalize(object);
-}
-
-
static BalsaMimeWidget *
balsa_mime_widget_new_unknown(BalsaMessage * bm,
LibBalsaMessageBody * mime_body,
diff --git a/src/balsa-print-object-decor.c b/src/balsa-print-object-decor.c
index 81003c4..741ec8d 100644
--- a/src/balsa-print-object-decor.c
+++ b/src/balsa-print-object-decor.c
@@ -29,7 +29,7 @@
static void
balsa_print_object_decor_class_init(BalsaPrintObjectDecorClass *klass);
static void balsa_print_object_decor_init (GTypeInstance *instance, gpointer g_class);
-static void balsa_print_object_decor_destroy(GObject * self);
+static void balsa_print_object_decor_finalize(GObject * self);
static void balsa_print_object_decor_draw(BalsaPrintObject * self,
GtkPrintContext * context,
@@ -73,7 +73,7 @@ balsa_print_object_decor_class_init(BalsaPrintObjectDecorClass *klass)
parent_class = g_type_class_ref(BALSA_TYPE_PRINT_OBJECT);
BALSA_PRINT_OBJECT_CLASS(klass)->draw =
balsa_print_object_decor_draw;
- G_OBJECT_CLASS(klass)->finalize = balsa_print_object_decor_destroy;
+ G_OBJECT_CLASS(klass)->finalize = balsa_print_object_decor_finalize;
}
@@ -88,7 +88,7 @@ balsa_print_object_decor_init(GTypeInstance * instance,
static void
-balsa_print_object_decor_destroy(GObject * self)
+balsa_print_object_decor_finalize(GObject * self)
{
BalsaPrintObjectDecor *po = BALSA_PRINT_OBJECT_DECOR(self);
diff --git a/src/balsa-print-object-default.c b/src/balsa-print-object-default.c
index d3d9f50..db9e14f 100644
--- a/src/balsa-print-object-default.c
+++ b/src/balsa-print-object-default.c
@@ -34,7 +34,8 @@ balsa_print_object_default_class_init(BalsaPrintObjectDefaultClass *
klass);
static void balsa_print_object_default_init(GTypeInstance * instance,
gpointer g_class);
-static void balsa_print_object_default_destroy(GObject * self);
+static void balsa_print_object_default_dispose(GObject * self);
+static void balsa_print_object_default_finalize(GObject * self);
static void balsa_print_object_default_draw(BalsaPrintObject * self,
GtkPrintContext * context,
@@ -78,7 +79,8 @@ balsa_print_object_default_class_init(BalsaPrintObjectDefaultClass * klass)
parent_class = g_type_class_ref(BALSA_TYPE_PRINT_OBJECT);
BALSA_PRINT_OBJECT_CLASS(klass)->draw =
balsa_print_object_default_draw;
- G_OBJECT_CLASS(klass)->finalize = balsa_print_object_default_destroy;
+ G_OBJECT_CLASS(klass)->dispose = balsa_print_object_default_dispose;
+ G_OBJECT_CLASS(klass)->finalize = balsa_print_object_default_finalize;
}
@@ -93,11 +95,21 @@ balsa_print_object_default_init(GTypeInstance * instance, gpointer g_class)
static void
-balsa_print_object_default_destroy(GObject * self)
+balsa_print_object_default_dispose(GObject * self)
{
BalsaPrintObjectDefault *po = BALSA_PRINT_OBJECT_DEFAULT(self);
g_clear_object(&po->pixbuf);
+
+ G_OBJECT_CLASS(parent_class)->dispose(self);
+}
+
+
+static void
+balsa_print_object_default_finalize(GObject * self)
+{
+ BalsaPrintObjectDefault *po = BALSA_PRINT_OBJECT_DEFAULT(self);
+
g_free(po->description);
G_OBJECT_CLASS(parent_class)->finalize(self);
diff --git a/src/balsa-print-object-header.c b/src/balsa-print-object-header.c
index 8003e9e..24d244c 100644
--- a/src/balsa-print-object-header.c
+++ b/src/balsa-print-object-header.c
@@ -33,7 +33,7 @@
static void balsa_print_object_header_class_init(BalsaPrintObjectHeaderClass * klass);
static void balsa_print_object_header_init(GTypeInstance * instance,
gpointer g_class);
-static void balsa_print_object_header_destroy(GObject * self);
+static void balsa_print_object_header_finalize(GObject * self);
static void balsa_print_object_header_draw(BalsaPrintObject * self,
GtkPrintContext * context,
@@ -87,7 +87,7 @@ balsa_print_object_header_class_init(BalsaPrintObjectHeaderClass * klass)
parent_class = g_type_class_ref(BALSA_TYPE_PRINT_OBJECT);
BALSA_PRINT_OBJECT_CLASS(klass)->draw =
balsa_print_object_header_draw;
- G_OBJECT_CLASS(klass)->finalize = balsa_print_object_header_destroy;
+ G_OBJECT_CLASS(klass)->finalize = balsa_print_object_header_finalize;
}
@@ -101,7 +101,7 @@ balsa_print_object_header_init(GTypeInstance * instance, gpointer g_class)
static void
-balsa_print_object_header_destroy(GObject * self)
+balsa_print_object_header_finalize(GObject * self)
{
BalsaPrintObjectHeader *po = BALSA_PRINT_OBJECT_HEADER(self);
diff --git a/src/balsa-print-object-image.c b/src/balsa-print-object-image.c
index b4f75b8..ad7ccfb 100644
--- a/src/balsa-print-object-image.c
+++ b/src/balsa-print-object-image.c
@@ -30,7 +30,7 @@ static void
balsa_print_object_image_class_init(BalsaPrintObjectImageClass * klass);
static void balsa_print_object_image_init (GTypeInstance *instance,
gpointer g_class);
-static void balsa_print_object_image_destroy(GObject * self);
+static void balsa_print_object_image_dispose(GObject * self);
static void balsa_print_object_image_draw(BalsaPrintObject * self,
GtkPrintContext * context,
@@ -74,7 +74,7 @@ balsa_print_object_image_class_init(BalsaPrintObjectImageClass * klass)
parent_class = g_type_class_ref(BALSA_TYPE_PRINT_OBJECT);
BALSA_PRINT_OBJECT_CLASS(klass)->draw =
balsa_print_object_image_draw;
- G_OBJECT_CLASS(klass)->finalize = balsa_print_object_image_destroy;
+ G_OBJECT_CLASS(klass)->dispose = balsa_print_object_image_dispose;
}
@@ -89,13 +89,13 @@ balsa_print_object_image_init(GTypeInstance * instance, gpointer g_class)
static void
-balsa_print_object_image_destroy(GObject * self)
+balsa_print_object_image_dispose(GObject * self)
{
BalsaPrintObjectImage *po = BALSA_PRINT_OBJECT_IMAGE(self);
g_clear_object(&po->pixbuf);
- G_OBJECT_CLASS(parent_class)->finalize(self);
+ G_OBJECT_CLASS(parent_class)->dispose(self);
}
diff --git a/src/balsa-print-object-text.c b/src/balsa-print-object-text.c
index 6d310c1..df96ffb 100644
--- a/src/balsa-print-object-text.c
+++ b/src/balsa-print-object-text.c
@@ -51,7 +51,7 @@ typedef struct {
static void balsa_print_object_text_class_init(BalsaPrintObjectTextClass * klass);
static void balsa_print_object_text_init(GTypeInstance * instance,
gpointer g_class);
-static void balsa_print_object_text_destroy(GObject * self);
+static void balsa_print_object_text_finalize(GObject * self);
static void balsa_print_object_text_draw(BalsaPrintObject * self,
GtkPrintContext * context,
@@ -100,7 +100,7 @@ balsa_print_object_text_class_init(BalsaPrintObjectTextClass * klass)
parent_class = g_type_class_ref(BALSA_TYPE_PRINT_OBJECT);
BALSA_PRINT_OBJECT_CLASS(klass)->draw =
balsa_print_object_text_draw;
- G_OBJECT_CLASS(klass)->finalize = balsa_print_object_text_destroy;
+ G_OBJECT_CLASS(klass)->finalize = balsa_print_object_text_finalize;
}
@@ -115,12 +115,11 @@ balsa_print_object_text_init(GTypeInstance * instance, gpointer g_class)
static void
-balsa_print_object_text_destroy(GObject * self)
+balsa_print_object_text_finalize(GObject * self)
{
BalsaPrintObjectText *po = BALSA_PRINT_OBJECT_TEXT(self);
- g_list_foreach(po->attributes, (GFunc) g_free, NULL);
- g_list_free(po->attributes);
+ g_list_free_full(po->attributes, g_free);
g_free(po->text);
G_OBJECT_CLASS(parent_class)->finalize(self);
diff --git a/src/balsa-print-object.c b/src/balsa-print-object.c
index 4f557be..4c2a535 100644
--- a/src/balsa-print-object.c
+++ b/src/balsa-print-object.c
@@ -38,7 +38,6 @@
static void balsa_print_object_init(GTypeInstance * instance,
gpointer g_class);
static void balsa_print_object_class_init(BalsaPrintObjectClass * klass);
-static void balsa_print_object_destroy(GObject * object);
static GObjectClass *parent_class = NULL;
@@ -88,10 +87,7 @@ balsa_print_object_init(GTypeInstance * instance, gpointer g_class)
static void
balsa_print_object_class_init(BalsaPrintObjectClass * klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
-
parent_class = g_type_class_ref(G_TYPE_OBJECT);
- object_class->finalize = balsa_print_object_destroy;
klass->draw = balsa_print_object_draw;
}
@@ -206,13 +202,6 @@ balsa_print_object_draw(BalsaPrintObject * self, GtkPrintContext * context,
}
-static void
-balsa_print_object_destroy(GObject * object)
-{
- parent_class->finalize(object);
-}
-
-
/* == various print helper functions == */
/* return the width of the passed string in Pango units */
diff --git a/src/filter-run-dialog.c b/src/filter-run-dialog.c
index 47013b5..7e31bcd 100644
--- a/src/filter-run-dialog.c
+++ b/src/filter-run-dialog.c
@@ -450,15 +450,17 @@ void balsa_filter_run_dialog_init(BalsaFilterRunDialog * p)
}
/* balsa_filter_run_dispose:
- FIXME: why is it called twice? Is it a problem?
*/
static void
balsa_filter_run_dispose(GObject * object)
{
BalsaFilterRunDialog* bfrd = BALSA_FILTER_RUN_DIALOG(object);
- if (bfrd->mbox)
+
+ if (bfrd->mbox != NULL) {
libbalsa_mailbox_close(bfrd->mbox, balsa_app.expunge_on_close);
- bfrd->mbox = NULL;
+ bfrd->mbox = NULL;
+ }
+
G_OBJECT_CLASS(parent_class)->dispose(object);
}
diff --git a/src/mailbox-node.c b/src/mailbox-node.c
index e5af7b4..67c5c7b 100644
--- a/src/mailbox-node.c
+++ b/src/mailbox-node.c
@@ -192,14 +192,14 @@ balsa_mailbox_node_dispose(GObject * object)
BalsaMailboxNode *mn = BALSA_MAILBOX_NODE(object);
LibBalsaMailbox *mailbox = mn->mailbox;
- if (mailbox) {
+ if (mailbox != NULL) {
libbalsa_mailbox_set_open(mailbox,
libbalsa_mailbox_is_open(mailbox));
config_save_mailbox_view(mailbox->url, mailbox->view);
- if (balsa_app.main_window)
+ if (balsa_app.main_window != NULL) {
balsa_window_close_mbnode(balsa_app.main_window, mn);
- g_object_unref(mailbox);
- mn->mailbox = NULL;
+ }
+ g_clear_object(&mn->mailbox);
}
G_OBJECT_CLASS(parent_class)->dispose(object);
@@ -213,19 +213,18 @@ balsa_mailbox_node_finalize(GObject * object)
mn = BALSA_MAILBOX_NODE(object);
balsa_mailbox_node_clear_children_cache(mn);
- mn->parent = NULL;
- g_free(mn->name); mn->name = NULL;
- g_free(mn->dir); mn->dir = NULL;
- g_free(mn->config_prefix); mn->config_prefix = NULL;
+ mn->parent = NULL;
+ g_free(mn->name);
+ g_free(mn->dir);
+ g_free(mn->config_prefix);
- if (mn->server) {
+ if (mn->server != NULL) {
g_signal_handlers_disconnect_matched(mn->server,
G_SIGNAL_MATCH_DATA, 0,
(GQuark) 0, NULL, NULL, mn);
- mn->server = NULL;
}
- G_OBJECT_CLASS(parent_class)->finalize(G_OBJECT(object));
+ G_OBJECT_CLASS(parent_class)->finalize(object);
}
static void
diff --git a/src/main-window.c b/src/main-window.c
index 9433bdc..9f8995c 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -108,7 +108,7 @@ static void balsa_window_real_open_mbnode(BalsaWindow *window,
gboolean set_current);
static void balsa_window_real_close_mbnode(BalsaWindow *window,
BalsaMailboxNode *mbnode);
-static void balsa_window_destroy(GObject * object);
+static void balsa_window_dispose(GObject * object);
static gboolean bw_close_mailbox_on_timer(BalsaWindow * window);
@@ -206,7 +206,7 @@ balsa_window_class_init(BalsaWindowClass * klass)
NULL, NULL,
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
- object_class->dispose = balsa_window_destroy;
+ object_class->dispose = balsa_window_dispose;
klass->open_mbnode = balsa_window_real_open_mbnode;
klass->close_mbnode = balsa_window_real_close_mbnode;
@@ -3110,7 +3110,7 @@ bw_close_mailbox_on_timer(BalsaWindow * window)
}
static void
-balsa_window_destroy(GObject * object)
+balsa_window_dispose(GObject * object)
{
BalsaWindow *window;
@@ -3120,15 +3120,11 @@ balsa_window_destroy(GObject * object)
* we no longer need it, so we just drop our pointer: */
window->preview = NULL;
- if (window->network_changed_source_id != 0) {
- g_source_remove(window->network_changed_source_id);
- window->network_changed_source_id = 0;
- }
-
- if (G_OBJECT_CLASS(balsa_window_parent_class)->dispose != NULL)
- G_OBJECT_CLASS(balsa_window_parent_class)->dispose(object);
+ libbalsa_clear_source_id(&window->network_changed_source_id);
balsa_unregister_pixmaps();
+
+ G_OBJECT_CLASS(balsa_window_parent_class)->dispose(object);
}
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 16ab6fe..4688a52 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -289,7 +289,7 @@ struct _BalsaAttachInfoClass {
static GType balsa_attach_info_get_type();
static void balsa_attach_info_init(GObject *object, gpointer data);
static BalsaAttachInfo* balsa_attach_info_new();
-static void balsa_attach_info_destroy(GObject * object);
+static void balsa_attach_info_finalize(GObject * object);
#define BALSA_MSG_ATTACH_MODEL(x) gtk_tree_view_get_model(GTK_TREE_VIEW((x)->tree_view))
@@ -307,7 +307,7 @@ balsa_attach_info_class_init(BalsaAttachInfoClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
- object_class->finalize = balsa_attach_info_destroy;
+ object_class->finalize = balsa_attach_info_finalize;
}
static GType
@@ -359,7 +359,7 @@ balsa_attach_info_new(BalsaSendmsg *bm)
}
static void
-balsa_attach_info_destroy(GObject * object)
+balsa_attach_info_finalize(GObject * object)
{
BalsaAttachInfo * info;
GObjectClass *parent_class;
diff --git a/src/toolbar-factory.c b/src/toolbar-factory.c
index 4c815b9..1dd1b39 100644
--- a/src/toolbar-factory.c
+++ b/src/toolbar-factory.c
@@ -62,15 +62,24 @@ static GObjectClass* parent_class;
static guint model_signals[LAST_SIGNAL] = { 0 };
static void
+balsa_toolbar_model_dispose(GObject * object)
+{
+ BalsaToolbarModel *model = BALSA_TOOLBAR_MODEL(object);
+
+ g_clear_object(&model->settings);
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
+
+
+static void
balsa_toolbar_model_finalize(GObject * object)
{
BalsaToolbarModel *model = BALSA_TOOLBAR_MODEL(object);
if (model->legal) {
g_hash_table_destroy(model->legal);
- model->legal = NULL;
}
- g_clear_object(&model->settings);
G_OBJECT_CLASS(parent_class)->finalize(object);
}
@@ -90,6 +99,7 @@ balsa_toolbar_model_class_init(BalsaToolbarModelClass* klass)
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
object_class = G_OBJECT_CLASS(klass);
+ object_class->dispose = balsa_toolbar_model_dispose;
object_class->finalize = balsa_toolbar_model_finalize;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]