EmpathyAccount * get_test_account (void) { McProfile *profile; EmpathyAccountManager *account_manager; EmpathyAccount *account; GList *accounts; account_manager = empathy_account_manager_dup_singleton (); profile = mc_profile_lookup ("test"); accounts = mc_accounts_list_by_profile (profile); if (g_list_length (accounts) == 0) { /* need to create a test account */ account = empathy_account_manager_create_by_profile (account_manager, profile); } else { /* reuse an existing test account */ McAccount *mc_account; mc_account = accounts->data; account = empathy_account_manager_lookup (account_manager, mc_account_get_unique_name (mc_account)); } g_object_unref (account_manager); g_object_unref (profile); return account; }
static void contact_list_view_drag_data_received (GtkWidget *view, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection, guint info, guint time) { EmpathyContactListViewPriv *priv; EmpathyAccountManager *account_manager; EmpathyTpContactFactory *factory = NULL; EmpathyAccount *account; GtkTreeModel *model; GtkTreeViewDropPosition position; GtkTreePath *path; const gchar *id; gchar **strv = NULL; const gchar *account_id; const gchar *contact_id; gchar *new_group = NULL; gchar *old_group = NULL; DndGetContactData *data; gboolean is_row; gboolean success = TRUE; priv = GET_PRIV (view); model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); /* Get destination group information. */ is_row = gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (view), x, y, &path, &position); if (is_row) { new_group = empathy_contact_list_store_get_parent_group (model, path, NULL); gtk_tree_path_free (path); } /* Get source group information. */ if (priv->drag_row) { path = gtk_tree_row_reference_get_path (priv->drag_row); if (path) { old_group = empathy_contact_list_store_get_parent_group ( model, path, NULL); gtk_tree_path_free (path); } } if (!tp_strdiff (old_group, new_group)) { g_free (new_group); g_free (old_group); goto OUT; } id = (const gchar*) gtk_selection_data_get_data (selection); DEBUG ("Received %s%s drag & drop contact from roster with id:'%s'", context->action == GDK_ACTION_MOVE ? "move" : "", context->action == GDK_ACTION_COPY ? "copy" : "", id); strv = g_strsplit (id, "/", 2); account_id = strv[0]; contact_id = strv[1]; account_manager = empathy_account_manager_dup_singleton (); account = empathy_account_manager_lookup (account_manager, account_id); if (account) { TpConnection *connection; connection = empathy_account_get_connection (account); if (connection) { factory = empathy_tp_contact_factory_dup_singleton (connection); } } g_object_unref (account_manager); if (!factory) { DEBUG ("Failed to get factory for account '%s'", account_id); success = FALSE; g_free (new_group); g_free (old_group); goto OUT; } data = g_slice_new0 (DndGetContactData); data->new_group = new_group; data->old_group = old_group; data->action = context->action; /* FIXME: We should probably wait for the cb before calling * gtk_drag_finish */ empathy_tp_contact_factory_get_from_id (factory, contact_id, contact_list_view_drag_got_contact, data, (GDestroyNotify) contact_list_view_dnd_get_contact_free, G_OBJECT (view)); g_object_unref (factory); OUT: g_strfreev (strv); gtk_drag_finish (context, success, FALSE, GDK_CURRENT_TIME); }