[empathy/gnome-2-34] Reject approval if call was hung up during approval
- From: Sjoerd Simons <sjoerds src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy/gnome-2-34] Reject approval if call was hung up during approval
- Date: Mon, 14 Mar 2011 13:30:42 +0000 (UTC)
commit 07ecd3f4d9cc71d4192599a89a9c8f45f7958c3e
Author: Sjoerd Simons <sjoerd simons collabora co uk>
Date: Mon Mar 14 13:23:19 2011 +0000
Reject approval if call was hung up during approval
If an incoming call gets ENDED during our approval stage either we or
someone else closed it. In that case reject the approval (which will
claim and close the channel). A future improvement could be to show a
notification in case this happens
src/empathy-event-manager.c | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
---
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
index 5b44345..61ebcf5 100644
--- a/src/empathy-event-manager.c
+++ b/src/empathy-event-manager.c
@@ -662,6 +662,21 @@ cdo_invalidated_cb (TpProxy *cdo,
}
static void
+event_manager_call_state_changed_cb (TpyCallChannel *call,
+ TpyCallState state,
+ TpyCallFlags flags,
+ const GValueArray *call_state_reason,
+ GHashTable *call_state_details,
+ EventManagerApproval *approval)
+{
+ if (state == TPY_CALL_STATE_ENDED)
+ {
+ DEBUG ("Call ended, seems we missed it :/");
+ reject_approval (approval);
+ }
+}
+
+static void
event_manager_call_channel_got_contact_cb (TpConnection *connection,
EmpathyContact *contact,
const GError *error,
@@ -675,6 +690,8 @@ event_manager_call_channel_got_contact_cb (TpConnection *connection,
gchar *header;
gboolean video;
+ call = TPY_CALL_CHANNEL (approval->handler_instance);
+
if (error != NULL)
{
DEBUG ("Can't get the contact for the call.. Rejecting?");
@@ -682,11 +699,19 @@ event_manager_call_channel_got_contact_cb (TpConnection *connection,
return;
}
+ if (tpy_call_channel_get_state (call, NULL, NULL) == TPY_CALL_STATE_ENDED)
+ {
+ DEBUG ("Call already ended, seems we missed it :/");
+ reject_approval (approval);
+ return;
+ }
+
+ approval->handler = g_signal_connect (call, "state-changed",
+ G_CALLBACK (event_manager_call_state_changed_cb), approval);
+
window = empathy_main_window_dup ();
approval->contact = g_object_ref (contact);
- call = TPY_CALL_CHANNEL (approval->handler_instance);
-
g_object_get (G_OBJECT (call), "initial-video", &video, NULL);
header = g_strdup_printf (
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]