aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/empathy-accounts-dialog.c5
-rw-r--r--src/empathy-call-window.c17
-rw-r--r--src/empathy-call-window.ui1
-rw-r--r--src/empathy-chat-window.c40
-rw-r--r--src/empathy-chatrooms-window.c4
-rw-r--r--src/empathy-event-manager.c152
-rw-r--r--src/empathy-main-window.c45
-rw-r--r--src/empathy-new-chatroom-dialog.c12
-rw-r--r--src/empathy.c9
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) {