]> git.0d.be Git - empathy.git/commitdiff
call-window: allow user to enter dtmf events using his keyboard
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 6 Jul 2012 12:29:48 +0000 (14:29 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 9 Jul 2012 07:48:33 +0000 (09:48 +0200)
Ideally we should stop sending the DTMF event when the key is released but we
can't easily do that in Gtk+; we'll have to write our own widget.
I'm going to give it a shot but this is already a nice improvement so we
shouldn't block on it.

https://bugzilla.gnome.org/show_bug.cgi?id=679396

src/empathy-call-window.c

index 9cb96afc38f738e253bf460f6c6d47496d72f9d8..2b34f764030f93516560d4a9bc1ea8bd5ac5233e 100644 (file)
@@ -4047,6 +4047,7 @@ empathy_call_window_key_press_cb (GtkWidget *video_output,
   GdkEventKey *event, EmpathyCallWindow *window)
 {
   EmpathyCallWindowPriv *priv = GET_PRIV (window);
+  gchar key = 0;
 
   if (priv->is_fullscreen && event->keyval == GDK_KEY_Escape)
     {
@@ -4056,6 +4057,68 @@ empathy_call_window_key_press_cb (GtkWidget *video_output,
       return TRUE;
     }
 
+  switch (event->keyval)
+    {
+      case GDK_KEY_KP_0:
+      case GDK_KEY_0:
+        key = '0';
+        break;
+      case GDK_KEY_KP_1:
+      case GDK_KEY_1:
+        key = '1';
+        break;
+      case GDK_KEY_KP_2:
+      case GDK_KEY_2:
+        key = '2';
+        break;
+      case GDK_KEY_KP_3:
+      case GDK_KEY_3:
+        key = '3';
+        break;
+      case GDK_KEY_KP_4:
+      case GDK_KEY_4:
+        key = '4';
+        break;
+      case GDK_KEY_KP_5:
+      case GDK_KEY_5:
+        key = '5';
+        break;
+      case GDK_KEY_KP_6:
+      case GDK_KEY_6:
+        key = '6';
+        break;
+      case GDK_KEY_KP_7:
+      case GDK_KEY_7:
+        key = '7';
+        break;
+      case GDK_KEY_KP_8:
+      case GDK_KEY_8:
+        key = '8';
+        break;
+      case GDK_KEY_KP_9:
+      case GDK_KEY_9:
+        key = '9';
+        break;
+      case GDK_KEY_asterisk:
+      case GDK_KEY_KP_Multiply:
+        key = '*';
+        break;
+      case GDK_KEY_numbersign:
+      case GDK_KEY_KP_Add:
+        key = '#';
+        break;
+    }
+
+  if (key != 0)
+    {
+      gtk_toggle_tool_button_set_active (
+          GTK_TOGGLE_TOOL_BUTTON (priv->dialpad_button), TRUE);
+
+      empathy_dialpad_widget_press_key (
+          EMPATHY_DIALPAD_WIDGET (priv->dtmf_panel), key);
+      return TRUE;
+    }
+
   return FALSE;
 }