aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2011-03-14 21:23:19 +0800
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2011-06-09 17:20:07 +0800
commit7253d660e407204ad205feb331fe152f8fff7843 (patch)
tree0933e21ef7af1f28db8e41401988fdbb7201e4fc
parent11c8e825a7e2a11ae46b567ca3ddf709c0a0e6c8 (diff)
downloadgsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar.gz
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar.bz2
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar.lz
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar.xz
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.tar.zst
gsoc2013-empathy-7253d660e407204ad205feb331fe152f8fff7843.zip
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
-rw-r--r--src/empathy-event-manager.c29
1 files changed, 27 insertions, 2 deletions
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
@@ -674,6 +674,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,
@@ -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 (