diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-04-24 23:28:22 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-04-24 23:28:22 +0800 |
commit | f02d96379cb7043611d093921755d699e48689bb (patch) | |
tree | 4a7cb101ebe4295306f17f12f805e4672c30bff6 /src | |
parent | c8d23985b7754541cab512992294c19f5c87cfaa (diff) | |
parent | d696d6cc31f672884382d5b8949be504cdc718a5 (diff) | |
download | gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar.gz gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar.bz2 gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar.lz gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar.xz gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.tar.zst gsoc2013-empathy-f02d96379cb7043611d093921755d699e48689bb.zip |
Merge branch 'master' into tp-tube
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-accounts-dialog.c | 5 | ||||
-rw-r--r-- | src/empathy-call-window.c | 17 | ||||
-rw-r--r-- | src/empathy-call-window.ui | 1 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 40 | ||||
-rw-r--r-- | src/empathy-chatrooms-window.c | 4 | ||||
-rw-r--r-- | src/empathy-event-manager.c | 152 | ||||
-rw-r--r-- | src/empathy-main-window.c | 45 | ||||
-rw-r--r-- | src/empathy-new-chatroom-dialog.c | 12 | ||||
-rw-r--r-- | src/empathy.c | 9 |
9 files changed, 125 insertions, 160 deletions
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 036c7f86b..e15c0eab1 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -819,13 +819,14 @@ accounts_dialog_button_create_clicked_cb (GtkWidget *button, gchar *str; McProfileCapabilityFlags cap; - profile = empathy_profile_chooser_get_selected (dialog->combobox_profile); + profile = empathy_profile_chooser_dup_selected (dialog->combobox_profile); /* Create account */ account = mc_account_create (profile); if (account == NULL) { /* We can't display an error to the user as MC doesn't give us * any clue about the reason of the failure... */ + g_object_unref (profile); return; } @@ -869,7 +870,7 @@ accounts_dialog_profile_changed_cb (GtkWidget *widget, McProfile *profile; McProfileCapabilityFlags cap; - profile = empathy_profile_chooser_get_selected (dialog->combobox_profile); + profile = empathy_profile_chooser_dup_selected (dialog->combobox_profile); cap = mc_profile_get_capabilities (profile); if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index d7d79df90..49ad14142 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -107,6 +107,7 @@ struct _EmpathyCallWindowPriv GMutex *lock; gboolean call_started; + gboolean sending_video; }; #define GET_PRIV(o) \ @@ -757,6 +758,7 @@ empathy_call_window_disconnected (EmpathyCallWindow *self) gtk_widget_set_sensitive (priv->camera_button, FALSE); gtk_action_set_sensitive (priv->send_video, FALSE); + priv->sending_video = FALSE; } @@ -1157,20 +1159,35 @@ static void empathy_call_window_camera_toggled_cb (GtkToggleToolButton *toggle, EmpathyCallWindow *window) { + EmpathyCallWindowPriv *priv = GET_PRIV (window); gboolean active; active = (gtk_toggle_tool_button_get_active (toggle)); + + if (priv->sending_video == active) + return; + priv->sending_video = active; + empathy_call_window_set_send_video (window, active); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->send_video), active); } static void empathy_call_window_send_video_toggled_cb (GtkToggleAction *toggle, EmpathyCallWindow *window) { + EmpathyCallWindowPriv *priv = GET_PRIV (window); gboolean active; active = (gtk_toggle_action_get_active (toggle)); + + if (priv->sending_video == active) + return; + priv->sending_video = active; + empathy_call_window_set_send_video (window, active); + gtk_toggle_tool_button_set_active ( + GTK_TOGGLE_TOOL_BUTTON (priv->camera_button), active); } static void diff --git a/src/empathy-call-window.ui b/src/empathy-call-window.ui index 00b8ffa88..ce3d85b56 100644 --- a/src/empathy-call-window.ui +++ b/src/empathy-call-window.ui @@ -14,6 +14,7 @@ <object class="GtkToggleAction" id="send_video"> <property name="name">send_video</property> <property name="label" translatable="yes">Send video</property> + <property name="sensitive">False</property> </object> </child> <child> diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 145d45e7f..0738f6e52 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -37,11 +37,11 @@ #include <telepathy-glib/util.h> #include <libmissioncontrol/mission-control.h> -#include <libempathy/empathy-contact-factory.h> #include <libempathy/empathy-contact.h> #include <libempathy/empathy-message.h> #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-chatroom-manager.h> +#include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-utils.h> #include <libempathy-gtk/empathy-images.h> @@ -953,7 +953,7 @@ chat_window_new_message_cb (EmpathyChat *chat, if (has_focus && priv->current_chat == chat) { return; } - + /* If empathy_chat_is_room() returns TRUE, that means it's a named MUC. * If empathy_chat_get_remote_contact() returns NULL, that means it's * an unamed MUC (msn-like). @@ -1161,17 +1161,33 @@ chat_window_drag_data_received (GtkWidget *widget, McAccount *account; const gchar *id; gchar **strv; + const gchar *account_id; + const gchar *contact_id; id = (const gchar*) selection->data; DEBUG ("DND contact from roster with id:'%s'", id); strv = g_strsplit (id, "/", 2); - account = mc_account_lookup (strv[0]); - chat = empathy_chat_window_find_chat (account, strv[1]); + account_id = strv[0]; + contact_id = strv[1]; + account = mc_account_lookup (account_id); + chat = empathy_chat_window_find_chat (account, contact_id); if (!chat) { - empathy_dispatcher_chat_with_contact_id (account, strv[2], NULL, NULL); + EmpathyAccountManager *account_manager; + TpConnection *connection; + + account_manager = empathy_account_manager_dup_singleton (); + connection = empathy_account_manager_get_connection ( + account_manager, account); + + if (connection) { + empathy_dispatcher_chat_with_contact_id ( + connection, contact_id, NULL, NULL); + } + + g_object_unref (account_manager); g_object_unref (account); g_strfreev (strv); return; @@ -1700,17 +1716,3 @@ empathy_chat_window_present_chat (EmpathyChat *chat) gtk_widget_grab_focus (chat->input_text_view); } -#if 0 -static gboolean -chat_window_should_play_sound (EmpathyChatWindow *window) -{ - EmpathyChatWindowPriv *priv = GET_PRIV (window); - gboolean has_focus = FALSE; - - g_return_val_if_fail (EMPATHY_IS_CHAT_WINDOW (window), FALSE); - - g_object_get (priv->dialog, "has-toplevel-focus", &has_focus, NULL); - - return !has_focus; -} -#endif diff --git a/src/empathy-chatrooms-window.c b/src/empathy-chatrooms-window.c index acd559e5f..fa63d5a51 100644 --- a/src/empathy-chatrooms-window.c +++ b/src/empathy-chatrooms-window.c @@ -318,7 +318,7 @@ chatrooms_window_model_refresh_data (EmpathyChatroomsWindow *window, /* Look up chatrooms */ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + account = empathy_account_chooser_dup_account (account_chooser); chatrooms = empathy_chatroom_manager_get_chatrooms (window->manager, account); @@ -509,7 +509,7 @@ chatrooms_window_chatroom_added_cb (EmpathyChatroomManager *manager, McAccount *account; account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + account = empathy_account_chooser_dup_account (account_chooser); if (!account) { chatrooms_window_model_add (window, chatroom, FALSE); diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index adb5e73f9..0b4fa775a 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -27,10 +27,11 @@ #include <telepathy-glib/util.h> #include <libempathy/empathy-dispatcher.h> -#include <libempathy/empathy-contact-factory.h> +#include <libempathy/empathy-tp-contact-factory.h> #include <libempathy/empathy-contact-manager.h> #include <libempathy/empathy-tp-chat.h> #include <libempathy/empathy-tp-call.h> +#include <libempathy/empathy-tp-file.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-call-factory.h> @@ -372,8 +373,7 @@ event_channel_process_voip_func (EventPriv *event) return; } - dialog = gtk_message_dialog_new (GTK_WINDOW (empathy_main_window_get()), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Incoming call")); gtk_message_dialog_format_secondary_text ( GTK_MESSAGE_DIALOG (dialog), @@ -500,21 +500,12 @@ event_manager_operation_invalidated_cb (EmpathyDispatchOperation *operation, } static void -event_manager_media_channel_got_name_cb (EmpathyContact *contact, - const GError *error, gpointer user_data, GObject *object) +event_manager_media_channel_got_contact (EventManagerApproval *approval) { - EventManagerApproval *approval = user_data; gchar *header; - if (error != NULL) - { - /* FIXME just returning assuming the operation will be invalidated as - * well */ - return; - } - header = g_strdup_printf (_("Incoming call from %s"), - empathy_contact_get_name (contact)); + empathy_contact_get_name (approval->contact)); event_manager_add (approval->manager, approval->contact, EMPATHY_IMAGE_VOIP, header, NULL, @@ -525,14 +516,6 @@ event_manager_media_channel_got_name_cb (EmpathyContact *contact, } static void -event_manager_media_channel_got_contact (EventManagerApproval *approval) -{ - empathy_contact_call_when_ready (approval->contact, - EMPATHY_CONTACT_READY_NAME, event_manager_media_channel_got_name_cb, - approval, NULL, G_OBJECT (approval->manager)); -} - -static void event_manager_media_channel_contact_changed_cb (EmpathyTpCall *call, GParamSpec *param, EventManagerApproval *approval) { @@ -604,23 +587,27 @@ event_manager_tube_dispatch_ability_cb (GObject *object, } static void -event_manager_tube_got_contact_name_cb (EmpathyContact *contact, - const GError *error, gpointer user_data, GObject *object) +event_manager_tube_got_contact_cb (EmpathyTpContactFactory *factory, + EmpathyContact *contact, + const GError *error, + gpointer user_data, + GObject *object) { EventManagerApproval *approval = (EventManagerApproval *)user_data; EmpathyTubeDispatchAbility dispatchability; if (error != NULL) { - /* FIXME?, we assume that the operation gets invalidated as well (if it - * didn't already */ - return; + /* FIXME: We should probably still display the event */ + DEBUG ("Error: %s", error->message); + return; } + approval->contact = g_object_ref (contact); + dispatchability = empathy_tube_dispatch_is_dispatchable (approval->tube_dispatch); - switch (dispatchability) { case EMPATHY_TUBE_DISPATCHABILITY_UNKNOWN: @@ -724,10 +711,11 @@ event_room_channel_process_func (EventPriv *event) } static void -event_manager_muc_invite_got_contact_name_cb (EmpathyContact *contact, - const GError *error, - gpointer user_data, - GObject *object) +event_manager_muc_invite_got_contact_cb (EmpathyTpContactFactory *factory, + EmpathyContact *contact, + const GError *error, + gpointer user_data, + GObject *object) { EventManagerApproval *approval = (EventManagerApproval *) user_data; TpChannel *channel; @@ -735,6 +723,14 @@ event_manager_muc_invite_got_contact_name_cb (EmpathyContact *contact, gchar *msg; TpHandle self_handle; + if (error != NULL) + { + /* FIXME: We should probably still display the event */ + DEBUG ("Error: %s", error->message); + return; + } + + approval->contact = g_object_ref (contact); channel = empathy_dispatch_operation_get_channel (approval->operation); self_handle = tp_channel_group_get_self_handle (channel); @@ -795,24 +791,20 @@ event_manager_approve_channel_cb (EmpathyDispatcher *dispatcher, channel, self_handle, &inviter, NULL, NULL)) { /* We are invited to a room */ - EmpathyContactFactory *contact_factory; - McAccount *account; + EmpathyTpContactFactory *factory; + TpConnection *connection; DEBUG ("Have been invited to %s. Ask user if he wants to accept", tp_channel_get_identifier (channel)); - account = empathy_tp_chat_get_account (tp_chat); - contact_factory = empathy_contact_factory_dup_singleton (); - - approval->contact = empathy_contact_factory_get_from_handle ( - contact_factory, account, inviter); + connection = empathy_tp_chat_get_connection (tp_chat); + factory = empathy_tp_contact_factory_dup_singleton (connection); - empathy_contact_call_when_ready (approval->contact, - EMPATHY_CONTACT_READY_NAME, - event_manager_muc_invite_got_contact_name_cb, approval, NULL, - G_OBJECT (manager)); + empathy_tp_contact_factory_get_from_handle (factory, + inviter, event_manager_muc_invite_got_contact_cb, + approval, NULL, G_OBJECT (manager)); - g_object_unref (contact_factory); + g_object_unref (factory); return; } @@ -847,73 +839,45 @@ event_manager_approve_channel_cb (EmpathyDispatcher *dispatcher, } else if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER)) { - EmpathyContact *contact; - gchar *header; - TpHandle handle; - McAccount *account; - EmpathyContactFactory *factory; - TpChannel *channel = empathy_dispatch_operation_get_channel (operation); + EmpathyTpFile *file; + gchar *header; - factory = empathy_contact_factory_dup_singleton (); - handle = tp_channel_get_handle (channel, NULL); - account = empathy_channel_get_account (channel); - - contact = empathy_contact_factory_get_from_handle (factory, account, - handle); - - empathy_contact_run_until_ready (contact, - EMPATHY_CONTACT_READY_NAME, NULL); + file = EMPATHY_TP_FILE (empathy_dispatch_operation_get_channel_wrapper (operation)); + approval->contact = g_object_ref (empathy_tp_file_get_contact (file)); header = g_strdup_printf (_("Incoming file transfer from %s"), - empathy_contact_get_name (contact)); + empathy_contact_get_name (approval->contact)); - event_manager_add (manager, contact, EMPATHY_IMAGE_DOCUMENT_SEND, + event_manager_add (manager, approval->contact, EMPATHY_IMAGE_DOCUMENT_SEND, header, NULL, approval, event_channel_process_func, NULL); /* FIXME better sound for incoming file transfers ?*/ empathy_sound_play (empathy_main_window_get (), EMPATHY_SOUND_CONVERSATION_NEW); - g_object_unref (factory); - g_object_unref (account); g_free (header); } else if (!tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_STREAM_TUBE) || !tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_DBUS_TUBE)) { - EmpathyContact *contact; - TpHandle handle; - TpHandleType handle_type; - McAccount *account; - EmpathyContactFactory *factory; - EmpathyTubeDispatch *tube_dispatch; TpChannel *channel; + TpHandle handle; + TpHandleType handle_type; + TpConnection *connection; + EmpathyTpContactFactory *factory; channel = empathy_dispatch_operation_get_channel (operation); - handle = tp_channel_get_handle (channel, &handle_type); /* Only understand p2p tubes */ if (handle_type != TP_HANDLE_TYPE_CONTACT) return; - factory = empathy_contact_factory_dup_singleton (); - account = empathy_channel_get_account (channel); - - contact = empathy_contact_factory_get_from_handle (factory, account, - handle); - - tube_dispatch = empathy_tube_dispatch_new (operation); - - approval->contact = contact; - approval->tube_dispatch = tube_dispatch; - - empathy_contact_call_when_ready (contact, - EMPATHY_CONTACT_READY_NAME, event_manager_tube_got_contact_name_cb, - approval, NULL, G_OBJECT (manager)); - - g_object_unref (factory); - g_object_unref (account); + approval->tube_dispatch = empathy_tube_dispatch_new (operation); + connection = tp_channel_borrow_connection (channel); + factory = empathy_tp_contact_factory_dup_singleton (connection); + empathy_tp_contact_factory_get_from_handle (factory, handle, + event_manager_tube_got_contact_cb, approval, NULL, G_OBJECT (manager)); } else { @@ -945,19 +909,17 @@ event_manager_pendings_changed_cb (EmpathyContactList *list, { EventPriv *event = l->data; - if (event->public.contact == contact && - event->func == event_pending_subscribe_func) - { - event_remove (event); - break; + if (event->public.contact == contact && + event->func == event_pending_subscribe_func) + { + event_remove (event); + break; + } } - } return; } - empathy_contact_run_until_ready (contact, EMPATHY_CONTACT_READY_NAME, NULL); - header = g_strdup_printf (_("Subscription requested by %s"), empathy_contact_get_name (contact)); diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index 6c5f1fa2c..b9993a8f5 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -35,7 +35,6 @@ #include <libempathy/empathy-chatroom.h> #include <libempathy/empathy-contact-list.h> #include <libempathy/empathy-contact-manager.h> -#include <libempathy/empathy-contact-factory.h> #include <libempathy/empathy-status-presets.h> #include <libempathy-gtk/empathy-contact-dialogs.h> @@ -703,23 +702,21 @@ main_window_chat_show_offline_cb (GtkToggleAction *action, static void main_window_favorite_chatroom_join (EmpathyChatroom *chatroom) { - MissionControl *mc; + EmpathyAccountManager *manager; McAccount *account; + TpConnection *connection; const gchar *room; - mc = empathy_mission_control_dup_singleton (); + manager = empathy_account_manager_dup_singleton (); account = empathy_chatroom_get_account (chatroom); + connection = empathy_account_manager_get_connection (manager, account); room = empathy_chatroom_get_room (chatroom); + g_object_unref (manager); - if (mission_control_get_connection_status (mc, account, NULL) != - TP_CONNECTION_STATUS_CONNECTED) { - return; + if (connection != NULL) { + DEBUG ("Requesting channel for '%s'", room); + empathy_dispatcher_join_muc (connection, room, NULL, NULL); } - - DEBUG ("Requesting channel for '%s'", room); - empathy_dispatcher_join_muc (account, room, NULL, NULL); - - g_object_unref (mc); } static void @@ -906,31 +903,7 @@ static void main_window_edit_personal_information_cb (GtkAction *action, EmpathyMainWindow *window) { - GSList *accounts; - - accounts = mission_control_get_online_connections (window->mc, NULL); - if (accounts) { - EmpathyContactFactory *factory; - EmpathyContact *contact; - McAccount *account; - - account = accounts->data; - factory = empathy_contact_factory_dup_singleton (); - contact = empathy_contact_factory_get_user (factory, account); - empathy_contact_run_until_ready (contact, - EMPATHY_CONTACT_READY_HANDLE | - EMPATHY_CONTACT_READY_ID, - NULL); - - empathy_contact_information_dialog_show (contact, - GTK_WINDOW (window->window), - TRUE, TRUE); - - g_slist_foreach (accounts, (GFunc) g_object_unref, NULL); - g_slist_free (accounts); - g_object_unref (factory); - g_object_unref (contact); - } + empathy_contact_personal_dialog_show (GTK_WINDOW (window->window)); } static void diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index bf107d1b6..837d9acfe 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -342,7 +342,7 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) const gchar *room; account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + account = empathy_account_chooser_dup_account (account_chooser); profile = mc_account_get_profile (account); protocol = mc_profile_get_protocol_name (profile); @@ -388,7 +388,7 @@ new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, new_chatroom_dialog_model_clear (dialog); account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + account = empathy_account_chooser_dup_account (account_chooser); dialog->room_list = empathy_tp_roomlist_new (account); if (dialog->room_list) { @@ -409,6 +409,8 @@ new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, } new_chatroom_dialog_update_widgets (dialog); + + g_object_unref (account); } static void @@ -533,7 +535,7 @@ static void new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog) { EmpathyAccountChooser *account_chooser; - McAccount *account; + TpConnection *connection; const gchar *room; const gchar *server = NULL; gchar *room_name = NULL; @@ -542,7 +544,7 @@ new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog) server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server)); account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + connection = empathy_account_chooser_get_connection (account_chooser); if (!EMP_STR_EMPTY (server)) { room_name = g_strconcat (room, "@", server, NULL); @@ -551,7 +553,7 @@ new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog) } DEBUG ("Requesting channel for '%s'", room_name); - empathy_dispatcher_join_muc (account, room_name, NULL, NULL); + empathy_dispatcher_join_muc (connection, room_name, NULL, NULL); g_free (room_name); } diff --git a/src/empathy.c b/src/empathy.c index a2115a6cf..817b9bc37 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -42,6 +42,7 @@ #include <libempathy/empathy-utils.h> #include <libempathy/empathy-call-factory.h> #include <libempathy/empathy-chatroom-manager.h> +#include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-dispatch-operation.h> #include <libempathy/empathy-log-manager.h> @@ -96,10 +97,16 @@ dispatch_cb (EmpathyDispatcher *dispatcher, } if (id) { + EmpathyAccountManager *manager; + TpConnection *connection; McAccount *account; - account = empathy_tp_chat_get_account (tp_chat); + manager = empathy_account_manager_dup_singleton (); + connection = empathy_tp_chat_get_connection (tp_chat); + account = empathy_account_manager_get_account (manager, + connection); chat = empathy_chat_window_find_chat (account, id); + g_object_unref (manager); } if (chat) { |