]> git.0d.be Git - empathy.git/commitdiff
Implement DTMF.
authorXavier Claessens <xclaesse@src.gnome.org>
Thu, 1 May 2008 22:02:45 +0000 (22:02 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Thu, 1 May 2008 22:02:45 +0000 (22:02 +0000)
svn path=/trunk/; revision=1071

libempathy/empathy-tp-call.c
libempathy/empathy-tp-call.h
src/empathy-call-window.c

index 4c3779f285e8bf66267485aa304eba604c8e2e99..32debb8b39ae87fc1b5be03baf905def96b495b4 100644 (file)
@@ -348,9 +348,7 @@ tp_call_async_cb (TpProxy *proxy,
                   GObject *call)
 {
   if (error)
-    {
       DEBUG ("Error %s: %s", (gchar*) user_data, error->message);
-    }
 }
 
 static void
@@ -813,3 +811,37 @@ empathy_tp_call_mute_input (EmpathyTpCall *call,
       G_OBJECT (call));
 }
 
+void
+empathy_tp_call_start_tone (EmpathyTpCall *call, TpDTMFEvent event)
+{
+  EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+  g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+  g_return_if_fail (priv->status != EMPATHY_TP_CALL_STATUS_ACCEPTED);
+
+  if (!priv->audio->exists)
+      return;
+
+  tp_cli_channel_interface_dtmf_call_start_tone (priv->channel, -1,
+      priv->audio->id, event,
+      (tp_cli_channel_interface_dtmf_callback_for_start_tone) tp_call_async_cb,
+      "starting tone", NULL, G_OBJECT (call));
+}
+
+void
+empathy_tp_call_stop_tone (EmpathyTpCall *call)
+{
+  EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+  g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+  g_return_if_fail (priv->status != EMPATHY_TP_CALL_STATUS_ACCEPTED);
+
+  if (!priv->audio->exists)
+      return;
+
+  tp_cli_channel_interface_dtmf_call_stop_tone (priv->channel, -1,
+      priv->audio->id,
+      (tp_cli_channel_interface_dtmf_callback_for_stop_tone) tp_call_async_cb,
+      "stoping tone", NULL, G_OBJECT (call));
+}
+
index 17c5abd255d9213fde568950b61dfd4aceccb5cf..18378baa32a12aa194821a3be6d8724319437817 100644 (file)
@@ -83,6 +83,8 @@ void empathy_tp_call_add_output_video (EmpathyTpCall *call,
 void empathy_tp_call_set_output_volume (EmpathyTpCall *call, guint volume);
 void empathy_tp_call_mute_output (EmpathyTpCall *call, gboolean is_muted);
 void empathy_tp_call_mute_input (EmpathyTpCall *call, gboolean is_muted);
+void empathy_tp_call_start_tone (EmpathyTpCall *call, TpDTMFEvent event);
+void empathy_tp_call_stop_tone (EmpathyTpCall *call);
 
 G_END_DECLS
 
index 7c1f7e66fd202f4f733316e4661db26edb303ff2..cddb1143384adbbaec75eafcf01ce5a546324525 100644 (file)
@@ -418,6 +418,44 @@ call_window_update (EmpathyCallWindow *window)
       g_object_unref (contact);
 }
 
+static gboolean
+call_window_dtmf_button_release_event_cb (GtkWidget *widget,
+                                          GdkEventButton *event,
+                                          EmpathyCallWindow *window)
+{
+  empathy_tp_call_stop_tone (window->call);
+  return FALSE;
+}
+
+static gboolean
+call_window_dtmf_button_press_event_cb (GtkWidget *widget,
+                                        GdkEventButton *event,
+                                        EmpathyCallWindow *window)
+{
+  TpDTMFEvent dtmf_event;
+
+  dtmf_event = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "code"));
+  empathy_tp_call_start_tone (window->call, dtmf_event);
+  return FALSE;
+}
+
+static void
+call_window_dtmf_connect (GladeXML *glade,
+                          EmpathyCallWindow *window,
+                          const gchar *name,
+                          TpDTMFEvent event)
+{
+  GtkWidget *widget;
+
+  widget = glade_xml_get_widget (glade, name);
+  g_object_set_data (G_OBJECT (widget), "code", GUINT_TO_POINTER (event));
+  g_signal_connect (widget, "button-press-event",
+      G_CALLBACK (call_window_dtmf_button_press_event_cb), window);
+  g_signal_connect (widget, "button-release-event",
+      G_CALLBACK (call_window_dtmf_button_release_event_cb), window);
+  /* FIXME: Connect "key-[press/release]-event" to*/
+}
+
 GtkWidget *
 empathy_call_window_new (EmpathyTpCall *call)
 {
@@ -453,6 +491,20 @@ empathy_call_window_new (EmpathyTpCall *call)
       "video_button", "toggled", call_window_video_button_toggled_cb,
       NULL);
 
+  /* Setup DTMF buttons */
+  call_window_dtmf_connect (glade, window, "button_0", TP_DTMF_EVENT_DIGIT_0);
+  call_window_dtmf_connect (glade, window, "button_1", TP_DTMF_EVENT_DIGIT_1);
+  call_window_dtmf_connect (glade, window, "button_2", TP_DTMF_EVENT_DIGIT_2);
+  call_window_dtmf_connect (glade, window, "button_3", TP_DTMF_EVENT_DIGIT_3);
+  call_window_dtmf_connect (glade, window, "button_4", TP_DTMF_EVENT_DIGIT_4);
+  call_window_dtmf_connect (glade, window, "button_5", TP_DTMF_EVENT_DIGIT_5);
+  call_window_dtmf_connect (glade, window, "button_6", TP_DTMF_EVENT_DIGIT_6);
+  call_window_dtmf_connect (glade, window, "button_7", TP_DTMF_EVENT_DIGIT_7);
+  call_window_dtmf_connect (glade, window, "button_8", TP_DTMF_EVENT_DIGIT_8);
+  call_window_dtmf_connect (glade, window, "button_9", TP_DTMF_EVENT_DIGIT_9);
+  call_window_dtmf_connect (glade, window, "button_asterisk", TP_DTMF_EVENT_ASTERISK);
+  call_window_dtmf_connect (glade, window, "button_hash", TP_DTMF_EVENT_HASH);
+
   g_object_unref (glade);
 
   /* Output volume button */