X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy-gtk%2Fempathy-new-message-dialog.c;h=b1a35095b75a7fbbf7a6458fd64633978f6574ca;hp=9127e2919556a87d75eeaea25cf6915fb54f8e73;hb=9b9fcd3ce3b9c7fdc62836821d83377bec58d0a5;hpb=025c9ec4d13772b1e233a472ea90cc9ed0b27611 diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index 9127e291..b1a35095 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-dialog.c @@ -25,13 +25,13 @@ #include #include -#include #include #include #include -#include +#include +#include #include #include #include @@ -65,48 +65,54 @@ new_message_dialog_account_changed_cb (GtkWidget *widget, EmpathyNewMessageDialog *dialog) { EmpathyAccountChooser *chooser; - McAccount *account; + TpConnection *connection; EmpathyTpContactList *contact_list; - GList *members, *l; + GList *members; GtkListStore *store; GtkEntryCompletion *completion; GtkTreeIter iter; gchar *tmpstr; - chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - account = empathy_account_chooser_get_account (chooser); - contact_list = empathy_contact_manager_get_list (dialog->contact_manager, - account); - members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (contact_list)); + /* Remove completions */ completion = gtk_entry_get_completion (GTK_ENTRY (dialog->entry_id)); store = GTK_LIST_STORE (gtk_entry_completion_get_model (completion)); gtk_list_store_clear (store); - for (l = members; l; l = l->next) { - EmpathyContact *contact = l->data; + /* Get members of the new account */ + chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); + connection = empathy_account_chooser_get_connection (chooser); + if (!connection) { + return; + } + contact_list = empathy_contact_manager_get_list (dialog->contact_manager, + connection); + members = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (contact_list)); - if (!empathy_contact_is_online (contact)) { - continue; - } + /* Add members to the completion */ + while (members) { + EmpathyContact *contact = members->data; - DEBUG ("Adding contact ID %s, Name %s", - empathy_contact_get_id (contact), - empathy_contact_get_name (contact)); + if (empathy_contact_is_online (contact)) { + DEBUG ("Adding contact ID %s, Name %s", + empathy_contact_get_id (contact), + empathy_contact_get_name (contact)); - tmpstr = g_strdup_printf ("%s (%s)", - empathy_contact_get_name (contact), - empathy_contact_get_id (contact)); + tmpstr = g_strdup_printf ("%s (%s)", + empathy_contact_get_name (contact), + empathy_contact_get_id (contact)); - gtk_list_store_insert_with_values (store, &iter, -1, - COMPLETION_COL_TEXT, tmpstr, - COMPLETION_COL_ID, empathy_contact_get_id (contact), - COMPLETION_COL_NAME, empathy_contact_get_name (contact), - -1); + gtk_list_store_insert_with_values (store, &iter, -1, + COMPLETION_COL_TEXT, tmpstr, + COMPLETION_COL_ID, empathy_contact_get_id (contact), + COMPLETION_COL_NAME, empathy_contact_get_name (contact), + -1); - g_free (tmpstr); - } + g_free (tmpstr); + } - g_object_unref (account); + g_object_unref (contact); + members = g_list_delete_link (members, members); + } } static gboolean @@ -165,39 +171,52 @@ new_message_dialog_match_func (GtkEntryCompletion *completion, return FALSE; } +static void +new_message_dialog_call_got_contact_cb (EmpathyTpContactFactory *factory, + EmpathyContact *contact, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + EmpathyCallFactory *call_factory; + + if (error != NULL) { + DEBUG ("Error: %s", error->message); + return; + } + + call_factory = empathy_call_factory_get(); + empathy_call_factory_new_call (call_factory, contact); +} + static void new_message_dialog_response_cb (GtkWidget *widget, gint response, EmpathyNewMessageDialog *dialog) { - McAccount *account; + TpConnection *connection; const gchar *id; - account = empathy_account_chooser_get_account (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); + connection = empathy_account_chooser_get_connection ( + EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); id = gtk_entry_get_text (GTK_ENTRY (dialog->entry_id)); - if (!account || EMP_STR_EMPTY (id)) { - if (account) { - g_object_unref (account); - } + if (!connection || EMP_STR_EMPTY (id)) { gtk_widget_destroy (widget); return; } if (response == 1) { - EmpathyContactFactory *factory; - EmpathyContact *contact; + EmpathyTpContactFactory *factory; - factory = empathy_contact_factory_dup_singleton (); - contact = empathy_contact_factory_get_from_id (factory, account, id); - empathy_start_call_with_contact (contact); - - g_object_unref (contact); + factory = empathy_tp_contact_factory_dup_singleton (connection); + empathy_tp_contact_factory_get_from_id (factory, id, + new_message_dialog_call_got_contact_cb, + NULL, NULL, NULL); g_object_unref (factory); } else if (response == 2) { - empathy_dispatcher_chat_with_contact_id (account, id, NULL, NULL); + empathy_dispatcher_chat_with_contact_id (connection, id, NULL, NULL); } - g_object_unref (account); gtk_widget_destroy (widget); } @@ -227,7 +246,7 @@ GtkWidget * empathy_new_message_dialog_show (GtkWindow *parent) { static EmpathyNewMessageDialog *dialog = NULL; - GladeXML *glade; + GtkBuilder *gui; gchar *filename; GtkEntryCompletion *completion; GtkListStore *model; @@ -242,11 +261,9 @@ empathy_new_message_dialog_show (GtkWindow *parent) /* create a contact manager */ dialog->contact_manager = empathy_contact_manager_dup_singleton (); - filename = empathy_file_lookup ("empathy-new-message-dialog.glade", + filename = empathy_file_lookup ("empathy-new-message-dialog.ui", "libempathy-gtk"); - glade = empathy_glade_get_file (filename, - "new_message_dialog", - NULL, + gui = empathy_builder_get_file (filename, "new_message_dialog", &dialog->dialog, "table_contact", &dialog->table_contact, "entry_id", &dialog->entry_id, @@ -270,7 +287,7 @@ empathy_new_message_dialog_show (GtkWindow *parent) g_object_unref(completion); g_object_unref(model); - empathy_glade_connect (glade, dialog, + empathy_builder_connect (gui, dialog, "new_message_dialog", "destroy", new_message_dialog_destroy_cb, "new_message_dialog", "response", new_message_dialog_response_cb, "entry_id", "changed", new_message_change_state_button_cb, @@ -278,7 +295,7 @@ empathy_new_message_dialog_show (GtkWindow *parent) g_object_add_weak_pointer (G_OBJECT (dialog->dialog), (gpointer) &dialog); - g_object_unref (glade); + g_object_unref (gui); /* Create account chooser */ dialog->account_chooser = empathy_account_chooser_new (); @@ -307,4 +324,3 @@ empathy_new_message_dialog_show (GtkWindow *parent) return dialog->dialog; } -