static void contact_widget_change_contact (EmpathyContactWidget *information) { EmpathyTpContactFactory *factory; TpConnection *connection; connection = empathy_account_chooser_get_connection ( EMPATHY_ACCOUNT_CHOOSER (information->widget_account)); if (!connection) return; factory = empathy_tp_contact_factory_dup_singleton (connection); if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID) { const gchar *id; id = gtk_entry_get_text (GTK_ENTRY (information->widget_id)); if (!EMP_STR_EMPTY (id)) { empathy_tp_contact_factory_get_from_id (factory, id, contact_widget_got_contact_cb, information, NULL, G_OBJECT (information->vbox_contact_widget)); } } else { empathy_tp_contact_factory_get_from_handle (factory, tp_connection_get_self_handle (connection), contact_widget_got_contact_cb, information, NULL, G_OBJECT (information->vbox_contact_widget)); } g_object_unref (factory); }
EmpathyContact * empathy_contact_factory_get_from_id (EmpathyContactFactory *factory, McAccount *account, const gchar *id) { EmpathyTpContactFactory *tp_factory; tp_factory = empathy_contact_factory_get_tp_factory (factory, account); return empathy_tp_contact_factory_get_from_id (tp_factory, id); }
static void megaphone_applet_new_connection_cb (EmpathyAccountManager *manager, TpConnection *connection, EmpathyAccount *account, MegaphoneApplet *applet) { MegaphoneAppletPriv *priv = GET_PRIV (applet); if (priv->contact || !empathy_account_equal (account, priv->account)) { return; } priv->factory = empathy_tp_contact_factory_dup_singleton (connection); empathy_tp_contact_factory_get_from_id (priv->factory, priv->id, megaphone_applet_got_contact_cb, NULL, NULL, G_OBJECT (applet)); }
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); }