diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-chat-window.c | 64 | ||||
-rw-r--r-- | src/empathy-invite-participant-dialog.c | 70 | ||||
-rw-r--r-- | src/empathy-invite-participant-dialog.h | 8 |
3 files changed, 70 insertions, 72 deletions
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 2dbe09d5d..240dc4b68 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -42,6 +42,7 @@ #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-chatroom-manager.h> #include <libempathy/empathy-utils.h> +#include <libempathy/empathy-tp-contact-factory.h> #include <libempathy-gtk/empathy-images.h> #include <libempathy-gtk/empathy-conf.h> @@ -821,8 +822,8 @@ chat_window_contacts_toggled_cb (GtkToggleAction *toggle_action, } static void -chat_window_upgrade_to_muc (EmpathyChat *chat, - EmpathyContact *invitee) +chat_window_upgrade_to_muc (EmpathyChat *chat, + const char *id) { EmpathyDispatcher *dispatcher = empathy_dispatcher_dup_singleton (); EmpathyTpChat *tp_chat; @@ -841,7 +842,7 @@ chat_window_upgrade_to_muc (EmpathyChat *chat, g_ptr_array_add (channels, (char *) tp_proxy_get_object_path (channel)); invitees[0] = (char *) tp_channel_get_identifier (channel); - invitees[1] = (char *) empathy_contact_get_id (invitee); + invitees[1] = (char *) id; props = tp_asv_new ( TP_IFACE_CHANNEL ".ChannelType", G_TYPE_STRING, @@ -866,6 +867,32 @@ chat_window_upgrade_to_muc (EmpathyChat *chat, } static void +got_contact_cb (EmpathyTpContactFactory *factory, + EmpathyContact *contact, + const GError *error, + gpointer user_data, + GObject *object) +{ + TpChannel *channel = TP_CHANNEL (user_data); + + if (error != NULL) + { + DEBUG ("Failed: %s", error->message); + return; + } + else + { + TpHandle handle = empathy_contact_get_handle (contact); + GArray handles = {(gchar *) &handle, 1}; + + tp_cli_channel_interface_group_call_add_members ( + channel, -1, &handles, + _("Inviting to this room"), + NULL, NULL, NULL, NULL); + } +} + +static void chat_window_invite_participant_activate_cb (GtkAction *action, EmpathyChatWindow *window) { @@ -890,33 +917,38 @@ chat_window_invite_participant_activate_cb (GtkAction *action, response = gtk_dialog_run (GTK_DIALOG (dialog)); - if (response == GTK_RESPONSE_OK) + if (response == GTK_RESPONSE_ACCEPT) { - EmpathyContact *contact; + const char *id; TpHandleType handle_type; - contact = empathy_invite_participant_dialog_dup_selected_contact (EMPATHY_INVITE_PARTICIPANT_DIALOG (dialog)); + id = empathy_contact_selector_dialog_get_selected ( + EMPATHY_CONTACT_SELECTOR_DIALOG (dialog), NULL); + if (EMP_STR_EMPTY (id)) goto out; + tp_channel_get_handle (channel, &handle_type); if (handle_type == TP_HANDLE_TYPE_CONTACT) { - chat_window_upgrade_to_muc (priv->current_chat, - contact); + chat_window_upgrade_to_muc (priv->current_chat, id); } else { - TpHandle handle = empathy_contact_get_handle (contact); - GArray handles = {(gchar *) &handle, 1}; + TpConnection *connection; + EmpathyTpContactFactory *factory; - tp_cli_channel_interface_group_call_add_members ( - channel, -1, &handles, - _("Inviting to this room"), - NULL, NULL, NULL, NULL); - } + connection = tp_channel_borrow_connection (channel); + factory = empathy_tp_contact_factory_dup_singleton (connection); + + empathy_tp_contact_factory_get_from_id (factory, id, + got_contact_cb, channel, NULL, NULL); - g_object_unref (contact); + + g_object_unref (factory); + } } +out: gtk_widget_destroy (dialog); } diff --git a/src/empathy-invite-participant-dialog.c b/src/empathy-invite-participant-dialog.c index 07c12c9b0..f67a7fede 100644 --- a/src/empathy-invite-participant-dialog.c +++ b/src/empathy-invite-participant-dialog.c @@ -11,30 +11,20 @@ #include <glib/gi18n.h> -#include <libempathy/empathy-contact-manager.h> - -#include <libempathy-gtk/empathy-contact-selector.h> - #include "empathy-invite-participant-dialog.h" #define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG, EmpathyInviteParticipantDialogPrivate)) -G_DEFINE_TYPE (EmpathyInviteParticipantDialog, empathy_invite_participant_dialog, GTK_TYPE_DIALOG); +G_DEFINE_TYPE (EmpathyInviteParticipantDialog, + empathy_invite_participant_dialog, EMPATHY_TYPE_CONTACT_SELECTOR_DIALOG); typedef struct _EmpathyInviteParticipantDialogPrivate EmpathyInviteParticipantDialogPrivate; struct _EmpathyInviteParticipantDialogPrivate { - GtkWidget *selector; + int dum; }; static void -invite_participant_enable_join (GtkComboBox *selector, - GtkWidget *button) -{ - gtk_widget_set_sensitive (button, TRUE); -} - -static void empathy_invite_participant_dialog_class_init (EmpathyInviteParticipantDialogClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); @@ -45,13 +35,12 @@ empathy_invite_participant_dialog_class_init (EmpathyInviteParticipantDialogClas static void empathy_invite_participant_dialog_init (EmpathyInviteParticipantDialog *self) { - EmpathyInviteParticipantDialogPrivate *priv = GET_PRIVATE (self); - EmpathyContactManager *manager = empathy_contact_manager_dup_singleton (); - GtkWidget *vbox = gtk_vbox_new (FALSE, 6); - GtkWidget *label = gtk_label_new (NULL); - GtkWidget *join_button; + EmpathyContactSelectorDialog *parent = EMPATHY_CONTACT_SELECTOR_DIALOG (self); + // EmpathyInviteParticipantDialogPrivate *priv = GET_PRIVATE (self); + GtkWidget *label; char *str; + label = gtk_label_new (NULL); str = g_strdup_printf ( "<span size=\"x-large\" weight=\"bold\">%s</span>\n\n%s", _("Invite Participant"), @@ -59,42 +48,19 @@ empathy_invite_participant_dialog_init (EmpathyInviteParticipantDialog *self) gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); - priv->selector = empathy_contact_selector_new ( - EMPATHY_CONTACT_LIST (manager)); - - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (vbox), priv->selector, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))), - vbox, TRUE, TRUE, 6); - - gtk_widget_show_all (vbox); - - gtk_dialog_add_button (GTK_DIALOG (self), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); - join_button = gtk_dialog_add_button (GTK_DIALOG (self), - "Invite", GTK_RESPONSE_OK); - - gtk_dialog_set_has_separator (GTK_DIALOG (self), FALSE); - - gtk_widget_set_sensitive (join_button, FALSE); - g_signal_connect (priv->selector, "changed", - G_CALLBACK (invite_participant_enable_join), join_button); - - g_object_unref (manager); -} - -EmpathyContact * -empathy_invite_participant_dialog_dup_selected_contact ( - EmpathyInviteParticipantDialog *self) -{ - EmpathyInviteParticipantDialogPrivate *priv; - - g_return_val_if_fail (EMPATHY_IS_INVITE_PARTICIPANT_DIALOG (self), NULL); + gtk_box_pack_start (GTK_BOX (parent->vbox), label, FALSE, TRUE, 0); + /* move to the top -- wish there was a better way to do this */ + gtk_box_reorder_child (GTK_BOX (parent->vbox), label, 0); + gtk_widget_show (label); - priv = GET_PRIVATE (self); + parent->button_action = gtk_dialog_add_button (GTK_DIALOG (self), + "Invite", GTK_RESPONSE_ACCEPT); + gtk_widget_set_sensitive (parent->button_action, FALSE); - return empathy_contact_selector_dup_selected ( - EMPATHY_CONTACT_SELECTOR (priv->selector)); + gtk_window_set_title (GTK_WINDOW (self), _("Invite Participant")); + gtk_window_set_role (GTK_WINDOW (self), "invite_participant"); + empathy_contact_selector_dialog_set_show_account_chooser ( + EMPATHY_CONTACT_SELECTOR_DIALOG (self), FALSE); } GtkWidget * diff --git a/src/empathy-invite-participant-dialog.h b/src/empathy-invite-participant-dialog.h index 642733871..561e10738 100644 --- a/src/empathy-invite-participant-dialog.h +++ b/src/empathy-invite-participant-dialog.h @@ -14,6 +14,8 @@ #include <gtk/gtk.h> +#include <libempathy-gtk/empathy-contact-selector-dialog.h> + G_BEGIN_DECLS #define EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG (empathy_invite_participant_dialog_get_type ()) @@ -28,18 +30,16 @@ typedef struct _EmpathyInviteParticipantDialogClass EmpathyInviteParticipantDial struct _EmpathyInviteParticipantDialog { - GtkDialog parent; + EmpathyContactSelectorDialog parent; }; struct _EmpathyInviteParticipantDialogClass { - GtkDialogClass parent_class; + EmpathyContactSelectorDialogClass parent_class; }; GType empathy_invite_participant_dialog_get_type (void); GtkWidget *empathy_invite_participant_dialog_new (GtkWindow *parent); -EmpathyContact *empathy_invite_participant_dialog_dup_selected_contact (EmpathyInviteParticipantDialog *self); - G_END_DECLS |