aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-account-chooser.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/empathy-account-chooser.c')
-rw-r--r--libempathy-gtk/empathy-account-chooser.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index f077827fb..f1c0ec6b4 100644
--- a/libempathy-gtk/empathy-account-chooser.c
+++ b/libempathy-gtk/empathy-account-chooser.c
@@ -80,6 +80,30 @@ typedef struct {
GtkTreeIter *iter;
} FilterResultCallbackData;
+static FilterResultCallbackData *
+filter_result_callback_data_new (EmpathyAccountChooser *chooser,
+ TpAccount *account,
+ GtkTreeIter *iter)
+{
+ FilterResultCallbackData *data;
+
+ data = g_slice_new0 (FilterResultCallbackData);
+ data->chooser = g_object_ref (chooser);
+ data->account = g_object_ref (account);
+ data->iter = gtk_tree_iter_copy (iter);
+
+ return data;
+}
+
+static void
+filter_result_callback_data_free (FilterResultCallbackData *data)
+{
+ g_object_unref (data->chooser);
+ g_object_unref (data->account);
+ gtk_tree_iter_free (data->iter);
+ g_slice_free (FilterResultCallbackData, data);
+}
+
/* Distinguishes between store entries which are actually accounts, and special
* items like the "All" entry and the separator below it, so they can be sorted
* correctly. Higher-numbered entries will sort earlier.
@@ -765,8 +789,7 @@ account_chooser_filter_ready_cb (gboolean is_enabled,
}
g_object_unref (account);
- g_free (iter);
- g_slice_free (FilterResultCallbackData, fr_data);
+ filter_result_callback_data_free (fr_data);
}
static void
@@ -792,10 +815,7 @@ account_chooser_update_iter (EmpathyAccountChooser *chooser,
if (account == NULL)
return;
- data = g_slice_new0 (FilterResultCallbackData);
- data->chooser = chooser;
- data->account = account;
- data->iter = g_memdup (iter, sizeof (GtkTreeIter));
+ data = filter_result_callback_data_new (chooser, account, iter);
if (priv->filter)
priv->filter (account, account_chooser_filter_ready_cb,