aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-roster-view.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/libempathy-gtk/empathy-roster-view.c b/libempathy-gtk/empathy-roster-view.c
index 8c2c277b6..a5d145943 100644
--- a/libempathy-gtk/empathy-roster-view.c
+++ b/libempathy-gtk/empathy-roster-view.c
@@ -1046,12 +1046,27 @@ empathy_roster_view_constructed (GObject *object)
}
static void
+clear_view (EmpathyRosterView *self)
+{
+ g_hash_table_remove_all (self->priv->roster_contacts);
+ g_hash_table_remove_all (self->priv->roster_groups);
+ g_hash_table_remove_all (self->priv->displayed_contacts);
+
+ gtk_container_foreach (GTK_CONTAINER (self),
+ (GtkCallback) gtk_widget_destroy, NULL);
+}
+
+static void
empathy_roster_view_dispose (GObject *object)
{
EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
void (*chain_up) (GObject *) =
((GObjectClass *) empathy_roster_view_parent_class)->dispose;
+ /* Start by clearing the view so our internal hash tables are cleared from
+ * objects being destroyed. */
+ clear_view (self);
+
stop_flashing (self);
empathy_roster_view_set_live_search (self, NULL);
@@ -1377,17 +1392,6 @@ empathy_roster_view_show_offline (EmpathyRosterView *self,
g_object_notify (G_OBJECT (self), "show-offline");
}
-static void
-clear_view (EmpathyRosterView *self)
-{
- g_hash_table_remove_all (self->priv->roster_contacts);
- g_hash_table_remove_all (self->priv->roster_groups);
- g_hash_table_remove_all (self->priv->displayed_contacts);
-
- gtk_container_foreach (GTK_CONTAINER (self),
- (GtkCallback) gtk_widget_destroy, NULL);
-}
-
void
empathy_roster_view_show_groups (EmpathyRosterView *self,
gboolean show)