From c6494847b87a4fbd7d1409f5a7b717a125745466 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Thu, 29 Oct 2009 14:56:51 +0100 Subject: empathy-accounts-dialog: do_constructor: always return a new reference This fix is cleaner than the previous commmit. The constructor now always returns a new reference to the caller. It also now has an extra reference that it will release once the dialog as been destroyed. --- src/empathy-accounts-dialog.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/empathy-accounts-dialog.c') diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 5829ff8d0..e877e632f 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -1762,9 +1762,7 @@ do_constructor (GType type, if (dialog_singleton) { retval = G_OBJECT (dialog_singleton); - /* We don't ref the object as the caller is not suppose to unref it. - * The dialog is unreffed in accounts_dialog_destroy_cb when the window - * has been destroyed. */ + g_object_ref (retval); } else { @@ -1774,6 +1772,9 @@ do_constructor (GType type, dialog_singleton = EMPATHY_ACCOUNTS_DIALOG (retval); g_object_add_weak_pointer (retval, (gpointer) &dialog_singleton); + /* We add an extra reference that we'll release when the dialog is + * destroyed (accounts_dialog_destroy_cb) */ + g_object_ref (retval); } return retval; @@ -1912,6 +1913,9 @@ empathy_accounts_dialog_show (GtkWindow *parent, } gtk_window_present (GTK_WINDOW (priv->window)); + /* EmpathyAccountsDialog kepts a ref on itself until the dialog is + * destroyed so we can release the ref returned by the constructor now. */ + g_object_unref (dialog); return priv->window; } -- cgit v1.2.3