]> git.0d.be Git - empathy.git/commitdiff
Make AccountChooser-related code simpler and clearer (re #633481).
authorVitaly Minko <vitaly.minko@gmail.com>
Fri, 12 Nov 2010 14:47:51 +0000 (17:47 +0300)
committerVitaly Minko <vitaly.minko@gmail.com>
Fri, 12 Nov 2010 14:47:51 +0000 (17:47 +0300)
libempathy-gtk/empathy-account-chooser.c
libempathy-gtk/empathy-new-message-dialog.c
src/empathy-new-chatroom-dialog.c

index f077827fb27c33b672083755fd0ee241a77c5d3a..f1c0ec6b4e87ace664373999628b4f975d95e1ef 100644 (file)
@@ -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,
index 8249b8693bbe35c36bb7e7ee0ef8db88239e9deb..4747dfbb92762c1de26fda9d2192b9a28eb0a34e 100644 (file)
@@ -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);
 }
 
index 6cf45ad83952c0a428e78f68bcd94a8fb31ec19f..58690d139e750f5585478f983ae2a7c17d6283ec 100644 (file)
@@ -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);
 }