From 7253d660e407204ad205feb331fe152f8fff7843 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Mon, 14 Mar 2011 13:23:19 +0000 Subject: 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 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/empathy-event-manager.c') diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index 3c6fd7985..6d58a4ae9 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -673,6 +673,21 @@ cdo_invalidated_cb (TpProxy *cdo, event_manager_approval_done (approval); } +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, @@ -687,6 +702,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?"); @@ -694,11 +711,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 ( -- cgit v1.2.3