[empathy: 2/3] Make AccountChooser-related code simpler and clearer (re #633481).



commit 875bf697d54f1c4ca98478ded849bc733828f758
Author: Vitaly Minko <vitaly minko gmail com>
Date:   Fri Nov 12 17:47:51 2010 +0300

    Make AccountChooser-related code simpler and clearer (re #633481).

 libempathy-gtk/empathy-account-chooser.c    |   32 ++++++++++++++++++----
 libempathy-gtk/empathy-new-message-dialog.c |   33 +++-------------------
 src/empathy-new-chatroom-dialog.c           |   38 ++++----------------------
 3 files changed, 37 insertions(+), 66 deletions(-)
---
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index f077827..f1c0ec6 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,
diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c
index 8249b86..4747dfb 100644
--- a/libempathy-gtk/empathy-new-message-dialog.c
+++ b/libempathy-gtk/empathy-new-message-dialog.c
@@ -90,40 +90,17 @@ conn_prepared_cb (GObject *conn,
   FilterCallbackData *data = user_data;
   GError *myerr = NULL;
   TpCapabilities *caps;
-  GPtrArray *classes;
-  guint i;
 
   if (!tp_proxy_prepare_finish (conn, result, &myerr))
-      goto out;
-
-  caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
-  classes = tp_capabilities_get_channel_classes (caps);
-
-  for (i = 0; i < classes->len; i++)
     {
-      GHashTable *fixed;
-      GStrv allowed;
-      const gchar *chan_type;
-
-      tp_value_array_unpack (g_ptr_array_index (classes, i), 2,
-          &fixed, &allowed);
-
-      chan_type = tp_asv_get_string (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE);
-
-      if (tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
-        continue;
-
-      if (tp_asv_get_uint32 (fixed, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) !=
-          TP_HANDLE_TYPE_CONTACT)
-        continue;
-
-      data->callback (TRUE, data->user_data);
+      data->callback (FALSE, data->user_data);
       g_slice_free (FilterCallbackData, data);
-      return;
     }
 
-out:
-  data->callback (FALSE, data->user_data);
+  caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
+  data->callback (tp_capabilities_supports_text_chats (caps),
+      data->user_data);
+
   g_slice_free (FilterCallbackData, data);
 }
 
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index 6cf45ad..58690d1 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -146,42 +146,16 @@ conn_prepared_cb (GObject *conn,
 	FilterCallbackData *data = user_data;
 	GError             *myerr = NULL;
 	TpCapabilities     *caps;
-	GPtrArray          *classes;
-	guint               i;
 
-	if (!tp_proxy_prepare_finish (conn, result, &myerr))
-		goto out;
-
-	caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
-	classes = tp_capabilities_get_channel_classes (caps);
-
-	for (i = 0; i < classes->len; i++) {
-		GHashTable *fixed;
-		GStrv allowed;
-		const gchar *chan_type;
-
-		tp_value_array_unpack (g_ptr_array_index (classes, i), 2,
-							  &fixed, &allowed);
-
-		chan_type = tp_asv_get_string (fixed,
-					       TP_PROP_CHANNEL_CHANNEL_TYPE);
-
-		if (tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
-			continue;
-
-		if (tp_asv_get_uint32 (fixed,
-				       TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
-				       NULL) !=
-		    TP_HANDLE_TYPE_ROOM)
-			continue;
-
-		data->callback (TRUE, data->user_data);
+	if (!tp_proxy_prepare_finish (conn, result, &myerr)) {
+		data->callback (FALSE, data->user_data);
 		g_slice_free (FilterCallbackData, data);
-		return;
 	}
 
-out:
-	data->callback (FALSE, data->user_data);
+	caps = tp_connection_get_capabilities (TP_CONNECTION (conn));
+	data->callback (tp_capabilities_supports_text_chatrooms (caps),
+			data->user_data);
+
 	g_slice_free (FilterCallbackData, data);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]