r3150 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src

thomas at sita.openmoko.org thomas at sita.openmoko.org
Fri Oct 12 13:12:58 CEST 2007


Author: thomas
Date: 2007-10-12 13:12:56 +0200 (Fri, 12 Oct 2007)
New Revision: 3150

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer-panel.c
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-keypad.c
Log:
* src/moko-dialer-panel.c: (moko_dialer_panel_init):
* src/moko-keypad.c: (on_panel_user_hold):

- Insert digits on "button down"
- Replace primary digit with secondary digit when tap-and-hold occurs


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-10-12 09:37:38 UTC (rev 3149)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-10-12 11:12:56 UTC (rev 3150)
@@ -1,3 +1,12 @@
+2007-10-12  Thomas Wood  <thomas at openedhand.com>
+
+	* src/moko-dialer-panel.c: (moko_dialer_panel_init):
+	* src/moko-keypad.c: (on_panel_user_hold):
+
+	- Insert digits on "button down"
+	- Replace primary digit with secondary digit when tap-and-hold occurs
+
+
 2007-10-10  Thomas Wood  <thomas at openedhand.com>
 
 	Based on patch by: Roman Moravcik <roman.moravcik at gmail.com>

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer-panel.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer-panel.c	2007-10-12 09:37:38 UTC (rev 3149)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-dialer-panel.c	2007-10-12 11:12:56 UTC (rev 3150)
@@ -34,6 +34,13 @@
 
      static gint moko_dialer_panel_signals[LAST_SIGNAL] = { 0 };
 
+
+typedef struct
+{
+  gchar value;
+  MokoDialerPanel *panel;
+} HoldTimeoutData;
+
 static void
 moko_dialer_panel_class_init (MokoDialerPanelClass * class)
 {
@@ -140,97 +147,53 @@
 }
 
 static gboolean
-moko_dialer_panel_pressed (MokoDigitButton *button, 
-                           GdkEventButton *event,
-                           MokoDialerPanel *panel)
+moko_dialer_panel_hold_timeout (HoldTimeoutData *data)
 {
-#define TAP_HOLD_TIME 800
-  static guint32 last_event = 0;
-  gchar value = -1;
+  g_signal_emit (data->panel, moko_dialer_panel_signals[HOLD_SIGNAL], 0, data->value);
 
-  if (event->type == GDK_BUTTON_PRESS)
-  {
-    last_event = event->time;
-  }
-  else if (event->type == GDK_BUTTON_RELEASE)
-  {
-    guint32 diff = event->time - last_event;
-
-    if (diff < TAP_HOLD_TIME)
-    {
-      /* Normal 'clicked' event */
-      value = moko_digit_button_get_left (button);
-      g_signal_emit (panel,
-                     moko_dialer_panel_signals[CLICKED_SIGNAL], 0, value);
-    }
-    else
-    {
-      /* Tap-and-hold event */
-      value = moko_digit_button_get_right (button);
-      
-      if (value == -1)
-        value = moko_digit_button_get_left (button);
-      
-      g_signal_emit (panel,
-                     moko_dialer_panel_signals[CLICKED_SIGNAL], 0, value);
-    }
-  }
+  g_free (data);
   return FALSE;
 }
 
-/* 
- * Leave this for when tap-and-hold is implemented at the Gtk-level 
- */
-#if 0
 static gboolean
-moko_dialer_panel_pressed (MokoDigitButton * button, GdkEventButton * event,
-                           gpointer data)
+moko_dialer_panel_pressed (MokoDigitButton *button, 
+                           GdkEventButton *event,
+                           MokoDialerPanel *panel)
 {
+  static gint hold_timeout_source = 0;
 
-  MokoDialerPanel *moko_dialer_panel;
+  if (event->type == GDK_BUTTON_PRESS)
+  {
+    HoldTimeoutData *timeout_data;
+    gchar value = -1;
 
-//here! check it tomorrow!
-  moko_dialer_panel = (MokoDialerPanel *) data;
+    /* Normal 'clicked' event */
+    value = moko_digit_button_get_left (button);
+    g_signal_emit (panel, moko_dialer_panel_signals[CLICKED_SIGNAL], 0, value);
 
-  gchar value = -1;
-
-  if (event->button == 3)
-  {                             //right button
+    /* Set up for a tap-and-hold event */
     value = moko_digit_button_get_right (button);
+
+    /* this button doesn't have a "hold" value */
     if (value == -1)
-    {                           //button 1-9 pressed with hold , we emit another signal: HOLD_SIGNAL, with the para of the number
-      value = moko_digit_button_get_left (button);
-      if (value != -1)
-      {
-        g_signal_emit (moko_dialer_panel,
-                       moko_dialer_panel_signals[HOLD_SIGNAL], 0, value);
-      }
-    }
-    else
-    {                           //*, 0, # buttons are right clicked or pressed with hold
-      if (value != -1)
-        g_signal_emit (moko_dialer_panel,
-                       moko_dialer_panel_signals[CLICKED_SIGNAL], 0, value);
+      return FALSE;
 
-    }
+    timeout_data = g_new0 (HoldTimeoutData, 1);
 
-  }
-  else if (event->button == 1)
-  {                             //left button
-    value = moko_digit_button_get_left (button);
-    if (value != -1)
-      g_signal_emit (moko_dialer_panel,
-                     moko_dialer_panel_signals[CLICKED_SIGNAL], 0, value);
+    timeout_data->panel = panel;
+    timeout_data->value = value;
 
-  }
+    hold_timeout_source = g_timeout_add (800, (GSourceFunc) moko_dialer_panel_hold_timeout, timeout_data);
 
-  /* allow the signal to propagate the event further */
+  }
+  else if (event->type == GDK_BUTTON_RELEASE)
+  {
+    if (hold_timeout_source != 0)
+      g_source_remove (hold_timeout_source);
+  }
   return FALSE;
 }
-#endif
 
-
-
 GtkWidget *
 moko_dialer_panel_new ()
 {

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-keypad.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-keypad.c	2007-10-12 09:37:38 UTC (rev 3149)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/moko-keypad.c	2007-10-12 11:12:56 UTC (rev 3150)
@@ -262,7 +262,37 @@
                      const gchar      digit, 
                      MokoKeypad      *keypad)
 {
-  g_debug ("on_panel_user_hold: %c", digit);
+  MokoKeypadPrivate *priv;
+  gchar buf[3];
+  GList *matches = NULL;
+
+  g_return_if_fail (MOKO_IS_KEYPAD (keypad));
+  priv = keypad->priv;
+
+  /* Phones use '#' for PIN 'entered' signal */
+  if (priv->pin_mode && digit == '#')
+  { 
+    on_dial_clicked (NULL, keypad);
+    return;
+  }   
+
+  /* Create a string to insert into the textview */
+  buf[0] = digit;
+  buf[1] = '\0';
+
+  moko_dialer_textview_delete (MOKO_DIALER_TEXTVIEW (priv->textview));
+  moko_dialer_textview_insert (MOKO_DIALER_TEXTVIEW (priv->textview), buf);
+
+  if (!priv->pin_mode)
+  {
+    /* Some autocomplete stuff */
+    matches = moko_contacts_fuzzy_lookup (moko_contacts_get_default (),
+                                          moko_dialer_textview_get_input (
+                                          MOKO_DIALER_TEXTVIEW (priv->textview), 
+                                          TRUE));
+    moko_tips_set_matches (MOKO_TIPS (priv->tips), matches);
+    g_signal_emit (G_OBJECT (keypad), keypad_signals[DIGIT_PRESSED], 0, digit);
+  }
 }
 
 /* GObject functions */





More information about the commitlog mailing list