[empathy: 61/99] Don't start the Call when the streams start



commit 7992d97253ff1cecb4281191d0af459799ce9a21
Author: Emilio Pozuelo Monfort <emilio pozuelo collabora co uk>
Date:   Tue Mar 15 19:06:20 2011 +0000

    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

 src/empathy-call-handler.c |    9 +++++++++
 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 7524057..e35afbd 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 aa8bd5d..fac874c 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",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]