[evolution] EMailSidebar: Avoid runtime warnings in dispose().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] EMailSidebar: Avoid runtime warnings in dispose().
- Date: Fri, 6 Apr 2012 00:08:38 +0000 (UTC)
commit 90b9db7b785e83b3e55a1d511b9a491d6dfd1a4b
Author: Matthew Barnes <mbarnes redhat com>
Date: Thu Apr 5 20:07:32 2012 -0400
EMailSidebar: Avoid runtime warnings in dispose().
mail/e-mail-sidebar.c | 36 ++++++++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/mail/e-mail-sidebar.c b/mail/e-mail-sidebar.c
index f0678f7..b8dc823 100644
--- a/mail/e-mail-sidebar.c
+++ b/mail/e-mail-sidebar.c
@@ -36,6 +36,8 @@
struct _EMailSidebarPrivate {
GKeyFile *key_file; /* not owned */
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
};
enum {
@@ -199,10 +201,13 @@ mail_sidebar_get_property (GObject *object,
static void
mail_sidebar_constructed (GObject *object)
{
+ EMailSidebarPrivate *priv;
GtkTreeSelection *selection;
GtkTreeView *tree_view;
GtkTreeModel *model;
+ priv = E_MAIL_SIDEBAR_GET_PRIVATE (object);
+
/* Chain up to parent's constructed() property. */
G_OBJECT_CLASS (e_mail_sidebar_parent_class)->constructed (object);
@@ -213,6 +218,12 @@ mail_sidebar_constructed (GObject *object)
em_folder_tree_model_set_selection (
EM_FOLDER_TREE_MODEL (model), selection);
+ /* Keep an internal reference to these since we're connecting
+ * signal handlers to them. Retrieving them during dispose()
+ * does not guarantee we get the same instances back. */
+ priv->model = g_object_ref (model);
+ priv->selection = g_object_ref (selection);
+
g_signal_connect (
model, "loaded-row",
G_CALLBACK (mail_sidebar_model_loaded_row_cb), object);
@@ -225,16 +236,25 @@ mail_sidebar_constructed (GObject *object)
static void
mail_sidebar_dispose (GObject *object)
{
- GtkTreeSelection *selection;
- GtkTreeView *tree_view;
- GtkTreeModel *model;
+ EMailSidebarPrivate *priv;
- tree_view = GTK_TREE_VIEW (object);
- model = gtk_tree_view_get_model (tree_view);
- selection = gtk_tree_view_get_selection (tree_view);
+ priv = E_MAIL_SIDEBAR_GET_PRIVATE (object);
- g_signal_handlers_disconnect_by_func (model, mail_sidebar_model_loaded_row_cb, object);
- g_signal_handlers_disconnect_by_func (selection, mail_sidebar_selection_changed_cb, object);
+ if (priv->model != NULL) {
+ g_signal_handlers_disconnect_by_func (
+ priv->model,
+ mail_sidebar_model_loaded_row_cb, object);
+ g_object_unref (priv->model);
+ priv->model = NULL;
+ }
+
+ if (priv->selection != NULL) {
+ g_signal_handlers_disconnect_by_func (
+ priv->selection,
+ mail_sidebar_selection_changed_cb, object);
+ g_object_unref (priv->selection);
+ priv->selection = NULL;
+ }
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_mail_sidebar_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]