empathy r1071 - in trunk: libempathy src



Author: xclaesse
Date: Thu May  1 22:02:45 2008
New Revision: 1071
URL: http://svn.gnome.org/viewvc/empathy?rev=1071&view=rev

Log:
Implement DTMF.


Modified:
   trunk/libempathy/empathy-tp-call.c
   trunk/libempathy/empathy-tp-call.h
   trunk/src/empathy-call-window.c

Modified: trunk/libempathy/empathy-tp-call.c
==============================================================================
--- trunk/libempathy/empathy-tp-call.c	(original)
+++ trunk/libempathy/empathy-tp-call.c	Thu May  1 22:02:45 2008
@@ -348,9 +348,7 @@
                   GObject *call)
 {
   if (error)
-    {
       DEBUG ("Error %s: %s", (gchar*) user_data, error->message);
-    }
 }
 
 static void
@@ -813,3 +811,37 @@
       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));
+}
+

Modified: trunk/libempathy/empathy-tp-call.h
==============================================================================
--- trunk/libempathy/empathy-tp-call.h	(original)
+++ trunk/libempathy/empathy-tp-call.h	Thu May  1 22:02:45 2008
@@ -83,6 +83,8 @@
 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
 

Modified: trunk/src/empathy-call-window.c
==============================================================================
--- trunk/src/empathy-call-window.c	(original)
+++ trunk/src/empathy-call-window.c	Thu May  1 22:02:45 2008
@@ -418,6 +418,44 @@
       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 @@
       "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 */



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