diff options
author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-03-16 03:06:20 +0800 |
---|---|---|
committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-06-09 17:20:07 +0800 |
commit | 7992d97253ff1cecb4281191d0af459799ce9a21 (patch) | |
tree | 49d0f3cf58d13e91d7ae335025f6d182a5d17910 /src | |
parent | 6786331e5d8411c48e0b2700cb20c434add2845d (diff) | |
download | gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar.gz gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar.bz2 gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar.lz gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar.xz gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.tar.zst gsoc2013-empathy-7992d97253ff1cecb4281191d0af459799ce9a21.zip |
Don't start the Call when the streams start
Since that can happen before the call is accepted. Instead of that,
wait for the Call state to be ACCEPTED.
Conflicts:
src/empathy-call-window.c
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-call-handler.c | 9 | ||||
-rw-r--r-- | src/empathy-call-window.c | 28 |
2 files changed, 24 insertions, 13 deletions
diff --git a/src/empathy-call-handler.c b/src/empathy-call-handler.c index 752405727..e35afbde7 100644 --- a/src/empathy-call-handler.c +++ b/src/empathy-call-handler.c @@ -51,6 +51,7 @@ enum { SINK_PAD_REMOVED, CLOSED, CANDIDATES_CHANGED, + STATE_CHANGED, LAST_SIGNAL }; @@ -176,6 +177,8 @@ on_call_state_changed_cb (TpyCallChannel *call, { if (state == TPY_CALL_STATE_ENDED) tp_channel_close_async (TP_CHANNEL (call), NULL, NULL); + + g_signal_emit (handler, signals[STATE_CHANGED], 0, state); } static void @@ -469,6 +472,12 @@ empathy_call_handler_class_init (EmpathyCallHandlerClass *klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); + + signals[STATE_CHANGED] = + g_signal_new ("state-changed", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, 1, G_TYPE_UINT); } EmpathyCallHandler * diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index aa8bd5dcd..fac874c91 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -2302,16 +2302,25 @@ empathy_call_window_video_stream_error (TpyCallChannel *call, } #endif -static gboolean -empathy_call_window_connected (gpointer user_data) +static void +empathy_call_window_state_changed_cb (EmpathyCallHandler *handler, + TpyCallState state, + EmpathyCallWindow *self) { - EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data); EmpathyCallWindowPriv *priv = GET_PRIV (self); TpyCallChannel *call; gboolean can_send_video; - empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING); + if (state != TPY_CALL_STATE_ACCEPTED) + return; + + if (priv->call_state == CONNECTED) + return; + g_timer_start (priv->timer); + priv->call_state = CONNECTED; + + empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING); can_send_video = priv->video_input != NULL && empathy_contact_can_voip_video (priv->contact); @@ -2353,8 +2362,6 @@ empathy_call_window_connected (gpointer user_data) empathy_call_window_update_timer (self); gtk_action_set_sensitive (priv->menu_fullscreen, TRUE); - - return FALSE; } static gboolean @@ -2381,13 +2388,6 @@ empathy_call_window_src_added_cb (EmpathyCallHandler *handler, g_mutex_lock (priv->lock); - if (priv->call_state != CONNECTED) - { - g_timer_start (priv->timer); - priv->timer_id = g_idle_add (empathy_call_window_connected, self); - priv->call_state = CONNECTED; - } - switch (media_type) { case TP_MEDIA_STREAM_TYPE_AUDIO: @@ -2676,6 +2676,8 @@ empathy_call_window_realized_cb (GtkWidget *widget, EmpathyCallWindow *window) EmpathyCallWindowPriv *priv = GET_PRIV (window); TpyCallChannel *call; + g_signal_connect (priv->handler, "state-changed", + G_CALLBACK (empathy_call_window_state_changed_cb), window); g_signal_connect (priv->handler, "conference-added", G_CALLBACK (empathy_call_window_conference_added_cb), window); g_signal_connect (priv->handler, "conference-removed", |