r916 - trunk/src/target/OM-2007/applications/openmoko-dialer/src

thomas at sita.openmoko.org thomas at sita.openmoko.org
Thu Feb 8 19:05:17 CET 2007


Author: thomas
Date: 2007-02-08 19:05:11 +0100 (Thu, 08 Feb 2007)
New Revision: 916

Modified:
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/alsa.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/contacts.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/dialergsm.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/error.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/event.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-digit-button.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-main.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-dialer.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-history.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-incoming.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.h
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-talking.c
   trunk/src/target/OM-2007/applications/openmoko-dialer/src/pin.c
Log:
* Fixed many (215) compiler warnings in openmoko-dialer
* Removed use of deprecated gtk/glib functions
* Removed use of unsafe strcpy()
* Fixed some incorrect pointer casting


Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/alsa.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/alsa.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/alsa.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -200,8 +200,8 @@
   *r = lr;
 
   if (mixer_timeout)
-    gtk_timeout_remove (mixer_timeout);
-  mixer_timeout = gtk_timeout_add (5000, alsa_mixer_timeout, NULL);
+    g_source_remove (mixer_timeout);
+  mixer_timeout = g_timeout_add (5000, alsa_mixer_timeout, NULL);
 }
 
 

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -53,11 +53,11 @@
 /**
  * @brief Create a filepath by the filename from the PKGDATADIR
  * @param filename The filename of the pixbuf file
- * @return TURE, FALSE
+ * @return Newly allocated string if the file exists, otherwise returns NULL
  */
 
-gboolean
-file_create_data_path_for_the_file (const gchar * filename, gchar * path)
+gchar *
+file_create_data_path_for_the_file (const gchar * filename)
 {
   gchar *pathname;
 
@@ -66,16 +66,13 @@
 
   if (g_file_test (pathname, G_FILE_TEST_EXISTS))
   {
-    strcpy (path, pathname);
-    g_free (pathname);
-    return TRUE;
-
+    return pathname;
   }
   else
   {
     g_debug ("Can not find the file %s", pathname);
     g_free (pathname);
-    return FALSE;
+    return NULL;
   }
 
 
@@ -135,7 +132,7 @@
 
 
   gchar *pathname;
-  GtkImage *image = 0;
+  GtkWidget *image = 0;
 
   pathname = g_strdup_printf ("%s%s%s", PKGDATADIR, G_DIR_SEPARATOR_S,
                               rela_path);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/common.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -21,8 +21,7 @@
 #include <gtk/gtk.h>
 
 GdkPixbuf *create_pixbuf (const gchar * filename);
-gboolean file_create_data_path_for_the_file (const gchar * filename,
-                                             gchar * path);
+gchar* file_create_data_path_for_the_file (const gchar * filename);
 gboolean file_load_person_image_from_relative_path (GtkWidget * widget,
                                                     char *rela_path);
 GtkWidget *file_new_image_from_relative_path (char *rela_path);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/contacts.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/contacts.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/contacts.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -642,9 +642,9 @@
 
 if(photo)
   if (photo)
-    //gdk_pixbuf_loader_write (loader, photo->data.inlined.data,
-    //                         photo->data.inlined.length, NULL);
-    gdk_pixbuf_loader_write (loader, photo->data, photo->length, NULL); //just temporaly modified.                           
+    gdk_pixbuf_loader_write (loader, photo->data.inlined.data,
+                             photo->data.inlined.length, NULL);
+    //gdk_pixbuf_loader_write (loader, photo->data, photo->length, NULL); //just temporaly modified.                           
 
 
   gdk_pixbuf_loader_close (loader, NULL);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/dialergsm.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/dialergsm.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/dialergsm.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -105,7 +105,9 @@
 
 
   void gsm_watcher_install (GMainLoop * mainloop);
+  void gsm_dtmf_send (char dtmf);
 
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/error.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/error.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/error.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -25,11 +25,14 @@
 #ifndef _ERROR_H
 #define _ERROR_H
 
+#include <glib.h>
+
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
+
 #ifndef  _FIC_DEBUG
 #define _FIC_DEBUG 1
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/event.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/event.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/event.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -1,9 +1,13 @@
 #include <stdio.h>
 #include <string.h>
 
+#include <gdk/gdk.h>
+
 #include <libgsmd/libgsmd.h>
 #include <libgsmd/event.h>
-//#include "../include/dialer.h"
+
+#include "moko-dialer-includes.h"
+
 static int IncomingSignaled;    ///<to keep communication with GUI
 static int ClipSignaled;        ///<to keep communication with GUI
 static int KeepCalling;
@@ -124,12 +128,15 @@
 
   switch (aux->u.netreg.state)
   {
-    case 0:
+    case GSMD_NETREG_NONE:
       printf ("not searching for network ");
       break;
     case 1:
       printf ("registered (home network) ");
       break;
+    /* 
+     * FIXME: these are not defined in gsmd/event.h
+     *
     case 2:
       printf ("searching for network ");
       break;
@@ -139,6 +146,9 @@
     case 5:
       printf ("registered (roaming) ");
       break;
+     *
+     *
+     */
   }
 
   if (aux->u.netreg.lac)

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -217,13 +217,6 @@
 
   gint inserted = 0;
 
-
-  gint len;
-
-  if (string)
-    len = strlen (string);
-  else
-    len = 0;
 //  DBG_TRACE();
 
 //insert the tips here to avoid the _show_all show it from the start.
@@ -232,9 +225,9 @@
 
   if (!moko_dialer_autolist->tipscreated)
   {
-    gchar filepath[MOKO_DIALER_MAX_PATH_LEN + 1];
-    if (file_create_data_path_for_the_file
-        (MOKO_DIALER_DEFAULT_PERSON_IMAGE_PATH, filepath))
+    gchar *filepath;
+    if ((filepath =
+          file_create_data_path_for_the_file (MOKO_DIALER_DEFAULT_PERSON_IMAGE_PATH)))
     {
       imagePerson = gtk_image_new_from_file (filepath);
     }
@@ -246,7 +239,7 @@
     gtk_widget_set_size_request (imagePerson, 40, 40);
 //  gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, TRUE, 0);
 //gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, FALSE, 0);
-    gtk_box_pack_start (GTK_CONTAINER (moko_dialer_autolist), imagePerson,
+    gtk_box_pack_start (GTK_BOX (moko_dialer_autolist), imagePerson,
                         FALSE, FALSE, 0);
 
     moko_dialer_autolist->imagePerson = imagePerson;
@@ -261,7 +254,7 @@
 
       moko_dialer_tip_set_selected (tip, FALSE);
 
-      gtk_box_pack_start (GTK_CONTAINER (moko_dialer_autolist), tip, TRUE,
+      gtk_box_pack_start (GTK_BOX (moko_dialer_autolist), tip, TRUE,
                           TRUE, 0);
 //       gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,FALSE, 0);                  
 //       gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,TRUE, 0);
@@ -402,7 +395,7 @@
       //refresh the imagePerson widget
 //      file_load_person_image_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
 //      file_load_person_image_scalable_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
-      contact_load_contact_photo (moko_dialer_autolist->imagePerson,
+      contact_load_contact_photo (GTK_IMAGE (moko_dialer_autolist->imagePerson),
                                   moko_dialer_autolist->
                                   readycontacts[selected].p_contact->ID);
       gtk_widget_show (moko_dialer_autolist->imagePerson);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -36,7 +36,7 @@
 
 G_BEGIN_DECLS
 #define MOKO_TYPE_DIALER_AUTOLIST                (moko_dialer_autolist_get_type())
-#define MOKO_DIALER_AUTOLIST (obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_AUTOLIST, MokoDialerAutolist))
+#define MOKO_DIALER_AUTOLIST(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_AUTOLIST, MokoDialerAutolist))
 #define MOKO_DIALER_AUTOLIST_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass),MOKO_TYPE_DIALER_AUTOLIST,MokoDialerAutolistClass))
 #define MOKO_IS_DIALER_AUTOLIST(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOKO_TYPE_DIALER_AUTOLIST))
 #define MOKO_IS_DIALER_AUTOLIST_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), MOKO_TYPE_DIALER_AUTOLIST))
@@ -99,5 +99,7 @@
 
 gint moko_dialer_autolist_hide_all_tips (MokoDialerAutolist *
                                          moko_dialer_autolist);
+gboolean moko_dialer_autolist_set_data (MokoDialerAutolist * moko_dialer_autolist,
+                                        DIALER_CONTACTS_LIST_HEAD * head);
 G_END_DECLS
 #endif //

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -80,7 +80,7 @@
 //ok now, we arrange them in the vbox.
 
 // we create another vbox to hold the status labels.
-  GtkVBox *vbox2 = gtk_vbox_new (FALSE, 0);
+  GtkWidget *vbox2 = gtk_vbox_new (FALSE, 0);
   gtk_box_pack_start (GTK_BOX (vbox2), moko_dialer_status->labelStatus, TRUE,
                       TRUE, 0);
 
@@ -92,7 +92,7 @@
   gtk_box_pack_start (GTK_BOX (vbox2), moko_dialer_status->labelNumber, TRUE,
                       TRUE, 0);
 // a hbox to hold the image and the vbox2
-  GtkVBox *hbox2 = gtk_hbox_new (FALSE, 0);
+  GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
 
 
 
@@ -161,7 +161,7 @@
 //file_load_person_image_scalable_from_relative_path(moko_dialer_status->imagePerson,path);
 //file_load_person_image_from_relative_path(moko_dialer_status->imagePerson,path);
 
-  contact_load_contact_photo (moko_dialer_status->imagePerson, id);
+  contact_load_contact_photo (GTK_IMAGE (moko_dialer_status->imagePerson), id);
 //file_load_person_image_scalable_from_relative_path(moko_dialer_status->imagePerson,path);
 }
 
@@ -207,7 +207,7 @@
 {
   if (moko_dialer_status->iconStatus[index] != 0
       && index < moko_dialer_status->number_of_the_icons)
-    gtk_image_set_from_pixbuf (moko_dialer_status->icon,
+    gtk_image_set_from_pixbuf (GTK_IMAGE (moko_dialer_status->icon),
                                moko_dialer_status->iconStatus[index]);
 }
 
@@ -225,7 +225,7 @@
 moko_dialer_status_set_error (MokoDialerStatus * moko_dialer_status)
 {
   if (moko_dialer_status->iconError)
-    gtk_image_set_from_pixbuf (moko_dialer_status->icon,
+    gtk_image_set_from_pixbuf (GTK_IMAGE (moko_dialer_status->icon),
                                moko_dialer_status->iconError);
   moko_dialer_status_set_status_label (moko_dialer_status, "");
 }
@@ -234,7 +234,7 @@
 moko_dialer_status_set_success (MokoDialerStatus * moko_dialer_status)
 {
   if (moko_dialer_status->iconSuccess)
-    gtk_image_set_from_pixbuf (moko_dialer_status->icon,
+    gtk_image_set_from_pixbuf (GTK_IMAGE (moko_dialer_status->icon),
                                moko_dialer_status->iconSuccess);
 
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-status.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -36,7 +36,7 @@
 
 G_BEGIN_DECLS
 #define MOKO_TYPE_DIALER_STATUS                (moko_dialer_status_get_type())
-#define MOKO_DIALER_STATUS (obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_STATUS, MokoDialerStatus))
+#define MOKO_DIALER_STATUS(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_STATUS, MokoDialerStatus))
 #define MOKO_DIALER_STATUS_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass),MOKO_TYPE_DIALER_STATUS,MokoDialerStatusClass))
 #define MOKO_IS_DIALER_STATUS(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOKO_TYPE_DIALER_STATUS))
 #define MOKO_IS_DIALER_STATUS_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), MOKO_TYPE_DIALER_STATUS))
@@ -93,5 +93,13 @@
                                           moko_dialer_status,
                                           const gchar * text);
 
+void moko_dialer_status_set_error (MokoDialerStatus * moko_dialer_status);
+void moko_dialer_status_update_icon (MokoDialerStatus * moko_dialer_status);
+int moko_dialer_status_add_status_icon (MokoDialerStatus * moko_dialer_status,
+                                        const gchar * text);
+void moko_dialer_status_set_icon_by_index (MokoDialerStatus * moko_dialer_status,
+                                           gint index);
+
+
 G_END_DECLS
 #endif //

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -32,7 +32,7 @@
 //static void  moko_dialer_textview_pressed  (MokoDigitButton * button, GdkEventButton  *event,gpointer data);
 //static void moko_dialer_textview_pressed (MokoDigitButton * button, gpointer data);
 
-     static gint moko_dialer_textview_signals[LAST_SIGNAL] = { 0 };
+//static gint moko_dialer_textview_signals[LAST_SIGNAL] = { 0 };
 
 static void
 moko_dialer_textview_class_init (MokoDialerTextviewClass * class)
@@ -61,9 +61,9 @@
   moko_dialer_textview->tag_for_cursor = NULL;
   moko_dialer_textview->tag_for_autofilled = NULL;
 
+  /* TODO: use theme colours */
   gdk_color_parse ("black", &color);
-//                      gtk_widget_modify_bg(textview,GTK_STATE_NORMAL,&color);
-  gtk_widget_modify_base (textview, GTK_STATE_NORMAL, &color);
+  gtk_widget_modify_base (GTK_WIDGET (textview), GTK_STATE_NORMAL, &color);
 
 
 
@@ -251,16 +251,17 @@
 
 
   len = gtk_text_buffer_get_char_count (buffer);
-  // len=strlen(codestring);
   if (len >= 0 && len < MOKO_DIALER_MAX_NUMBER_LEN)
   {
 
-    gtk_text_buffer_insert_at_cursor (buffer, number, strlen (number));
-    len = len + strlen (number);
+    gtk_text_buffer_insert_at_cursor (buffer, number, g_utf8_strlen (number, -1));
+    len = len + g_utf8_strlen (number, -1);
   }
   else
   {
-//      DBG_WARN("INPUT EXCEEDS %d,reset to null!",MAXDIALNUMBERLEN);
+    // DBG_WARN("INPUT EXCEEDS %d,reset to null!",MAXDIALNUMBERLEN);
+
+    /* FIXME: shouldn't this just leave the existing number? */
     gtk_text_buffer_set_text (buffer, number, -1);
     len = 1;
   }
@@ -287,47 +288,40 @@
 //get the input section of the textview 
 //if ALL=true, get whole text
 //else only get the inputed digits.
-gint
+gchar *
 moko_dialer_textview_get_input (MokoDialerTextview * moko_dialer_textview,
-                                gchar * input, int ALL)
+                                gboolean all_text)
 {
-  gchar *codestring;
   GtkTextBuffer *buffer;
   GtkTextIter start;
   GtkTextIter end;
   GtkTextIter insertiter;
   GtkTextMark *insertmark;
 
-//DBG_ENTER();
-
-/* Obtaining the buffer associated with the widget. */
+  /* Obtaining the buffer associated with the widget. */
   buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (moko_dialer_textview));
 
-//get current cursor iterator
+  // get current cursor iterator
   insertmark = gtk_text_buffer_get_insert (buffer);
   gtk_text_buffer_get_iter_at_mark (buffer, &insertiter, insertmark);
-//get start & end iterator
+
+  //get start & end iterator
   gtk_text_buffer_get_start_iter (buffer, &start);
   gtk_text_buffer_get_end_iter (buffer, &end);
 
+  /* FIXME: Should this check all_text too? */
   if (gtk_text_iter_get_offset (&insertiter) ==
       gtk_text_iter_get_offset (&start))
   {
-    strcpy (input, "");
-    return 0;
+    return NULL;
   }
-// DBG_TRACE();
-  if (ALL)
+
+  if (all_text)
     /* Get the entire buffer text. */
-    codestring = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+    return gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
   else
-    codestring =
-      gtk_text_buffer_get_text (buffer, &start, &insertiter, FALSE);
-//DBG_MESSAGE("%s",codestring);
-  strcpy (input, codestring);
-// DBG_TRACE();
-  g_free (codestring);
-  return 1;
+    return gtk_text_buffer_get_text (buffer, &start, &insertiter, FALSE);
+
 }
 
 //delete all the input 
@@ -387,8 +381,6 @@
 moko_dialer_textview_fill_it (MokoDialerTextview * moko_dialer_textview,
                               gchar * string)
 {
-
-
   GtkTextBuffer *buffer;
   GtkTextIter start;
   GtkTextIter end;
@@ -445,11 +437,13 @@
 //gtk_text_buffer_insert_with_tags_by_name(buffer,&insertiter,"139",3,tag_name);
   if (string != 0)
   {
-    if (strlen (string) > 0)
+    gint len;
+    len = g_utf8_strlen (string, -1);
+    if (len > 0)
     {
-      gtk_text_buffer_insert (buffer, &insertiter, string, strlen (string));
+      gtk_text_buffer_insert (buffer, &insertiter, string, len);
 
-//reget current cursor iterator
+      //reget current cursor iterator
       insertmark = gtk_text_buffer_get_insert (buffer);
       gtk_text_buffer_get_iter_at_mark (buffer, &insertiter, insertmark);
       gtk_text_iter_set_offset (&insertiter, offset);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-textview.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -31,7 +31,7 @@
 
 G_BEGIN_DECLS
 #define MOKO_TYPE_DIALER_TEXTVIEW                (moko_dialer_textview_get_type())
-#define MOKO_DIALER_TEXTVIEW (obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_TEXTVIEW, MokoDialerTextview))
+#define MOKO_DIALER_TEXTVIEW(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOKO_TYPE_DIALER_TEXTVIEW, MokoDialerTextview))
 #define MOKO_DIALER_TEXTVIEW_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass),MOKO_TYPE_DIALER_TEXTVIEW,MokoDialerTextviewClass))
 #define MOKO_IS_DIALER_TEXTVIEW(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOKO_TYPE_DIALER_TEXTVIEW))
 #define MOKO_IS_DIALER_TEXTVIEW_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), MOKO_TYPE_DIALER_TEXTVIEW))
@@ -63,9 +63,15 @@
 int moko_dialer_textview_insert (MokoDialerTextview * moko_dialer_textview,
                                  const gchar * number);
 
-int moko_dialer_textview_get_input (MokoDialerTextview * moko_dialer_textview,
-                                    gchar * input, int ALL);
+gchar *moko_dialer_textview_get_input (MokoDialerTextview * moko_dialer_textview,
+                                       gboolean all_text);
 int moko_dialer_textview_empty (MokoDialerTextview * moko_dialer_textview);
+int moko_dialer_textview_fill_it (MokoDialerTextview * moko_dialer_textview,
+                                  gchar * string);
+int moko_dialer_textview_delete (MokoDialerTextview * moko_dialer_textview);
+void moko_dialer_textview_set_color (MokoDialerTextview * moko_dialer_textview);
+gint moko_dialer_textview_confirm_it (MokoDialerTextview * moko_dialer_textview,
+                                      const gchar * string);
 
 G_END_DECLS
 #endif //

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-digit-button.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-digit-button.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-digit-button.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -66,7 +66,7 @@
     (MokoDigitButton *) g_object_new (MOKO_TYPE_DIGIT_BUTTON, NULL);
 
   gtk_widget_show (GTK_WIDGET (digitbutton));
-  gtk_widget_set_size_request (digitbutton, 64, 64);
+  gtk_widget_set_size_request (GTK_WIDGET (digitbutton), 64, 64);
 
 //  GtkWidget * hbox = gtk_hbox_new (TRUE, 0);
   GtkWidget *hbox = gtk_hbox_new (FALSE, 0);

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-main.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-main.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -39,10 +39,13 @@
 #include "dialergsm.h"
 #include "openmoko-dialer-main.h"
 #include "openmoko-dialer-window-dialer.h"
+#include "openmoko-dialer-window-talking.h"
 #include "openmoko-dialer-window-outgoing.h"
 #include "openmoko-dialer-window-incoming.h"
-MOKO_DIALER_APP_DATA* p_dialer_data=0;
-MOKO_DIALER_APP_DATA*  moko_get_app_data()
+
+MOKO_DIALER_APP_DATA *p_dialer_data = 0;
+MOKO_DIALER_APP_DATA *
+moko_get_app_data ()
 {
 return p_dialer_data;
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-dialer.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-dialer.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-dialer.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -29,10 +29,13 @@
 #include <gtk/gtkmenu.h>
 #include <gtk/gtkmenuitem.h>
 #include <gtk/gtkvbox.h>
+
+#include "common.h"
 #include "contacts.h"
 #include "openmoko-dialer-main.h"
 #include "openmoko-dialer-window-dialer.h"
 #include "openmoko-dialer-window-history.h"
+#include "openmoko-dialer-window-outgoing.h"
 
 void
 cb_delete_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
@@ -52,11 +55,10 @@
   {
     moko_dialer_textview_delete (appdata->moko_dialer_text_view);
 //refresh the autolist,but do not automaticall fill the textview
-    char codesinput[MOKO_DIALER_MAX_NUMBER_LEN + 1];
-    moko_dialer_textview_get_input (appdata->moko_dialer_text_view,
-                                    codesinput, 0);
+    gchar *codesinput;
+    codesinput = moko_dialer_textview_get_input (appdata->moko_dialer_text_view, FALSE);
 
-    if (strlen (codesinput) >= MOKO_DIALER_MIN_SENSATIVE_LEN)
+    if (g_utf8_strlen (codesinput, -1) >= MOKO_DIALER_MIN_SENSATIVE_LEN)
     {
       moko_dialer_autolist_refresh_by_string (appdata->moko_dialer_autolist,
                                               codesinput, FALSE);
@@ -64,8 +66,8 @@
     }
     else
       moko_dialer_autolist_hide_all_tips (appdata->moko_dialer_autolist);
+   g_free (codesinput);
 
-
   }
 
 }
@@ -84,13 +86,13 @@
 void
 window_dialer_dial_out (MOKO_DIALER_APP_DATA * appdata)
 {
-  gchar codesinput[MOKO_DIALER_MAX_NUMBER_LEN + 1];
+  gchar *codesinput;
   //get the input digits
-  moko_dialer_textview_get_input (appdata->moko_dialer_text_view, codesinput,
-                                  0);
-  if (strlen (codesinput) < 1)
+  codesinput = moko_dialer_textview_get_input (appdata->moko_dialer_text_view,
+                                               FALSE);
+  if (g_utf8_strlen (codesinput, -1) < 1)
   {
-    if (strlen (appdata->g_state.lastnumber) > 0)
+    if (g_utf8_strlen (appdata->g_state.lastnumber, -1) > 0)
     {
       moko_dialer_textview_insert (appdata->moko_dialer_text_view,
                                    appdata->g_state.lastnumber);
@@ -110,7 +112,7 @@
   moko_dialer_autolist_hide_all_tips (appdata->moko_dialer_autolist);
 
 //got the number;
-  strcpy (appdata->g_peer_info.number, codesinput);
+  codesinput = g_strdup (appdata->g_peer_info.number);
 
 //retrieve the contact information if any.
   contact_get_peer_info_from_number (appdata->g_contactlist.contacts,
@@ -134,8 +136,8 @@
 //start dialling.
   gtk_widget_show (appdata->window_outgoing);
 
+  g_free (codesinput);
 
-
 }
 
 void
@@ -150,7 +152,7 @@
 on_dialer_autolist_user_selected (GtkWidget * widget, gpointer para_pointer,
                                   gpointer user_data)
 {
-  gchar codesinput[MOKO_DIALER_MAX_NUMBER_LEN + 1];
+  gchar *codesinput;
   gint lenstring = 0;
   gint leninput = 0;
   MOKO_DIALER_APP_DATA *appdata = (MOKO_DIALER_APP_DATA *) user_data;
@@ -158,9 +160,9 @@
   DIALER_READY_CONTACT *ready_contact = (DIALER_READY_CONTACT *) para_pointer;
   DBG_MESSAGE ("GOT THE MESSAGE OF SELECTED:%s",
                ready_contact->p_entry->content);
-  moko_dialer_textview_get_input (moko_dialer_text_view, codesinput, 0);
-  lenstring = strlen (ready_contact->p_entry->content);
-  leninput = strlen (codesinput);
+  codesinput = moko_dialer_textview_get_input (moko_dialer_text_view, FALSE);
+  lenstring = g_utf8_strlen (ready_contact->p_entry->content, -1);
+  leninput = g_utf8_strlen (codesinput, -1);
   if (lenstring > leninput)
   {
 
@@ -170,6 +172,8 @@
 
   }
 
+  g_free (codesinput);
+
 }
 
 void
@@ -229,7 +233,7 @@
   char input[2];
   input[0] = parac;
   input[1] = 0;
-  char codesinput[MOKO_DIALER_MAX_NUMBER_LEN + 1];
+  gchar *codesinput;
 
 //DBG_TRACE();
   MOKO_DIALER_APP_DATA *appdata = (MOKO_DIALER_APP_DATA *) user_data;
@@ -240,12 +244,12 @@
 //DBG_TRACE();
 
 
-  moko_dialer_textview_get_input (moko_dialer_text_view, codesinput, 0);
+  codesinput = moko_dialer_textview_get_input (moko_dialer_text_view, FALSE);
 //DBG_TRACE();
 
 //DBG_MESSAGE("LEN=%d,MAX=%d",strlen(codesinput),MOKO_DIALER_MAX_NUMBER_LEN);
 
-  if (strlen (codesinput) >= MOKO_DIALER_MIN_SENSATIVE_LEN)
+  if (g_utf8_strlen (codesinput, -1) >= MOKO_DIALER_MIN_SENSATIVE_LEN)
   {
     moko_dialer_autolist_refresh_by_string (appdata->moko_dialer_autolist,
                                             codesinput, TRUE);
@@ -254,6 +258,7 @@
   {
     moko_dialer_autolist_hide_all_tips (appdata->moko_dialer_autolist);
   }
+  g_free (codesinput);
 
 }
 void
@@ -298,33 +303,32 @@
     GdkColor color;
     gdk_color_parse ("black", &color);
 
-    GtkVBox *vbox = NULL;
+    GtkWidget *vbox = NULL;
 
 
-    MokoFingerWindow *window = MOKO_FINGER_WINDOW (moko_finger_window_new ());
+    GtkWidget *window = moko_finger_window_new ();
 
 
     GtkMenu *appmenu = GTK_MENU (gtk_menu_new ());
-    GtkMenuItem *closeitem =
-      GTK_MENU_ITEM (gtk_menu_item_new_with_label ("Close"));
+    GtkWidget *closeitem = gtk_menu_item_new_with_label ("Close");
     g_signal_connect (G_OBJECT (closeitem), "activate",
                       G_CALLBACK (on_dialer_menu_close), p_dialer_data);
-    gtk_menu_shell_append (appmenu, closeitem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (appmenu), closeitem);
 
     GtkMenuItem *hideitem =
       GTK_MENU_ITEM (gtk_menu_item_new_with_label ("Hide"));
     g_signal_connect (G_OBJECT (hideitem), "activate",
                       G_CALLBACK (on_dialer_menu_hide), p_dialer_data);
-    gtk_menu_shell_append (appmenu, hideitem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (appmenu), GTK_WIDGET (hideitem));
 
 
-    moko_finger_window_set_application_menu (window, appmenu);
+    moko_finger_window_set_application_menu (MOKO_FINGER_WINDOW (window), appmenu);
 
 //    g_signal_connect( G_OBJECT(window), "delete_event", G_CALLBACK( gtk_main_quit ), NULL );
-     g_signal_connect ((gpointer) window, "show",
+     g_signal_connect (G_OBJECT (window), "show",
 	                    G_CALLBACK (on_window_dialer_show),
 	                    p_dialer_data);
-    g_signal_connect ((gpointer) window, "hide",
+    g_signal_connect (G_OBJECT (window), "hide",
 	                    G_CALLBACK (on_window_dialer_hide),
 	                    p_dialer_data);
 
@@ -332,21 +336,21 @@
 
     /* contents */
     vbox = gtk_vbox_new (FALSE, 0);
-    GtkHBox *hbox = gtk_hbox_new (FALSE, 10);
+    GtkWidget *hbox = gtk_hbox_new (FALSE, 10);
 
 
-    GtkEventBox *eventbox1 = gtk_event_box_new ();
+    GtkWidget *eventbox1 = gtk_event_box_new ();
     gtk_widget_show (eventbox1);
     //  gtk_widget_set_size_request (eventbox1, 480, 132);
-    gtk_widget_set_name (GTK_WIDGET (eventbox1), "gtkeventbox-black");
+    gtk_widget_set_name (eventbox1, "gtkeventbox-black");
 
-    MokoDialerAutolist *autolist = moko_dialer_autolist_new ();
-    moko_dialer_autolist_set_data (autolist, &(p_dialer_data->g_contactlist));
-    p_dialer_data->moko_dialer_autolist = autolist;
+    GtkWidget *autolist = moko_dialer_autolist_new ();
+    moko_dialer_autolist_set_data (MOKO_DIALER_AUTOLIST (autolist), &(p_dialer_data->g_contactlist));
+    p_dialer_data->moko_dialer_autolist = MOKO_DIALER_AUTOLIST (autolist);
 
     gtk_container_add (GTK_CONTAINER (eventbox1), autolist);
 //    gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(autolist), FALSE, FALSE, 5 );
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (eventbox1), FALSE, FALSE,
+    gtk_box_pack_start (GTK_BOX (vbox), eventbox1, FALSE, FALSE,
                         0);
 
     gtk_widget_modify_bg (eventbox1, GTK_STATE_NORMAL, &color);
@@ -369,20 +373,20 @@
 
     eventbox1 = gtk_event_box_new ();
     gtk_widget_show (eventbox1);
-    
gtk_widget_set_name (GTK_WIDGET (eventbox1), "gtkeventbox-black");
+    gtk_widget_set_name (eventbox1, "gtkeventbox-black");
     gtk_widget_modify_bg (eventbox1, GTK_STATE_NORMAL, &color);
 //        gtk_widget_set_size_request (eventbox1, 480, 132);
 
-    MokoDialerTextview *mokotextview = moko_dialer_textview_new ();
-    p_dialer_data->moko_dialer_text_view = mokotextview;
+    GtkWidget *mokotextview = moko_dialer_textview_new ();
+    p_dialer_data->moko_dialer_text_view = MOKO_DIALER_TEXTVIEW (mokotextview);
 
     gtk_container_add (GTK_CONTAINER (eventbox1), mokotextview);
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (eventbox1), FALSE, FALSE,
+    gtk_box_pack_start (GTK_BOX (vbox), eventbox1, FALSE, FALSE,
                         0);
 //    gtk_box_pack_start( GTK_BOX(vbox), GTK_WIDGET(mokotextview), FALSE,FALSE, 5 );
 
 
-    MokoDialerPanel *mokodialerpanel = moko_dialer_panel_new ();
+    GtkWidget *mokodialerpanel = moko_dialer_panel_new ();
 
     gtk_widget_set_size_request (mokodialerpanel, 380, 384);
 
@@ -394,73 +398,73 @@
     g_signal_connect (GTK_OBJECT (mokodialerpanel), "user_hold",
                       G_CALLBACK (on_dialer_panel_user_hold), p_dialer_data);
 
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (mokodialerpanel), TRUE,
+    gtk_box_pack_start (GTK_BOX (hbox), mokodialerpanel, TRUE,
                         TRUE, 5);
 
 
 
 //the buttons
 
-    GtkVBox *vbox2 = gtk_vbox_new (FALSE, 0);
-    GtkButton *button1 = moko_pixmap_button_new ();
+    GtkWidget *vbox2 = gtk_vbox_new (FALSE, 0);
+    GtkWidget *button1 = moko_pixmap_button_new ();
     g_signal_connect (G_OBJECT (button1), "clicked",
                       G_CALLBACK (cb_delete_button_clicked), p_dialer_data);
-    gtk_widget_set_name (GTK_WIDGET (button1), "mokofingerbutton-orange");
-    moko_pixmap_button_set_center_stock (button1, "gtk-delete");
-    moko_pixmap_button_set_action_btn_lower_label (button1, "Delete");
+    gtk_widget_set_name (button1, "mokofingerbutton-orange");
+    moko_pixmap_button_set_center_stock (MOKO_PIXMAP_BUTTON (button1), "gtk-delete");
+    moko_pixmap_button_set_action_btn_lower_label (MOKO_PIXMAP_BUTTON (button1), "Delete");
     gtk_widget_set_size_request (button1, WINDOW_DIALER_BUTTON_SIZE_X,
                                  WINDOW_DIALER_BUTTON_SIZE_Y);
 
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (button1), FALSE, FALSE,
+    gtk_box_pack_start (GTK_BOX (vbox2), button1, FALSE, FALSE,
                         5);
 
-    GtkButton *button3 = moko_pixmap_button_new ();
+    GtkWidget *button3 = moko_pixmap_button_new ();
     g_signal_connect (G_OBJECT (button3), "clicked",
                       G_CALLBACK (cb_history_button_clicked), p_dialer_data);
-    gtk_widget_set_name (GTK_WIDGET (button3), "mokofingerbutton-orange");
+    gtk_widget_set_name (button3, "mokofingerbutton-orange");
 //moko_pixmap_button_set_center_stock(button3,"gtk-refresh");
-    moko_pixmap_button_set_finger_toolbox_btn_center_image (button3,
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON (button3),
                                                             file_new_image_from_relative_path
                                                             ("all.png"));
-    moko_pixmap_button_set_action_btn_lower_label (button3, "History");
+    moko_pixmap_button_set_action_btn_lower_label (MOKO_PIXMAP_BUTTON (button3), "History");
     gtk_widget_set_size_request (button3, WINDOW_DIALER_BUTTON_SIZE_X,
                                  WINDOW_DIALER_BUTTON_SIZE_Y);
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (button3), FALSE, FALSE,
+    gtk_box_pack_start (GTK_BOX (vbox2), button3, FALSE, FALSE,
                         5);
 
 
-    GtkButton *button2 = moko_pixmap_button_new ();
+    GtkWidget *button2 = moko_pixmap_button_new ();
 
     g_signal_connect (G_OBJECT (button2), "clicked",
                       G_CALLBACK (cb_dialer_button_clicked), p_dialer_data);
-    gtk_widget_set_name (GTK_WIDGET (button2), "mokofingerbutton-black");
-    moko_pixmap_button_set_finger_toolbox_btn_center_image (button2,
+    gtk_widget_set_name (button2, "mokofingerbutton-black");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON (button2),
                                                             file_new_image_from_relative_path
                                                             ("phone.png"));
-    moko_pixmap_button_set_action_btn_lower_label (button2, "Dial");
+    moko_pixmap_button_set_action_btn_lower_label (MOKO_PIXMAP_BUTTON (button2), "Dial");
     gtk_widget_set_size_request (button2, WINDOW_DIALER_BUTTON_SIZE_X + 20,
                                  WINDOW_DIALER_BUTTON_SIZE_Y + 80);
 
-    gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (button2), FALSE, FALSE,
+    gtk_box_pack_start (GTK_BOX (vbox2), button2, FALSE, FALSE,
                         20);
 
 
-    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (vbox2), TRUE, TRUE, 5);
+    gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, TRUE, 5);
 
 
 
-    gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (hbox), TRUE, TRUE, 5);
+    gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 5);
 
 
 
 
-    moko_finger_window_set_contents (window, GTK_WIDGET (vbox));
+    moko_finger_window_set_contents (MOKO_FINGER_WINDOW (window), vbox);
 
 
     p_dialer_data->window_dialer = window;
 
-    gtk_widget_show_all (GTK_WIDGET (window));
-    gtk_widget_hide(GTK_WIDGET (window));
+    gtk_widget_show_all (window);
+    gtk_widget_hide(window);
 
    
 

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-history.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-history.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-history.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -1,962 +1,1039 @@
-/*   openmoko-dialer-window-talking.c
- *
- *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
- *
- *  Copyright (C) 2006 FIC Shanghai Lab
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Public License as published by
- *  the Free Software Foundation; version 2 of the license.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser Public License for more details.
- *
- *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
- */
-
-#include <libmokoui/moko-finger-tool-box.h>
-#include <libmokoui/moko-finger-window.h>
-#include <libmokoui/moko-finger-wheel.h>
-#include <libmokoui/moko-pixmap-button.h>
-
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtktreeview.h>
-#include <gtk/gtktreemodelfilter.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtkimagemenuitem.h>
-#include <gtk/gtkmenu.h>
-#include "contacts.h"
-#include "openmoko-dialer-main.h"
-#include "moko-dialer-status.h"
-#include  "history.h"
-#include "openmoko-dialer-window-history.h"
-
-/**
- * @brief re-filter the treeview widget by the history type
- *
- * 
- *
- * @param type HISTORY_TYPE, indicating only the history items of that type will be displayed
- * @return 1
- * @retval
- */
- 
-int history_view_change_filter(MOKO_DIALER_APP_DATA* p_dialer_data,HISTORY_TYPE  type)
-{
-GtkWidget* historyview;
-GtkTreePath* path;
-DBG_TRACE();
-p_dialer_data->g_history_filter_type=type;
-gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(p_dialer_data->g_list_store_filter));
-
-path=gtk_tree_path_new_first();
-gtk_tree_view_set_cursor(GTK_TREE_VIEW(p_dialer_data->treeview_history),path,0,0);   
-gtk_tree_path_free(path);
-
-	
-return 1;
-}
-
-void
-on_all_calls_activate                  (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-	MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )user_data;
-	GtkWidget* label=p_dialer_data->label_filter_history;
-	gtk_label_set_text(GTK_LABEL(label),"All");
-	history_view_change_filter(p_dialer_data,ALL);
-	history_update_counter(p_dialer_data);
-}
-
-
-void
-on_missed_calls_activate               (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-	MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )user_data;
-	GtkWidget* label=p_dialer_data->label_filter_history;
-	gtk_label_set_text(GTK_LABEL(label),"Missed");
-	history_view_change_filter(p_dialer_data,MISSED);
-	history_update_counter(p_dialer_data);
-}
-
-
-void
-on_dialed_calls_activate               (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-	MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )user_data;
-	GtkWidget* label=p_dialer_data->label_filter_history;
-	gtk_label_set_text(GTK_LABEL(label),"Dialed");
-	history_view_change_filter(p_dialer_data,OUTGOING);
-	history_update_counter(p_dialer_data);
-}
-
-
-void
-on_received_calls_activate            (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-	MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )user_data;
-	GtkWidget* label=p_dialer_data->label_filter_history;
-	gtk_label_set_text(GTK_LABEL(label),"Received");
-	history_view_change_filter(p_dialer_data,INCOMING);
-	history_update_counter(p_dialer_data);
-}
-
-gboolean
-on_eventboxTop_button_release_event    (GtkWidget       *widget,
-                                        GdkEventButton  *event,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-	
- gtk_menu_popup(GTK_MENU(appdata->menu_history),0,0,0,0,0,0);
- 
-  return FALSE;
-}
-
-void
-openmoko_history_wheel_press_left_up_cb(GtkWidget *widget, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
- GtkTreeSelection    *selection;
- GtkTreeModel        *model;
- GtkTreeIter         iter;
- GtkTreePath* path;
- GtkTreeView * treeview;
- //DBG_ENTER();
-
-treeview=GTK_TREE_VIEW(appdata->treeview_history);
- if(treeview==0)return ;
-	 
- selection = gtk_tree_view_get_selection(treeview);
-
- if (!gtk_tree_selection_get_selected(selection, &model, &iter))
- {
-	 DBG_WARN("no current selection\n");
-	 return ;
- }
- 		path=gtk_tree_model_get_path(model,&iter);
-		if(!gtk_tree_path_prev(path))
-		{
-				DBG_WARN("no prev for the top level\n");
-				gtk_tree_path_free(path);
-				return;
-		}
-		gtk_tree_view_set_cursor(treeview,path,0,0);
-  return ;
-
-
-}
-
-void
-openmoko_history_wheel_press_right_down_cb(GtkWidget *widget, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
- GtkTreeSelection    *selection;
- GtkTreeModel        *model;
- GtkTreeIter         iter;
- GtkTreePath* path;
- GtkTreeView * treeview;
- //DBG_ENTER();
-treeview=GTK_TREE_VIEW(appdata->treeview_history);
- if(treeview==0)return ;
-	 
- selection = gtk_tree_view_get_selection(treeview);
-
- if (!gtk_tree_selection_get_selected(selection, &model, &iter))
- {
-	 DBG_WARN("no current selection\n");
-	 return ;
- }
-	 if(gtk_tree_model_iter_next(model,&iter))
-	 {
-		path=gtk_tree_model_get_path(model,&iter);
-		gtk_tree_view_set_cursor(treeview,path,0,0);
-		gtk_tree_path_free(path);
-		return ;
-	 }
- 
-  return ;
-}
-
-
-void cb_tool_button_history_delete_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-GtkTreeIter iter; //iter of the filter store
-GtkTreeIter iter0; //iter of the back store
-GtkTreeModel* model;
-GtkTreeModel* model0;
-GtkTreeSelection * selection;
-GtkTreeView* treeview;
-GtkTreePath* path;
-treeview=GTK_TREE_VIEW(appdata->treeview_history);
-selection = gtk_tree_view_get_selection(treeview);
-
-	
-if (!gtk_tree_selection_get_selected(selection, &model, &iter))
-{
-	return;
-}
-	
-if(appdata->g_currentselected)
-{
-DBG_MESSAGE("to delete %s",appdata->g_currentselected->number);
-history_delete_entry(&(appdata->g_historylist),appdata->g_currentselected);
-}
-
-path=gtk_tree_model_get_path(model,&iter);
-
-
-model0=gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
-
-
-gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter0,&iter);
-
-gtk_list_store_remove(GTK_LIST_STORE(model0),&iter0);
-
-
-gtk_tree_view_set_cursor(treeview,path,0,0);
-
-
-if (!gtk_tree_selection_get_selected(selection, &model, &iter))
-{
-	if(!gtk_tree_path_prev(path))
-	{
-		gtk_tree_view_set_cursor(treeview,path,0,0);
-		DBG_WARN("history is empty now!");
-		history_update_counter(appdata);
-	}
-	else
-	{
-		gtk_tree_view_set_cursor(treeview,path,0,0);
-	}
-	//we deleted the last one.
-	
-}
-
-gtk_tree_path_free(path);
-
-return ;
-
-  DBG_ENTER();
-}
-
-void cb_tool_button_history_call_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-	DBG_ENTER();
-	
-
-  
-}
-
-void cb_tool_button_history_sms_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-	DBG_ENTER();
-	
-
-  
-}
-
-void cb_tool_button_history_back_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-     gtk_widget_hide(appdata->window_history);
-     
-}
-
-
-void
-on_window_history_hide                 (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-appdata->window_present=0;
-gtk_widget_hide(appdata->wheel_history);
-gtk_widget_hide(appdata->toolbox_history);
-
-}
-
-void
-on_window_history_show                  (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-appdata->window_present=widget;
-
-if(appdata->wheel_history)
-gtk_widget_show(appdata->wheel_history);
-
-if(appdata->toolbox_history)
-gtk_widget_show(appdata->toolbox_history);
-
-if(appdata->history_need_to_update)
-{
-DBG_MESSAGE("NEED TO UPDATE HISTORY");
-}
-   
-DBG_LEAVE();
-}
-
-
-
-
-gint window_history_init( MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-
-DBG_ENTER();
-
-
-if(p_dialer_data->window_history==0)
-{
-
-	 history_create_menu_history (p_dialer_data);
-
-	MokoFingerWindow* window=NULL;
-      MokoFingerToolBox *tools = NULL;
-	GtkWidget* button;
-	GtkWidget* image;
-
-//now the container--window
-     window = MOKO_FINGER_WINDOW(moko_finger_window_new());
-     p_dialer_data->window_history=window;
-
-    
-     moko_finger_window_set_contents(window, create_window_history_content(p_dialer_data));
-
-     g_signal_connect ((gpointer) window, "show",
-	                    G_CALLBACK (on_window_history_show),
-	                    p_dialer_data);
-    g_signal_connect ((gpointer) window, "hide",
-	                    G_CALLBACK (on_window_history_hide),
-	                    p_dialer_data);
-
-    
-     
-     gtk_widget_show_all( GTK_WIDGET(window) );
-
-//the gtk_widget_show_all is really bad, cause i have to call it and then hide some widgets.
-
-
- //now the wheel and tool box, why should the wheel and toolbox created after the gtk_widget_show_all???
-   gtk_widget_show(GTK_WIDGET(moko_finger_window_get_wheel(window)));
-    
-    g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
-		    "press_left_up",
-		    G_CALLBACK(openmoko_history_wheel_press_left_up_cb),
-		    p_dialer_data);
-    g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
-		    "press_right_down",
-		    G_CALLBACK(openmoko_history_wheel_press_right_down_cb),
-		    p_dialer_data);
-
-
-
-        tools = moko_finger_window_get_toolbox(window);
-     
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("phone.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-        g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_history_call_clicked), p_dialer_data);
-	
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("sms.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_history_sms_clicked), p_dialer_data);
-	
-
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("delete.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_history_delete_clicked), p_dialer_data);
-	gtk_widget_show(GTK_WIDGET(tools));
-
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("tony.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_history_back_clicked), p_dialer_data);
-	gtk_widget_show(GTK_WIDGET(tools));
-	
-	p_dialer_data->wheel_history=moko_finger_window_get_wheel(window);
-	p_dialer_data->toolbox_history=tools;
-
-	gtk_widget_hide(window);
-
-	DBG_LEAVE();
-}
-else
-{
-	//here we have to refresh it.
-	DBG_TRACE();
-}
-    return 1;
-}
-
-void on_treeviewHistory_cursor_changed      (GtkTreeView     *treeview,
-                                        gpointer         user_data)
-{
-GtkTreeIter iter;
-GtkTreeModel* model;
-GtkTreeSelection * selection;
-HISTORY_ENTRY * p;
-int hasname;
-MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )user_data;
-	
-selection = gtk_tree_view_get_selection(p_dialer_data->treeview_history);
- 
-if (!gtk_tree_selection_get_selected(selection, &model, &iter))
- {
- 	 p_dialer_data->g_currentselected=0;
-	 return ;
- }
-	
-gtk_tree_model_get(model,&iter,COLUMN_ENTRYPOINTER,&p,-1);
-
- p_dialer_data->g_currentselected=p;
-
-gtk_tree_model_get(model,&iter,COLUMN_HASNAME,&hasname,-1);
-history_update_counter(p_dialer_data);
-
-}
-
-
-
-GtkWidget* create_window_history_content (MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-
-  GtkWidget *treeviewHistory;
-  GtkWidget *vbox=gtk_vbox_new(FALSE,0); 
-  //FIRST of all, the top title area;
-  GtkWidget *eventboxTop = gtk_event_box_new ();
-  gtk_widget_show (eventboxTop);
-  gtk_box_pack_start(GTK_BOX(vbox),eventboxTop,FALSE,FALSE,5);
-  gtk_widget_set_size_request (eventboxTop, 480, 64);
-  gtk_widget_set_name(eventboxTop,"gtkeventbox-black");
-	
-  GtkWidget *  hbox67 = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox67);
-  gtk_container_add (GTK_CONTAINER (eventboxTop), hbox67);
-
-  GtkWidget * eventboxLeftTop = gtk_event_box_new ();
-  gtk_widget_show (eventboxLeftTop);
-  gtk_box_pack_start (GTK_BOX (hbox67), eventboxLeftTop, FALSE, TRUE, 0);
-  gtk_widget_set_name(eventboxLeftTop,"gtkeventbox-black");
-
-
-
-  GtkWidget * imageLeftMenu =file_new_image_from_relative_path("all.png");
-  gtk_widget_show (imageLeftMenu);
-  gtk_container_add (GTK_CONTAINER (eventboxLeftTop), imageLeftMenu);
-
-  GtkWidget *labelHistoryTitle = gtk_label_new (("History-"));
-  gtk_widget_show (labelHistoryTitle);
-  gtk_box_pack_start (GTK_BOX (hbox67), labelHistoryTitle, FALSE, FALSE, 0);
-  gtk_widget_set_size_request (labelHistoryTitle, 221, -1);
-  gtk_label_set_justify (GTK_LABEL (labelHistoryTitle), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (labelHistoryTitle), 1, 0.5);
-
-  GtkWidget *labelFilter = gtk_label_new (("All"));
-  gtk_widget_show (labelFilter);
-  gtk_box_pack_start (GTK_BOX (hbox67), labelFilter, TRUE, TRUE, 0);
-  gtk_misc_set_alignment (GTK_MISC (labelFilter), 0, 0.5);
-  p_dialer_data->label_filter_history=labelFilter;
-
-  GtkWidget *labelCounter = gtk_label_new (("1/21"));
-  gtk_widget_show (labelCounter);
-  gtk_box_pack_start (GTK_BOX (hbox67), labelCounter, TRUE, TRUE, 0);
-  gtk_label_set_justify (GTK_LABEL (labelCounter), GTK_JUSTIFY_RIGHT);
-  gtk_misc_set_alignment (GTK_MISC (labelCounter), 0.8, 0.5);
-  p_dialer_data->label_counter_history=labelCounter;
- 
-    g_signal_connect ((gpointer) eventboxTop, "button_release_event",
-                    G_CALLBACK (on_eventboxTop_button_release_event),
-                    p_dialer_data);
-
-  GtkWidget *align=gtk_alignment_new(0,0,1,1);
-  gtk_alignment_set_padding(align, 0, 150, 0, 0); //FIXME too many numbers has to be retrieved from style
-  
-  GtkWidget *scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
-  gtk_widget_show (scrolledwindow);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
- 
-  treeviewHistory = gtk_tree_view_new ();
-  gtk_container_add (GTK_CONTAINER (align), scrolledwindow);
-  gtk_container_add (GTK_CONTAINER (scrolledwindow), treeviewHistory);
-
-  gtk_widget_show (treeviewHistory);
-  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeviewHistory), FALSE);
-  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeviewHistory), FALSE);
-//   gtk_misc_set_alignment (GTK_MISC (treeviewHistory), 0.5, 0.5);
-  gtk_box_pack_start(GTK_BOX(vbox),align,TRUE,TRUE,0);
-
-
-  gtk_widget_set_name(treeviewHistory,"gtktreeview-black");
-  p_dialer_data->treeview_history=treeviewHistory;
-   history_build_history_list_view(p_dialer_data);
-  gtk_widget_set_size_request (scrolledwindow, -1, 400);    
-//  gtk_misc_set_alignment (GTK_MISC (treeviewHistory),1,0.1);
-
-
-  g_signal_connect ((gpointer) treeviewHistory, "cursor_changed",
-                    G_CALLBACK (on_treeviewHistory_cursor_changed),
-                    p_dialer_data);
-
-
-  return vbox;
-}
-
-
-/**
- * @brief re-filter the treeview widget by current history type,a callback when the history treeview refreshes
- *
- * this callback will be called for every treemodel iters,whenever the treeview filter is refreshing
- *
- * @param model GtkTreeModel *, the background database of the treeview
- * @param iter GtkTreeIter *, the iterator of every item of the model.
- * @param  data gpointer , of no use currently
- * @return boolean
- * @retval TRUE means the iter will be displayed
- * @retval  FALSE means the iter will not be displayed
- */
-static gboolean history_view_filter_visible_function(GtkTreeModel *model,GtkTreeIter *iter,gpointer data)
-{
-	MOKO_DIALER_APP_DATA* p_dialer_data=(MOKO_DIALER_APP_DATA* )data;
-	HISTORY_TYPE type;
-	if(p_dialer_data->g_history_filter_type==ALL)
-		return TRUE;
-	gtk_tree_model_get(model,iter,COLUMN_TYPE,&type,-1);
-	if(type==p_dialer_data->g_history_filter_type)
-		return TRUE;
-	else
-		return FALSE;
-}
-
-
-
-/**
- * @brief find the treeview in the window, fill-in the data and show it on the screen.
- *
- *
- *
- * @param window GtkWidget* the window which contains the history treeview. but it's not necessarilly
- *to be a window, any widget that can help to lookup the treeview will be OK.
- * @return 
- * @retval 0 error occured
- * @retval 1 everything is OK
- */
-
-gint history_build_history_list_view(MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-	GtkListStore * list_store;
-	
-	GtkTreeIter iter;
-	HISTORY_ENTRY * entry;
-	
-	//copied
-	GtkTreeViewColumn   *col;
-  	GtkCellRenderer     *renderer;
-  	
-  	//GtkTreeModel        *model;
-	GtkWidget           *contactview=NULL;
-	
-	//DBG_ENTER();
-	//DBG_MESSAGE("History:%d",g_historylist.length);
-	
-	//DBG_TRACE();
-  p_dialer_data->g_history_filter_type=ALL;
-  contactview = p_dialer_data->treeview_history;
-
-  if(contactview == NULL)
-    return 0;
-//pack image and label
-  col = gtk_tree_view_column_new ();
-
-  gtk_tree_view_column_set_title (col, ("Title"));
-  gtk_tree_view_column_set_resizable (col, TRUE);
- 
-	
-  
-  renderer = gtk_cell_renderer_pixbuf_new ();
-  gtk_tree_view_column_pack_start (col, renderer, FALSE);
-  gtk_tree_view_column_set_attributes (col, renderer, 
-  "pixbuf",COLUMN_TYPEICON,NULL);
-
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_tree_view_column_pack_start (col, renderer, FALSE);
-  gtk_tree_view_column_set_attributes(col, renderer, 
-  "text",COLUMN_TIME,NULL);
- 
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_tree_view_column_pack_start (col, renderer, FALSE);
-  gtk_tree_view_column_set_attributes(col, renderer, 
-  "text",COLUMN_SEPRATE,NULL);
- 
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_tree_view_column_pack_start (col, renderer, TRUE);
-  gtk_tree_view_column_set_attributes(col, renderer, 
-  "text",COLUMN_NAME_NUMBER,NULL);
-
-
-   gtk_tree_view_append_column (GTK_TREE_VIEW (contactview), col);
-
-
-	entry=p_dialer_data->g_historylist.first;
-	
-	list_store=gtk_list_store_new(N_COLUMN,	G_TYPE_INT,GDK_TYPE_PIXBUF,
-					G_TYPE_STRING,	G_TYPE_STRING,	
-					G_TYPE_STRING,	G_TYPE_INT,G_TYPE_POINTER,G_TYPE_INT,-1);
-	//we will use a filter to facilitate the filtering in treeview without rebuilding the database.				
-	p_dialer_data->g_list_store_filter=gtk_tree_model_filter_new(GTK_TREE_MODEL(list_store),NULL);
-	gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(p_dialer_data->g_list_store_filter),
-	history_view_filter_visible_function,p_dialer_data,NULL);
-
-//load the three icons to memory.
-GError *error=NULL;	
-		p_dialer_data->g_iconReceived=create_pixbuf("received.png",&error);
-  		if(error)
-				{
-					DBG_WARN("Cound not load icon :%s",error->message);
-					g_error_free(error);
-					p_dialer_data->g_iconReceived=NULL;
-					error=NULL;
-				}
-
-		p_dialer_data->g_iconDialed=create_pixbuf("dialed.png",&error);
-		if(error)
-				{
-					DBG_WARN("Cound not load icon :%s",error->message);
-					g_error_free(error);
-					p_dialer_data->g_iconDialed=NULL;
-					error=NULL;
-				}
-
-  
-		 p_dialer_data->g_iconMissed=create_pixbuf("missed.png",&error);
-		if(error)
-				{
-					DBG_WARN("Cound not load icon :%s",error->message);
-					g_error_free(error);
-					p_dialer_data->g_iconMissed=NULL;
-					error=NULL;
-				}
-
-
-	while(entry)
-	{
-		//DBG_MESSAGE(entry->number);
-		gtk_list_store_append(list_store,&iter);
-		gtk_list_store_set(list_store,&iter,COLUMN_TYPE,entry->type,COLUMN_SEPRATE,"--",
-		COLUMN_TIME,entry->time,COLUMN_DURATION,entry->durationsec,COLUMN_ENTRYPOINTER,entry,COLUMN_HASNAME,0,-1);
-		if(entry->name==0)
-		{
-		//DBG_MESSAGE(entry->number);
-		gtk_list_store_set(list_store,&iter,COLUMN_NAME_NUMBER,entry->number,-1);
-		gtk_list_store_set(list_store,&iter,COLUMN_HASNAME,0,-1);
-		}
-		else
-		{
-		gtk_list_store_set(list_store,&iter,COLUMN_NAME_NUMBER,entry->name,-1);		
-		gtk_list_store_set(list_store,&iter,COLUMN_HASNAME,1,-1);
-		}
-		switch(entry->type)
-		{
-			case INCOMING:
-			{
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,p_dialer_data->g_iconReceived,-1);		
-			//	icon=gdk_pixbuf_new_from_file("./received.png",&error);
-				break;
-			}
-			case OUTGOING:
-			{//	icon=gdk_pixbuf_new_from_file("./dialed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,p_dialer_data->g_iconDialed,-1);		
-				break;
-			}
-			case MISSED:
-			{	//icon=gdk_pixbuf_new_from_file("./missed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,p_dialer_data->g_iconMissed,-1);		
-				break;
-			}
-
-			default:
-			
-			{	//icon=gdk_pixbuf_new_from_file("./missed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,p_dialer_data->g_iconMissed,-1);		
-				break;
-			}
-		}
-						
-
-		
-		entry=entry->next;
-	}
-	
-  gtk_tree_view_set_model (GTK_TREE_VIEW(contactview),GTK_TREE_MODEL(p_dialer_data->g_list_store_filter));
-
-  g_object_unref (list_store);
-
-  return 1;
-}
-
-
-/**
- * @brief update the counter display widget - labelCounter
- *
- * @param widget GtkWidget*, any widget in the same window with treeviewHistory and labelCounter
- *
- * @return 1
- */
-gint history_update_counter(MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-DBG_ENTER();
-GtkTreeIter iter;
-GtkTreeModel* model;
-GtkTreeSelection * selection;
-GtkTreePath *path;
-GtkTreeView * treeview;
-int count=0;
-int nth=0;
-char * pathstring;
-char display[10];
-	
-treeview=GTK_TREE_VIEW(p_dialer_data->treeview_history);
-if(!p_dialer_data->treeview_history)
-{
-DBG_WARN("COUNTER NOT READY ");
-return 0;
-}
-
-
-model=gtk_tree_view_get_model(treeview);	
-
-count=gtk_tree_model_iter_n_children(model,NULL);
-	
-selection = gtk_tree_view_get_selection(treeview);
- 
-if (!gtk_tree_selection_get_selected(selection, &model, &iter))
-{
-	nth=0;
-}
-else
-{
-path=gtk_tree_model_get_path(model,&iter);
-pathstring=gtk_tree_path_to_string(path);
-nth=atoi(pathstring)+1;
-gtk_tree_path_free(path);	
-
-}
-	
-GtkWidget *labelcounter;
-labelcounter=p_dialer_data->label_counter_history;
-sprintf(display,"%d/%d",nth,count);
-gtk_label_set_text(GTK_LABEL(labelcounter),display);
-return 1;	
-
-}
-
-GtkWidget* history_create_menu_history (MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-if(!p_dialer_data->menu_history)
-{
-  GtkWidget *menu_history;
-  GtkWidget *all_calls;
-  GtkWidget *imageAll;
-  GtkWidget *separator1;
-  GtkWidget *missed_calls;
-  GtkWidget *imageMissed;
-  GtkWidget *separator3;
-  GtkWidget *dialed_calls;
-  GtkWidget *imageDialed;
-  GtkWidget *separator2;
-  GtkWidget *received_calls;
-  GtkWidget *imageReceived;
-
-  menu_history = gtk_menu_new ();
-  gtk_container_set_border_width (GTK_CONTAINER (menu_history), 2);
-
-  all_calls = gtk_image_menu_item_new_with_mnemonic (("Calls All"));
-  gtk_widget_show (all_calls);
-  gtk_container_add (GTK_CONTAINER (menu_history), all_calls);
-  gtk_widget_set_size_request (all_calls, 250, 60);
-
-
-  imageAll =file_new_image_from_relative_path("all.png");
-  gtk_widget_show (imageAll);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (all_calls), imageAll);
-
-  separator1 = gtk_separator_menu_item_new ();
-  gtk_widget_show (separator1);
-  gtk_container_add (GTK_CONTAINER (menu_history), separator1);
-  gtk_widget_set_size_request (separator1, 120, -1);
-  gtk_widget_set_sensitive (separator1, FALSE);
-
-  missed_calls = gtk_image_menu_item_new_with_mnemonic (("Calls Missed "));
-  gtk_widget_show (missed_calls);
-  gtk_container_add (GTK_CONTAINER (menu_history), missed_calls);
-  gtk_widget_set_size_request (missed_calls, 120, 60);
-
-  //imageMissed = gtk_image_new_from_stock ("gtk-goto-bottom", GTK_ICON_SIZE_MENU);
-  imageMissed =file_new_image_from_relative_path("missed.png");
-  
-  gtk_widget_show (imageMissed);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (missed_calls), imageMissed);
-
-  separator3 = gtk_separator_menu_item_new ();
-  gtk_widget_show (separator3);
-  gtk_container_add (GTK_CONTAINER (menu_history), separator3);
-  gtk_widget_set_size_request (separator3, 120, -1);
-  gtk_widget_set_sensitive (separator3, FALSE);
-
-  dialed_calls = gtk_image_menu_item_new_with_mnemonic (("Calls Dialed"));
-  gtk_widget_show (dialed_calls);
-  gtk_container_add (GTK_CONTAINER (menu_history), dialed_calls);
-  gtk_widget_set_size_request (dialed_calls, 120, 60);
-
- // imageDialed = gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_MENU);
-  imageDialed =file_new_image_from_relative_path("dialed.png");
-  gtk_widget_show (imageDialed);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (dialed_calls), imageDialed);
-
-  separator2 = gtk_separator_menu_item_new ();
-  gtk_widget_show (separator2);
-  gtk_container_add (GTK_CONTAINER (menu_history), separator2);
-  gtk_widget_set_size_request (separator2, 120, -1);
-  gtk_widget_set_sensitive (separator2, FALSE);
-
-  received_calls = gtk_image_menu_item_new_with_mnemonic (("Calls Received "));
-  gtk_widget_show (received_calls);
-  gtk_container_add (GTK_CONTAINER (menu_history), received_calls);
-  gtk_widget_set_size_request (received_calls, 120, 60);
-
-//  imageReceived = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_MENU);
- imageReceived=file_new_image_from_relative_path("received.png");
-  gtk_widget_show (imageReceived);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (received_calls), imageReceived);
-
-  g_signal_connect ((gpointer) all_calls, "activate",
-                    G_CALLBACK (on_all_calls_activate),
-                    p_dialer_data);
-  g_signal_connect ((gpointer) missed_calls, "activate",
-                    G_CALLBACK (on_missed_calls_activate),
-                    p_dialer_data);
-  g_signal_connect ((gpointer) dialed_calls, "activate",
-                    G_CALLBACK (on_dialed_calls_activate),
-                    p_dialer_data);
-  g_signal_connect ((gpointer) received_calls, "activate",
-                    G_CALLBACK (on_received_calls_activate),
-                    p_dialer_data);
-
-p_dialer_data->menu_history=menu_history;
-  return menu_history;
-}
-else
-	return p_dialer_data->menu_history;
-}
-
-
-
-/**
- * @brief add an entry to the history treeview
- *
- *
- *
- * @param entry HISTORY_ENTRY *, the history entry to be added to the treeview.
- * @return 
- * @retval 0 error occured
- * @retval 1 everything is OK
- */
-gint history_list_view_add(MOKO_DIALER_APP_DATA* appdata,HISTORY_ENTRY * entry)
-{
-DBG_ENTER();
-if(entry==0)
-	{
-		DBG_ERROR("THE ENTRY IS ZERO");
-		return 0;
-	}
-
-if(appdata->treeview_history==0)
-{
-		DBG_WARN("not ready");
-		return 0;
-
-}
-	//
-GtkTreeIter iter; //iter of the filter store
-GtkTreeModel* model;
-GtkListStore* list_store;
-GtkTreeView* treeview;
-
-treeview=GTK_TREE_VIEW(appdata->treeview_history);
-
-model=gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(appdata->g_list_store_filter));	
-
-list_store=GTK_LIST_STORE(model);
-	//
-	
-	
-	//DBG_MESSAGE(entry->number);
-		gtk_list_store_insert(list_store,&iter,0);
-		gtk_list_store_set(list_store,&iter,COLUMN_TYPE,entry->type,COLUMN_SEPRATE,"--",
-		COLUMN_TIME,entry->time,COLUMN_DURATION,entry->durationsec,COLUMN_ENTRYPOINTER,entry,COLUMN_HASNAME,0,-1);
-		if(entry->name==0)
-		{
-		//DBG_MESSAGE(entry->number);
-		gtk_list_store_set(list_store,&iter,COLUMN_NAME_NUMBER,entry->number,-1);
-		gtk_list_store_set(list_store,&iter,COLUMN_HASNAME,0,-1);
-		}
-		else
-		{
-		gtk_list_store_set(list_store,&iter,COLUMN_NAME_NUMBER,entry->name,-1);		
-		gtk_list_store_set(list_store,&iter,COLUMN_HASNAME,1,-1);
-		}
-		switch(entry->type)
-		{
-			case INCOMING:
-			{
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,appdata->g_iconReceived,-1);		
-			//	icon=gdk_pixbuf_new_from_file("./received.png",&error);
-				break;
-			}
-			case OUTGOING:
-			{//	icon=gdk_pixbuf_new_from_file("./dialed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,appdata->g_iconDialed,-1);		
-				break;
-			}
-			case MISSED:
-			{	//icon=gdk_pixbuf_new_from_file("./missed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,appdata->g_iconMissed,-1);		
-				break;
-			}
-
-			default:
-			
-			{	//icon=gdk_pixbuf_new_from_file("./missed.png",&error);
-				gtk_list_store_set(list_store,&iter,COLUMN_TYPEICON,appdata->g_iconMissed,-1);		
-				break;
-			}
-		}
-  		history_update_counter(appdata); 
-  		return 1;	
-}
-
-
-gint add_histroy_entry(MOKO_DIALER_APP_DATA* appdata,HISTORY_TYPE type,const char *name,const char *number,const char *id,  char *time,char *date,int durationsec)
-{
-//DBG_ENTER();
-
-	//DBG_MESSAGE("History add:%s,%s,%s,%s,%s,%d",name,number,picpath,time,date,durationsec);
- HISTORY_ENTRY * pentry=history_add_entry(&(appdata->g_historylist),type,name,number,id,time,date,durationsec);	
- return history_list_view_add(appdata,pentry);	
-}
-
-
+/*   openmoko-dialer-window-talking.c
+ *
+ *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
+ *
+ *  Copyright (C) 2006 FIC Shanghai Lab
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Public License as published by
+ *  the Free Software Foundation; version 2 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
+ */
+
+#include <libmokoui/moko-finger-tool-box.h>
+#include <libmokoui/moko-finger-window.h>
+#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
+
+#include <gtk/gtkalignment.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtktreemodelfilter.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtkimagemenuitem.h>
+#include <gtk/gtkmenu.h>
+
+#include "common.h"
+#include "contacts.h"
+#include "openmoko-dialer-main.h"
+#include "moko-dialer-status.h"
+#include "history.h"
+#include "openmoko-dialer-window-history.h"
+
+
+/* function declarations */
+
+gint history_update_counter (MOKO_DIALER_APP_DATA * p_dialer_data);
+
+
+/**
+ * @brief re-filter the treeview widget by the history type
+ *
+ * 
+ *
+ * @param type HISTORY_TYPE, indicating only the history items of that type will be displayed
+ * @return 1
+ * @retval
+ */
+
+int
+history_view_change_filter (MOKO_DIALER_APP_DATA * p_dialer_data,
+                            HISTORY_TYPE type)
+{
+  GtkTreePath *path;
+  DBG_TRACE ();
+  p_dialer_data->g_history_filter_type = type;
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER
+                                  (p_dialer_data->g_list_store_filter));
+
+  path = gtk_tree_path_new_first ();
+  gtk_tree_view_set_cursor (GTK_TREE_VIEW (p_dialer_data->treeview_history),
+                            path, 0, 0);
+  gtk_tree_path_free (path);
+
+
+  return 1;
+}
+
+void
+on_all_calls_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) user_data;
+  GtkWidget *label = p_dialer_data->label_filter_history;
+  gtk_label_set_text (GTK_LABEL (label), "All");
+  history_view_change_filter (p_dialer_data, ALL);
+  history_update_counter (p_dialer_data);
+}
+
+
+void
+on_missed_calls_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) user_data;
+  GtkWidget *label = p_dialer_data->label_filter_history;
+  gtk_label_set_text (GTK_LABEL (label), "Missed");
+  history_view_change_filter (p_dialer_data, MISSED);
+  history_update_counter (p_dialer_data);
+}
+
+
+void
+on_dialed_calls_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) user_data;
+  GtkWidget *label = p_dialer_data->label_filter_history;
+  gtk_label_set_text (GTK_LABEL (label), "Dialed");
+  history_view_change_filter (p_dialer_data, OUTGOING);
+  history_update_counter (p_dialer_data);
+}
+
+
+void
+on_received_calls_activate (GtkMenuItem * menuitem, gpointer user_data)
+{
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) user_data;
+  GtkWidget *label = p_dialer_data->label_filter_history;
+  gtk_label_set_text (GTK_LABEL (label), "Received");
+  history_view_change_filter (p_dialer_data, INCOMING);
+  history_update_counter (p_dialer_data);
+}
+
+gboolean
+on_eventboxTop_button_release_event (GtkWidget * widget,
+                                     GdkEventButton * event,
+                                     MOKO_DIALER_APP_DATA * appdata)
+{
+
+  gtk_menu_popup (GTK_MENU (appdata->menu_history), 0, 0, 0, 0, 0, 0);
+
+  return FALSE;
+}
+
+void
+openmoko_history_wheel_press_left_up_cb (GtkWidget * widget,
+                                         MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GtkTreePath *path;
+  GtkTreeView *treeview;
+  //DBG_ENTER();
+
+  treeview = GTK_TREE_VIEW (appdata->treeview_history);
+  if (treeview == 0)
+    return;
+
+  selection = gtk_tree_view_get_selection (treeview);
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    DBG_WARN ("no current selection\n");
+    return;
+  }
+  path = gtk_tree_model_get_path (model, &iter);
+  if (!gtk_tree_path_prev (path))
+  {
+    DBG_WARN ("no prev for the top level\n");
+    gtk_tree_path_free (path);
+    return;
+  }
+  gtk_tree_view_set_cursor (treeview, path, 0, 0);
+  return;
+
+
+}
+
+void
+openmoko_history_wheel_press_right_down_cb (GtkWidget * widget,
+                                            MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  GtkTreePath *path;
+  GtkTreeView *treeview;
+  //DBG_ENTER();
+  treeview = GTK_TREE_VIEW (appdata->treeview_history);
+  if (treeview == 0)
+    return;
+
+  selection = gtk_tree_view_get_selection (treeview);
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    DBG_WARN ("no current selection\n");
+    return;
+  }
+  if (gtk_tree_model_iter_next (model, &iter))
+  {
+    path = gtk_tree_model_get_path (model, &iter);
+    gtk_tree_view_set_cursor (treeview, path, 0, 0);
+    gtk_tree_path_free (path);
+    return;
+  }
+
+  return;
+}
+
+
+void
+cb_tool_button_history_delete_clicked (GtkButton * button,
+                                       MOKO_DIALER_APP_DATA * appdata)
+{
+  GtkTreeIter iter;             //iter of the filter store
+  GtkTreeIter iter0;            //iter of the back store
+  GtkTreeModel *model;
+  GtkTreeModel *model0;
+  GtkTreeSelection *selection;
+  GtkTreeView *treeview;
+  GtkTreePath *path;
+  treeview = GTK_TREE_VIEW (appdata->treeview_history);
+  selection = gtk_tree_view_get_selection (treeview);
+
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    return;
+  }
+
+  if (appdata->g_currentselected)
+  {
+    DBG_MESSAGE ("to delete %s", appdata->g_currentselected->number);
+    history_delete_entry (&(appdata->g_historylist),
+                          appdata->g_currentselected);
+  }
+
+  path = gtk_tree_model_get_path (model, &iter);
+
+
+  model0 = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
+
+
+  gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER
+                                                    (model), &iter0, &iter);
+
+  gtk_list_store_remove (GTK_LIST_STORE (model0), &iter0);
+
+
+  gtk_tree_view_set_cursor (treeview, path, 0, 0);
+
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    if (!gtk_tree_path_prev (path))
+    {
+      gtk_tree_view_set_cursor (treeview, path, 0, 0);
+      DBG_WARN ("history is empty now!");
+      history_update_counter (appdata);
+    }
+    else
+    {
+      gtk_tree_view_set_cursor (treeview, path, 0, 0);
+    }
+    //we deleted the last one.
+
+  }
+
+  gtk_tree_path_free (path);
+
+  return;
+
+  DBG_ENTER ();
+}
+
+void
+cb_tool_button_history_call_clicked (GtkButton * button,
+                                     MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+
+
+}
+
+void
+cb_tool_button_history_sms_clicked (GtkButton * button,
+                                    MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+
+
+}
+
+void
+cb_tool_button_history_back_clicked (GtkButton * button,
+                                     MOKO_DIALER_APP_DATA * appdata)
+{
+  gtk_widget_hide (appdata->window_history);
+
+}
+
+
+void
+on_window_history_hide (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+
+  gtk_widget_hide (appdata->wheel_history);
+  gtk_widget_hide (appdata->toolbox_history);
+
+}
+
+void
+on_window_history_show (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+  if (appdata->wheel_history)
+    gtk_widget_show (appdata->wheel_history);
+
+  if (appdata->toolbox_history)
+    gtk_widget_show (appdata->toolbox_history);
+
+  if (appdata->history_need_to_update)
+  {
+    DBG_MESSAGE ("NEED TO UPDATE HISTORY");
+  }
+
+  DBG_LEAVE ();
+}
+
+
+
+
+gint
+window_history_init (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+
+  DBG_ENTER ();
+
+
+  if (p_dialer_data->window_history == 0)
+  {
+
+    history_create_menu_history (p_dialer_data);
+
+    MokoFingerWindow *window = NULL;
+    MokoFingerToolBox *tools = NULL;
+    GtkWidget *button;
+    GtkWidget *image;
+
+//now the container--window
+    window = MOKO_FINGER_WINDOW (moko_finger_window_new ());
+    p_dialer_data->window_history = GTK_WIDGET (window);
+
+
+    moko_finger_window_set_contents (window,
+                                     create_window_history_content
+                                     (p_dialer_data));
+
+    g_signal_connect ((gpointer) window, "show",
+                      G_CALLBACK (on_window_history_show), p_dialer_data);
+    g_signal_connect ((gpointer) window, "hide",
+                      G_CALLBACK (on_window_history_hide), p_dialer_data);
+
+
+
+    gtk_widget_show_all (GTK_WIDGET (window));
+
+//the gtk_widget_show_all is really bad, cause i have to call it and then hide some widgets.
+
+
+    //now the wheel and tool box, why should the wheel and toolbox created after the gtk_widget_show_all???
+    gtk_widget_show (GTK_WIDGET (moko_finger_window_get_wheel (window)));
+
+    g_signal_connect (G_OBJECT (moko_finger_window_get_wheel (window)),
+                      "press_left_up",
+                      G_CALLBACK (openmoko_history_wheel_press_left_up_cb),
+                      p_dialer_data);
+    g_signal_connect (G_OBJECT (moko_finger_window_get_wheel (window)),
+                      "press_right_down",
+                      G_CALLBACK (openmoko_history_wheel_press_right_down_cb),
+                      p_dialer_data);
+
+
+
+    tools = moko_finger_window_get_toolbox (window);
+
+    /* TODO: remove the GTK_WIDGET() casts when libmokoui is fixed */
+    button =
+      GTK_WIDGET (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("phone.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON
+                                                            (button), image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_history_call_clicked),
+                      p_dialer_data);
+
+    button =
+      GTK_WIDGET (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("sms.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON
+                                                            (button), image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_history_sms_clicked),
+                      p_dialer_data);
+
+
+    button =
+      GTK_WIDGET (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("delete.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON
+                                                            (button), image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_history_delete_clicked),
+                      p_dialer_data);
+    gtk_widget_show (GTK_WIDGET (tools));
+
+    button =
+      GTK_WIDGET (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("tony.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON
+                                                            (button), image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_history_back_clicked),
+                      p_dialer_data);
+    gtk_widget_show (GTK_WIDGET (tools));
+
+    p_dialer_data->wheel_history = GTK_WIDGET (moko_finger_window_get_wheel (window));
+    p_dialer_data->toolbox_history = GTK_WIDGET (tools);
+
+    gtk_widget_hide (GTK_WIDGET (window));
+
+    DBG_LEAVE ();
+  }
+  else
+  {
+    //here we have to refresh it.
+    DBG_TRACE ();
+  }
+  return 1;
+}
+
+void
+on_treeviewHistory_cursor_changed (GtkTreeView * treeview, gpointer user_data)
+{
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  GtkTreeSelection *selection;
+  HISTORY_ENTRY *p;
+  int hasname;
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) user_data;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (p_dialer_data->treeview_history));
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    p_dialer_data->g_currentselected = 0;
+    return;
+  }
+
+  gtk_tree_model_get (model, &iter, COLUMN_ENTRYPOINTER, &p, -1);
+
+  p_dialer_data->g_currentselected = p;
+
+  gtk_tree_model_get (model, &iter, COLUMN_HASNAME, &hasname, -1);
+  history_update_counter (p_dialer_data);
+
+}
+
+
+
+GtkWidget *
+create_window_history_content (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+
+  GtkWidget *treeviewHistory;
+  GtkWidget *vbox = gtk_vbox_new (FALSE, 0);
+  //FIRST of all, the top title area;
+  GtkWidget *eventboxTop = gtk_event_box_new ();
+  gtk_widget_show (eventboxTop);
+  gtk_box_pack_start (GTK_BOX (vbox), eventboxTop, FALSE, FALSE, 5);
+  gtk_widget_set_size_request (eventboxTop, 480, 64);
+  gtk_widget_set_name (eventboxTop, "gtkeventbox-black");
+
+  GtkWidget *hbox67 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox67);
+  gtk_container_add (GTK_CONTAINER (eventboxTop), hbox67);
+
+  GtkWidget *eventboxLeftTop = gtk_event_box_new ();
+  gtk_widget_show (eventboxLeftTop);
+  gtk_box_pack_start (GTK_BOX (hbox67), eventboxLeftTop, FALSE, TRUE, 0);
+  gtk_widget_set_name (eventboxLeftTop, "gtkeventbox-black");
+
+
+
+  GtkWidget *imageLeftMenu = file_new_image_from_relative_path ("all.png");
+  gtk_widget_show (imageLeftMenu);
+  gtk_container_add (GTK_CONTAINER (eventboxLeftTop), imageLeftMenu);
+
+  GtkWidget *labelHistoryTitle = gtk_label_new (("History-"));
+  gtk_widget_show (labelHistoryTitle);
+  gtk_box_pack_start (GTK_BOX (hbox67), labelHistoryTitle, FALSE, FALSE, 0);
+  gtk_widget_set_size_request (labelHistoryTitle, 221, -1);
+  gtk_label_set_justify (GTK_LABEL (labelHistoryTitle), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (labelHistoryTitle), 1, 0.5);
+
+  GtkWidget *labelFilter = gtk_label_new (("All"));
+  gtk_widget_show (labelFilter);
+  gtk_box_pack_start (GTK_BOX (hbox67), labelFilter, TRUE, TRUE, 0);
+  gtk_misc_set_alignment (GTK_MISC (labelFilter), 0, 0.5);
+  p_dialer_data->label_filter_history = labelFilter;
+
+  GtkWidget *labelCounter = gtk_label_new (("1/21"));
+  gtk_widget_show (labelCounter);
+  gtk_box_pack_start (GTK_BOX (hbox67), labelCounter, TRUE, TRUE, 0);
+  gtk_label_set_justify (GTK_LABEL (labelCounter), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (labelCounter), 0.8, 0.5);
+  p_dialer_data->label_counter_history = labelCounter;
+
+  g_signal_connect ((gpointer) eventboxTop, "button_release_event",
+                    G_CALLBACK (on_eventboxTop_button_release_event),
+                    p_dialer_data);
+
+  GtkWidget *align = gtk_alignment_new (0, 0, 1, 1);
+  gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 150, 0, 0);      //FIXME too many numbers has to be retrieved from style
+
+  GtkWidget *scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scrolledwindow);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+                                  GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+
+  treeviewHistory = gtk_tree_view_new ();
+  gtk_container_add (GTK_CONTAINER (align), scrolledwindow);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow), treeviewHistory);
+
+  gtk_widget_show (treeviewHistory);
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeviewHistory), FALSE);
+  gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeviewHistory), FALSE);
+//   gtk_misc_set_alignment (GTK_MISC (treeviewHistory), 0.5, 0.5);
+  gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0);
+
+
+  gtk_widget_set_name (treeviewHistory, "gtktreeview-black");
+  p_dialer_data->treeview_history = treeviewHistory;
+  history_build_history_list_view (p_dialer_data);
+  gtk_widget_set_size_request (scrolledwindow, -1, 400);
+//  gtk_misc_set_alignment (GTK_MISC (treeviewHistory),1,0.1);
+
+
+  g_signal_connect ((gpointer) treeviewHistory, "cursor_changed",
+                    G_CALLBACK (on_treeviewHistory_cursor_changed),
+                    p_dialer_data);
+
+
+  return vbox;
+}
+
+
+/**
+ * @brief re-filter the treeview widget by current history type,a callback when the history treeview refreshes
+ *
+ * this callback will be called for every treemodel iters,whenever the treeview filter is refreshing
+ *
+ * @param model GtkTreeModel *, the background database of the treeview
+ * @param iter GtkTreeIter *, the iterator of every item of the model.
+ * @param  data gpointer , of no use currently
+ * @return boolean
+ * @retval TRUE means the iter will be displayed
+ * @retval  FALSE means the iter will not be displayed
+ */
+static gboolean
+history_view_filter_visible_function (GtkTreeModel * model,
+                                      GtkTreeIter * iter, gpointer data)
+{
+  MOKO_DIALER_APP_DATA *p_dialer_data = (MOKO_DIALER_APP_DATA *) data;
+  HISTORY_TYPE type;
+  if (p_dialer_data->g_history_filter_type == ALL)
+    return TRUE;
+  gtk_tree_model_get (model, iter, COLUMN_TYPE, &type, -1);
+  if (type == p_dialer_data->g_history_filter_type)
+    return TRUE;
+  else
+    return FALSE;
+}
+
+
+
+/**
+ * @brief find the treeview in the window, fill-in the data and show it on the screen.
+ *
+ *
+ *
+ * @param window GtkWidget* the window which contains the history treeview. but it's not necessarilly
+ *to be a window, any widget that can help to lookup the treeview will be OK.
+ * @return 
+ * @retval 0 error occured
+ * @retval 1 everything is OK
+ */
+
+gint
+history_build_history_list_view (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+  GtkListStore *list_store;
+
+  GtkTreeIter iter;
+  HISTORY_ENTRY *entry;
+
+  //copied
+  GtkTreeViewColumn *col;
+  GtkCellRenderer *renderer;
+
+  //GtkTreeModel        *model;
+  GtkWidget *contactview = NULL;
+
+  //DBG_ENTER();
+  //DBG_MESSAGE("History:%d",g_historylist.length);
+
+  //DBG_TRACE();
+  p_dialer_data->g_history_filter_type = ALL;
+  contactview = p_dialer_data->treeview_history;
+
+  if (contactview == NULL)
+    return 0;
+//pack image and label
+  col = gtk_tree_view_column_new ();
+
+  gtk_tree_view_column_set_title (col, ("Title"));
+  gtk_tree_view_column_set_resizable (col, TRUE);
+
+
+
+  renderer = gtk_cell_renderer_pixbuf_new ();
+  gtk_tree_view_column_pack_start (col, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (col, renderer,
+                                       "pixbuf", COLUMN_TYPEICON, NULL);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (col, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (col, renderer,
+                                       "text", COLUMN_TIME, NULL);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (col, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (col, renderer,
+                                       "text", COLUMN_SEPRATE, NULL);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_pack_start (col, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (col, renderer,
+                                       "text", COLUMN_NAME_NUMBER, NULL);
+
+
+  gtk_tree_view_append_column (GTK_TREE_VIEW (contactview), col);
+
+
+  entry = p_dialer_data->g_historylist.first;
+
+  list_store = gtk_list_store_new (N_COLUMN, G_TYPE_INT, GDK_TYPE_PIXBUF,
+                                   G_TYPE_STRING, G_TYPE_STRING,
+                                   G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER,
+                                   G_TYPE_INT, -1);
+  //we will use a filter to facilitate the filtering in treeview without rebuilding the database.                         
+  p_dialer_data->g_list_store_filter =
+    GTK_LIST_STORE (gtk_tree_model_filter_new (GTK_TREE_MODEL (list_store), NULL));
+  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER
+                                          (p_dialer_data->
+                                           g_list_store_filter),
+                                          history_view_filter_visible_function,
+                                          p_dialer_data, NULL);
+
+  //load the three icons to memory.
+
+  // GError *error = NULL;
+  p_dialer_data->g_iconReceived = create_pixbuf ("received.png");
+
+  /* FIXME: error handling hasn't been implemented yet!
+  p_dialer_data->g_iconReceived = create_pixbuf ("received.png", &error);
+  if (error)
+  {
+    DBG_WARN ("Cound not load icon :%s", error->message);
+    g_error_free (error);
+    p_dialer_data->g_iconReceived = NULL;
+    error = NULL;
+  }
+  */
+
+  p_dialer_data->g_iconDialed = create_pixbuf ("dialed.png");
+  /* FIXME: error handling hasn't been implemented yet!
+  p_dialer_data->g_iconDialed = create_pixbuf ("dialed.png", &error);
+  if (error)
+  {
+    DBG_WARN ("Cound not load icon :%s", error->message);
+    g_error_free (error);
+    p_dialer_data->g_iconDialed = NULL;
+    error = NULL;
+  }
+  */
+
+  p_dialer_data->g_iconMissed = create_pixbuf ("missed.png");
+  /* FIXME: error handling hasn't been implemented yet!
+  p_dialer_data->g_iconMissed = create_pixbuf ("missed.png", &error);
+  if (error)
+  {
+    DBG_WARN ("Cound not load icon :%s", error->message);
+    g_error_free (error);
+    p_dialer_data->g_iconMissed = NULL;
+    error = NULL;
+  }
+  */
+
+  while (entry)
+  {
+    //DBG_MESSAGE(entry->number);
+    gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, COLUMN_TYPE, entry->type,
+                        COLUMN_SEPRATE, "--", COLUMN_TIME, entry->time,
+                        COLUMN_DURATION, entry->durationsec,
+                        COLUMN_ENTRYPOINTER, entry, COLUMN_HASNAME, 0, -1);
+    if (entry->name == 0)
+    {
+      //DBG_MESSAGE(entry->number);
+      gtk_list_store_set (list_store, &iter, COLUMN_NAME_NUMBER,
+                          entry->number, -1);
+      gtk_list_store_set (list_store, &iter, COLUMN_HASNAME, 0, -1);
+    }
+    else
+    {
+      gtk_list_store_set (list_store, &iter, COLUMN_NAME_NUMBER, entry->name,
+                          -1);
+      gtk_list_store_set (list_store, &iter, COLUMN_HASNAME, 1, -1);
+    }
+    switch (entry->type)
+    {
+      case INCOMING:
+        {
+          gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                              p_dialer_data->g_iconReceived, -1);
+          //      icon=gdk_pixbuf_new_from_file("./received.png",&error);
+          break;
+        }
+      case OUTGOING:
+        {                       //     icon=gdk_pixbuf_new_from_file("./dialed.png",&error);
+          gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                              p_dialer_data->g_iconDialed, -1);
+          break;
+        }
+      case MISSED:
+        {                       //icon=gdk_pixbuf_new_from_file("./missed.png",&error);
+          gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                              p_dialer_data->g_iconMissed, -1);
+          break;
+        }
+
+      default:
+
+        {                       //icon=gdk_pixbuf_new_from_file("./missed.png",&error);
+          gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                              p_dialer_data->g_iconMissed, -1);
+          break;
+        }
+    }
+
+
+
+    entry = entry->next;
+  }
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (contactview),
+                           GTK_TREE_MODEL (p_dialer_data->
+                                           g_list_store_filter));
+
+  g_object_unref (list_store);
+
+  return 1;
+}
+
+
+/**
+ * @brief update the counter display widget - labelCounter
+ *
+ * @param widget GtkWidget*, any widget in the same window with treeviewHistory and labelCounter
+ *
+ * @return 1
+ */
+gint
+history_update_counter (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+  DBG_ENTER ();
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  GtkTreeSelection *selection;
+  GtkTreePath *path;
+  GtkTreeView *treeview;
+  int count = 0;
+  int nth = 0;
+  char *pathstring;
+  char display[10];
+
+  treeview = GTK_TREE_VIEW (p_dialer_data->treeview_history);
+  if (!p_dialer_data->treeview_history)
+  {
+    DBG_WARN ("COUNTER NOT READY ");
+    return 0;
+  }
+
+
+  model = gtk_tree_view_get_model (treeview);
+
+  count = gtk_tree_model_iter_n_children (model, NULL);
+
+  selection = gtk_tree_view_get_selection (treeview);
+
+  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+  {
+    nth = 0;
+  }
+  else
+  {
+    path = gtk_tree_model_get_path (model, &iter);
+    pathstring = gtk_tree_path_to_string (path);
+    nth = atoi (pathstring) + 1;
+    gtk_tree_path_free (path);
+
+  }
+
+  GtkWidget *labelcounter;
+  labelcounter = p_dialer_data->label_counter_history;
+  sprintf (display, "%d/%d", nth, count);
+  gtk_label_set_text (GTK_LABEL (labelcounter), display);
+  return 1;
+
+}
+
+GtkWidget *
+history_create_menu_history (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+  if (!p_dialer_data->menu_history)
+  {
+    GtkWidget *menu_history;
+    GtkWidget *all_calls;
+    GtkWidget *imageAll;
+    GtkWidget *separator1;
+    GtkWidget *missed_calls;
+    GtkWidget *imageMissed;
+    GtkWidget *separator3;
+    GtkWidget *dialed_calls;
+    GtkWidget *imageDialed;
+    GtkWidget *separator2;
+    GtkWidget *received_calls;
+    GtkWidget *imageReceived;
+
+    menu_history = gtk_menu_new ();
+    gtk_container_set_border_width (GTK_CONTAINER (menu_history), 2);
+
+    all_calls = gtk_image_menu_item_new_with_mnemonic (("Calls All"));
+    gtk_widget_show (all_calls);
+    gtk_container_add (GTK_CONTAINER (menu_history), all_calls);
+    gtk_widget_set_size_request (all_calls, 250, 60);
+
+
+    imageAll = file_new_image_from_relative_path ("all.png");
+    gtk_widget_show (imageAll);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (all_calls), imageAll);
+
+    separator1 = gtk_separator_menu_item_new ();
+    gtk_widget_show (separator1);
+    gtk_container_add (GTK_CONTAINER (menu_history), separator1);
+    gtk_widget_set_size_request (separator1, 120, -1);
+    gtk_widget_set_sensitive (separator1, FALSE);
+
+    missed_calls = gtk_image_menu_item_new_with_mnemonic (("Calls Missed "));
+    gtk_widget_show (missed_calls);
+    gtk_container_add (GTK_CONTAINER (menu_history), missed_calls);
+    gtk_widget_set_size_request (missed_calls, 120, 60);
+
+    //imageMissed = gtk_image_new_from_stock ("gtk-goto-bottom", GTK_ICON_SIZE_MENU);
+    imageMissed = file_new_image_from_relative_path ("missed.png");
+
+    gtk_widget_show (imageMissed);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (missed_calls),
+                                   imageMissed);
+
+    separator3 = gtk_separator_menu_item_new ();
+    gtk_widget_show (separator3);
+    gtk_container_add (GTK_CONTAINER (menu_history), separator3);
+    gtk_widget_set_size_request (separator3, 120, -1);
+    gtk_widget_set_sensitive (separator3, FALSE);
+
+    dialed_calls = gtk_image_menu_item_new_with_mnemonic (("Calls Dialed"));
+    gtk_widget_show (dialed_calls);
+    gtk_container_add (GTK_CONTAINER (menu_history), dialed_calls);
+    gtk_widget_set_size_request (dialed_calls, 120, 60);
+
+    // imageDialed = gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_MENU);
+    imageDialed = file_new_image_from_relative_path ("dialed.png");
+    gtk_widget_show (imageDialed);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (dialed_calls),
+                                   imageDialed);
+
+    separator2 = gtk_separator_menu_item_new ();
+    gtk_widget_show (separator2);
+    gtk_container_add (GTK_CONTAINER (menu_history), separator2);
+    gtk_widget_set_size_request (separator2, 120, -1);
+    gtk_widget_set_sensitive (separator2, FALSE);
+
+    received_calls =
+      gtk_image_menu_item_new_with_mnemonic (("Calls Received "));
+    gtk_widget_show (received_calls);
+    gtk_container_add (GTK_CONTAINER (menu_history), received_calls);
+    gtk_widget_set_size_request (received_calls, 120, 60);
+
+//  imageReceived = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_MENU);
+    imageReceived = file_new_image_from_relative_path ("received.png");
+    gtk_widget_show (imageReceived);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (received_calls),
+                                   imageReceived);
+
+    g_signal_connect ((gpointer) all_calls, "activate",
+                      G_CALLBACK (on_all_calls_activate), p_dialer_data);
+    g_signal_connect ((gpointer) missed_calls, "activate",
+                      G_CALLBACK (on_missed_calls_activate), p_dialer_data);
+    g_signal_connect ((gpointer) dialed_calls, "activate",
+                      G_CALLBACK (on_dialed_calls_activate), p_dialer_data);
+    g_signal_connect ((gpointer) received_calls, "activate",
+                      G_CALLBACK (on_received_calls_activate), p_dialer_data);
+
+    p_dialer_data->menu_history = menu_history;
+    return menu_history;
+  }
+  else
+    return p_dialer_data->menu_history;
+}
+
+
+
+/**
+ * @brief add an entry to the history treeview
+ *
+ *
+ *
+ * @param entry HISTORY_ENTRY *, the history entry to be added to the treeview.
+ * @return 
+ * @retval 0 error occured
+ * @retval 1 everything is OK
+ */
+gint
+history_list_view_add (MOKO_DIALER_APP_DATA * appdata, HISTORY_ENTRY * entry)
+{
+  DBG_ENTER ();
+  if (entry == 0)
+  {
+    DBG_ERROR ("THE ENTRY IS ZERO");
+    return 0;
+  }
+
+  if (appdata->treeview_history == 0)
+  {
+    DBG_WARN ("not ready");
+    return 0;
+
+  }
+  //
+  GtkTreeIter iter;             //iter of the filter store
+  GtkTreeModel *model;
+  GtkListStore *list_store;
+  GtkTreeView *treeview;
+
+  treeview = GTK_TREE_VIEW (appdata->treeview_history);
+
+  model =
+    gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER
+                                     (appdata->g_list_store_filter));
+
+  list_store = GTK_LIST_STORE (model);
+  //
+
+
+  //DBG_MESSAGE(entry->number);
+  gtk_list_store_insert (list_store, &iter, 0);
+  gtk_list_store_set (list_store, &iter, COLUMN_TYPE, entry->type,
+                      COLUMN_SEPRATE, "--", COLUMN_TIME, entry->time,
+                      COLUMN_DURATION, entry->durationsec,
+                      COLUMN_ENTRYPOINTER, entry, COLUMN_HASNAME, 0, -1);
+  if (entry->name == 0)
+  {
+    //DBG_MESSAGE(entry->number);
+    gtk_list_store_set (list_store, &iter, COLUMN_NAME_NUMBER, entry->number,
+                        -1);
+    gtk_list_store_set (list_store, &iter, COLUMN_HASNAME, 0, -1);
+  }
+  else
+  {
+    gtk_list_store_set (list_store, &iter, COLUMN_NAME_NUMBER, entry->name,
+                        -1);
+    gtk_list_store_set (list_store, &iter, COLUMN_HASNAME, 1, -1);
+  }
+  switch (entry->type)
+  {
+    case INCOMING:
+      {
+        gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                            appdata->g_iconReceived, -1);
+        //      icon=gdk_pixbuf_new_from_file("./received.png",&error);
+        break;
+      }
+    case OUTGOING:
+      {                         //     icon=gdk_pixbuf_new_from_file("./dialed.png",&error);
+        gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                            appdata->g_iconDialed, -1);
+        break;
+      }
+    case MISSED:
+      {                         //icon=gdk_pixbuf_new_from_file("./missed.png",&error);
+        gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                            appdata->g_iconMissed, -1);
+        break;
+      }
+
+    default:
+
+      {                         //icon=gdk_pixbuf_new_from_file("./missed.png",&error);
+        gtk_list_store_set (list_store, &iter, COLUMN_TYPEICON,
+                            appdata->g_iconMissed, -1);
+        break;
+      }
+  }
+  history_update_counter (appdata);
+  return 1;
+}
+
+
+gint
+add_histroy_entry (MOKO_DIALER_APP_DATA * appdata, HISTORY_TYPE type,
+                   const char *name, const char *number, const char *id,
+                   char *time, char *date, int durationsec)
+{
+  
+//DBG_ENTER();
+    //DBG_MESSAGE("History add:%s,%s,%s,%s,%s,%d",name,number,picpath,time,date,durationsec);
+    HISTORY_ENTRY * pentry =
+    history_add_entry (&(appdata->g_historylist), type, name, number, id,
+                       time, date, durationsec);
+  return history_list_view_add (appdata, pentry);
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-incoming.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-incoming.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-incoming.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -29,88 +29,102 @@
 #include <gtk/gtkmenu.h>
 #include <gtk/gtkmenuitem.h>
 #include <gtk/gtkvbox.h>
+
 #include "contacts.h"
 #include "openmoko-dialer-main.h"
 #include "moko-dialer-status.h"
 #include "openmoko-dialer-window-incoming.h"
+#include "openmoko-dialer-window-talking.h"
+#include "openmoko-dialer-window-history.h"
+#include "dialergsm.h"
+#include "history.h"
 
-void cb_answer_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
+void
+cb_answer_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
 {
-DBG_ENTER();
+  DBG_ENTER ();
 
-appdata->g_state.callstate=STATE_TALKING;
-gsm_answer();
+  appdata->g_state.callstate = STATE_TALKING;
+  gsm_answer ();
 
-gtk_widget_hide(appdata->window_incoming);
+  gtk_widget_hide (appdata->window_incoming);
 
 
 //transfer the contact info
-window_talking_prepare(appdata);
+  window_talking_prepare (appdata);
 
 
-gtk_widget_show(appdata->window_talking);
+  gtk_widget_show (appdata->window_talking);
 
-DBG_LEAVE();
+  DBG_LEAVE ();
 }
 
-void cb_ignore_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
+void
+cb_ignore_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
 {
-DBG_ENTER();
-DBG_MESSAGE("We will mute the phone for this call.");
-appdata->g_state.callstate=STATE_IGNORED;
-DBG_LEAVE();
+  DBG_ENTER ();
+  DBG_MESSAGE ("We will mute the phone for this call.");
+  appdata->g_state.callstate = STATE_IGNORED;
+  DBG_LEAVE ();
 }
 
-void cb_reject_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
+void
+cb_reject_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
 {
-DBG_ENTER();
-gsm_hangup();
-appdata->g_state.callstate=STATE_REJECTED;
-gtk_widget_hide(appdata->window_incoming);
-DBG_LEAVE();
+  DBG_ENTER ();
+  gsm_hangup ();
+  appdata->g_state.callstate = STATE_REJECTED;
+  gtk_widget_hide (appdata->window_incoming);
+  DBG_LEAVE ();
 }
 
-void window_incoming_prepare(MOKO_DIALER_APP_DATA * appdata)
+void
+window_incoming_prepare (MOKO_DIALER_APP_DATA * appdata)
 {
-if(!appdata)
-{
-DBG_WARN("appdata=NULL!");
-return;
-}
+  if (!appdata)
+  {
+    DBG_WARN ("appdata=NULL!");
+    return;
+  }
 
-if(appdata->window_incoming==0)
-{
-window_incoming_init(appdata);
-}
+  if (appdata->window_incoming == 0)
+  {
+    window_incoming_init (appdata);
+  }
 
-   moko_dialer_status_set_person_number(appdata->status_incoming, appdata->g_peer_info.number);
-if(appdata->g_peer_info.hasname)
-{
+  moko_dialer_status_set_person_number (appdata->status_incoming,
+                                        appdata->g_peer_info.number);
+  if (appdata->g_peer_info.hasname)
+  {
 
-   moko_dialer_status_set_person_image(appdata->status_incoming, appdata->g_peer_info.ID);  
-   moko_dialer_status_set_person_name(appdata->status_incoming, appdata->g_peer_info.name);
-}
-else
-{
-   moko_dialer_status_set_person_image(appdata->status_incoming, "");  
-   moko_dialer_status_set_person_name(appdata->status_incoming, "");
+    moko_dialer_status_set_person_image (appdata->status_incoming,
+                                         appdata->g_peer_info.ID);
+    moko_dialer_status_set_person_name (appdata->status_incoming,
+                                        appdata->g_peer_info.name);
+  }
+  else
+  {
+    moko_dialer_status_set_person_image (appdata->status_incoming, "");
+    moko_dialer_status_set_person_name (appdata->status_incoming, "");
 
-}
+  }
 
 
 
 }
 
-gint window_incoming_fails(MOKO_DIALER_APP_DATA * appdata)
+void
+window_incoming_fails (MOKO_DIALER_APP_DATA * appdata)
 {
-DBG_ENTER();
-DBG_LEAVE();     
+  DBG_ENTER ();
+  DBG_LEAVE ();
 }
 
-gint timer_incoming_time_out(MOKO_DIALER_APP_DATA * appdata)
+gint
+timer_incoming_time_out (MOKO_DIALER_APP_DATA * appdata)
 {
 //DBG_ENTER();
-TIMER_DATA* timer_data=&(appdata->g_timer_data);
+  TIMER_DATA *timer_data = &(appdata->g_timer_data);
 
 /*	
 timer_data->ticks++;
@@ -124,32 +138,32 @@
 moko_dialer_status_set_status_label(appdata->status_incoming,timer_data->timestring);
 moko_dialer_status_update_icon(appdata->status_incoming);
 */
-if(event_get_keep_calling())
-{
-	event_reset_keep_calling();
-	timer_data->ticks=0;
-}
-else
-{	//we count 4 before we confirm that there are no calling at all.
-	if(timer_data->ticks>=3)
-	{
-		DBG_MESSAGE("THE CALLER aborted, we quit.");
-		gsm_hangup();
-		appdata->g_state.callstate=STATE_MISSED;
-		appdata->g_state.historytype=MISSED;
-		gdk_threads_enter();
-		gtk_widget_hide(appdata->window_incoming);
-		gdk_threads_leave();
-		return 0; //don't lookout the timeout.
-	}
-	else
-	{
-	DBG_MESSAGE("ticks=%d",timer_data->ticks);
-	timer_data->ticks++;
-	}
-}
+  if (event_get_keep_calling ())
+  {
+    event_reset_keep_calling ();
+    timer_data->ticks = 0;
+  }
+  else
+  {                             //we count 4 before we confirm that there are no calling at all.
+    if (timer_data->ticks >= 3)
+    {
+      DBG_MESSAGE ("THE CALLER aborted, we quit.");
+      gsm_hangup ();
+      appdata->g_state.callstate = STATE_MISSED;
+      appdata->g_state.historytype = MISSED;
+      gdk_threads_enter ();
+      gtk_widget_hide (appdata->window_incoming);
+      gdk_threads_leave ();
+      return 0;                 //don't lookout the timeout.
+    }
+    else
+    {
+      DBG_MESSAGE ("ticks=%d", timer_data->ticks);
+      timer_data->ticks++;
+    }
+  }
 
-return 1;
+  return 1;
 
 
 }
@@ -157,154 +171,156 @@
 
 
 void
-on_window_incoming_hide                 (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
+on_window_incoming_hide (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
 {
 
-DBG_ENTER();
-appdata->window_present=0;
+  DBG_ENTER ();
 
-if(appdata->g_timer_data.ptimer!=0)
-{
-gtk_timeout_remove(appdata->g_timer_data.ptimer);
-appdata->g_timer_data.ptimer=0;
-}
+  if (appdata->g_timer_data.ptimer != 0)
+  {
+    g_source_remove (appdata->g_timer_data.ptimer);
+    appdata->g_timer_data.ptimer = 0;
+  }
 
-event_reset_clip_signaled();
-event_reset_incoming_signaled();
-event_reset_keep_calling();
+  event_reset_clip_signaled ();
+  event_reset_incoming_signaled ();
+  event_reset_keep_calling ();
 
-if(appdata->g_state.callstate!=STATE_TALKING)
-{//	add_histroy_entry(g_state.historytype,g_state.contactinfo.name,g_state.contactinfo.number,g_state.contactinfo.picpath,g_state.starttime,0);
+  if (appdata->g_state.callstate != STATE_TALKING)
+  {                             //     add_histroy_entry(g_state.historytype,g_state.contactinfo.name,g_state.contactinfo.number,g_state.contactinfo.picpath,g_state.starttime,0);
 
-add_histroy_entry(appdata,appdata->g_state.historytype,
-	appdata->g_peer_info.name,
-	appdata->g_peer_info.number,
-	appdata->g_peer_info.ID,
-	appdata->g_state.starttime,
-	appdata->g_state.startdate,
-	0);
+    add_histroy_entry (appdata, appdata->g_state.historytype,
+                       appdata->g_peer_info.name,
+                       appdata->g_peer_info.number,
+                       appdata->g_peer_info.ID,
+                       appdata->g_state.starttime,
+                       appdata->g_state.startdate, 0);
 
-}
+  }
 
-DBG_LEAVE();     
+  DBG_LEAVE ();
 }
 
-gint window_incoming_setup_timer(MOKO_DIALER_APP_DATA * appdata)
+void
+window_incoming_setup_timer (MOKO_DIALER_APP_DATA * appdata)
 {
-time_t timep;
-struct tm *p;
-time(&timep);
-p=localtime(&timep);
+  time_t timep;
+  struct tm *p;
+  time (&timep);
+  p = localtime (&timep);
 
-sprintf(appdata->g_state.starttime,"%02d:%02d:%02d",p->tm_hour,p->tm_min,p->tm_sec);
-sprintf(appdata->g_state.startdate,"%04d/%02d/%02d",p->tm_year,p->tm_mon,p->tm_mday);
+  sprintf (appdata->g_state.starttime, "%02d:%02d:%02d", p->tm_hour,
+           p->tm_min, p->tm_sec);
+  sprintf (appdata->g_state.startdate, "%04d/%02d/%02d", p->tm_year,
+           p->tm_mon, p->tm_mday);
 
-if(appdata->g_timer_data.ptimer!=0)
-{
-gtk_timeout_remove(appdata->g_timer_data.ptimer);
-appdata->g_timer_data.ptimer=0;
-}
+  if (appdata->g_timer_data.ptimer != 0)
+  {
+    g_source_remove (appdata->g_timer_data.ptimer);
+    appdata->g_timer_data.ptimer = 0;
+  }
 
-memset(&(appdata->g_timer_data),0,sizeof(appdata->g_timer_data));
+  memset (&(appdata->g_timer_data), 0, sizeof (appdata->g_timer_data));
 
-appdata->g_timer_data.stopsec=0;
+  appdata->g_timer_data.stopsec = 0;
 
-appdata->g_timer_data.ptimer=gtk_timeout_add(1000,timer_incoming_time_out,appdata);
+  appdata->g_timer_data.ptimer =
+    g_timeout_add (1000, (GSourceFunc) timer_incoming_time_out, (gpointer) appdata);
 
 
 }
 
 void
-on_window_incoming_show                  (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
+on_window_incoming_show (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
 {
-DBG_ENTER();
-appdata->window_present=widget;
-appdata->g_state.callstate=STATE_INCOMING;
-window_incoming_setup_timer(appdata);
-DBG_LEAVE();     
 
+  DBG_ENTER ();
+  appdata->g_state.callstate = STATE_INCOMING;
+  window_incoming_setup_timer (appdata);
+  DBG_LEAVE ();
+
 }
 
 
-gint window_incoming_init( MOKO_DIALER_APP_DATA* p_dialer_data)
+gint
+window_incoming_init (MOKO_DIALER_APP_DATA * p_dialer_data)
 {
 
-DBG_ENTER();
-MokoFingerWindow* window;
-GtkWidget* vbox;
-MokoDialerStatus * status;
+  DBG_ENTER ();
+  MokoFingerWindow *window;
+  GtkWidget *vbox;
+  GtkWidget *status;
 
-if(p_dialer_data->window_incoming==0)
-{
+  if (p_dialer_data->window_incoming == 0)
+  {
 
-  vbox = gtk_vbox_new( FALSE, 0 );
-   status=moko_dialer_status_new();
-   moko_dialer_status_add_status_icon(status,"status0.png");
-   moko_dialer_status_add_status_icon(status,"status1.png");
-   moko_dialer_status_add_status_icon(status,"status2.png");
-   moko_dialer_status_set_icon_by_index(status,0);
-   
-   gtk_box_pack_start( GTK_BOX(vbox),status, FALSE, FALSE, 0 );
+    vbox = gtk_vbox_new (FALSE, 0);
+    status = moko_dialer_status_new ();
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status0.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status1.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status2.png");
+    moko_dialer_status_set_icon_by_index (MOKO_DIALER_STATUS (status), 0);
 
- 	
-    GtkHBox *  hbox2 = gtk_hbox_new( FALSE, 0 );
-    GtkButton* button = gtk_button_new_with_label("Answer");
-    g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_answer_button_clicked), p_dialer_data );
+    gtk_box_pack_start (GTK_BOX (vbox), status, FALSE, FALSE, 0);
 
-    gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button),TRUE, TRUE, 10);
 
-  button = gtk_button_new_with_label("Ignore");
-  g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_ignore_button_clicked), p_dialer_data );
-  gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, TRUE, 10 );
+    GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
+    GtkWidget *button = gtk_button_new_with_label ("Answer");
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_answer_button_clicked), p_dialer_data);
 
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 10);
 
+    button = gtk_button_new_with_label ("Ignore");
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_ignore_button_clicked), p_dialer_data);
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 10);
 
-button = gtk_button_new_with_label("Reject");
- g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_reject_button_clicked), p_dialer_data );
- gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button),TRUE, TRUE, 10);
 
 
+    button = gtk_button_new_with_label ("Reject");
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_reject_button_clicked), p_dialer_data);
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 10);
 
 
-   gtk_box_pack_start( GTK_BOX(vbox),hbox2, FALSE, FALSE, 50 );
 
 
+    gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 50);
+
+
 //currently     MokoDialogWindow is not finished, wating...
 //   MokoDialogWindow* window = (MokoDialogWindow *)(moko_dialog_window_new());
 //  moko_dialog_window_set_contents( window, GTK_WIDGET(vbox) );
 
-    window = MOKO_FINGER_WINDOW(moko_finger_window_new());
-    moko_finger_window_set_contents(window, GTK_WIDGET(vbox) );
+    window = MOKO_FINGER_WINDOW (moko_finger_window_new ());
+    moko_finger_window_set_contents (window, GTK_WIDGET (vbox));
 
 
-     gtk_widget_show_all( GTK_WIDGET(window) );
+    gtk_widget_show_all (GTK_WIDGET (window));
 
 
-     gtk_widget_hide( GTK_WIDGET(window) );   
+    gtk_widget_hide (GTK_WIDGET (window));
 
 
-   moko_dialer_status_set_title_label(status, "Incoming call");
-   moko_dialer_status_set_status_label(status, "");
+    moko_dialer_status_set_title_label (MOKO_DIALER_STATUS (status), "Incoming call");
+    moko_dialer_status_set_status_label (MOKO_DIALER_STATUS (status), "");
 
-   p_dialer_data->window_incoming=window;
-   p_dialer_data->status_incoming=status;
-   
+    p_dialer_data->window_incoming = GTK_WIDGET (window);
+    p_dialer_data->status_incoming = MOKO_DIALER_STATUS (status);
+
 //   DBG_MESSAGE("p_dialer_data->status_incoming=0X%x",p_dialer_data->status_incoming);
 
 
-  g_signal_connect ((gpointer) window, "show",
-                    G_CALLBACK (on_window_incoming_show),
-                    p_dialer_data);
-  g_signal_connect ((gpointer) window, "hide",
-                    G_CALLBACK (on_window_incoming_hide),
-                    p_dialer_data);
+    g_signal_connect ((gpointer) window, "show",
+                      G_CALLBACK (on_window_incoming_show), p_dialer_data);
+    g_signal_connect ((gpointer) window, "hide",
+                      G_CALLBACK (on_window_incoming_hide), p_dialer_data);
 
-}
+  }
 
 
-DBG_LEAVE();
-    return 1;
+  DBG_LEAVE ();
+  return 1;
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -1,313 +1,335 @@
-/*   openmoko-dialer-window-outgoing.c
- *
- *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
- *
- *  Copyright (C) 2006 FIC Shanghai Lab
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Public License as published by
- *  the Free Software Foundation; version 2 of the license.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser Public License for more details.
- *
- *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
- */
-
-#include <libmokoui/moko-finger-tool-box.h>
-#include <libmokoui/moko-finger-window.h>
-#include <libmokoui/moko-finger-wheel.h>
-#include <libmokoui/moko-pixmap-button.h>
-
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkvbox.h>
-#include "contacts.h"
-#include "openmoko-dialer-main.h"
-#include "moko-dialer-status.h"
-#include "openmoko-dialer-window-outgoing.h"
-
-void cb_speaker_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-//moko_dialer_status_update_icon(appdata->status_outgoing);
-
-
-appdata->g_state.callstate=STATE_TALKING;
-
-gtk_widget_hide(appdata->window_outgoing);
-
-
-//transfer the contact info
-window_talking_prepare(appdata);
-
-//start dialling.
-
-DBG_TRACE();
-gtk_widget_show(appdata->window_talking);
-
-
-DBG_LEAVE();
-}
-
-void cb_redial_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-gtk_widget_hide(appdata->buttonRedial);
-gtk_widget_show( appdata->buttonSpeaker);
-moko_dialer_status_set_title_label(appdata->status_outgoing, "Outgoing call");
- moko_dialer_status_set_status_label(appdata->status_outgoing, "Calling ... (00:00:00)");
-window_outgoing_setup_timer(appdata);
-
-appdata->g_state.callstate=STATE_CALLING;
-appdata->g_state.historytype=OUTGOING;	
-gsm_dial(appdata->g_peer_info.number);
-
-DBG_LEAVE();
-}
-
-void cb_cancel_button_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-gsm_hangup();
-appdata->g_state.callstate=STATE_FAILED;
-gtk_widget_hide(appdata->window_outgoing);
-DBG_LEAVE();
-}
-
-void window_outgoing_prepare(MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-if(appdata->window_outgoing==0)
-	window_outgoing_init( appdata);
-
-	
- moko_dialer_status_set_person_number(appdata->status_outgoing, appdata->g_peer_info.number);
-if(appdata->g_peer_info.hasname)
-{
-   moko_dialer_status_set_person_image(appdata->status_outgoing, appdata->g_peer_info.ID);  
-   moko_dialer_status_set_person_name(appdata->status_outgoing, appdata->g_peer_info.name);
-}
-else
-{
-   moko_dialer_status_set_person_image(appdata->status_outgoing, "");  
-   moko_dialer_status_set_person_name(appdata->status_outgoing, "");
-
-}
-strcpy(appdata->g_state.lastnumber,appdata->g_peer_info.number);
-DBG_LEAVE();
-
-}
-
-gint window_outgoing_fails(MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-     moko_dialer_status_set_error(appdata->status_outgoing);
-     moko_dialer_status_set_title_label(appdata->status_outgoing, "Call Failure");
-     gtk_widget_hide( appdata->buttonSpeaker);
-     gtk_widget_show(appdata->buttonRedial);
-DBG_LEAVE();     
-}
-
-gint timer_outgoing_time_out(MOKO_DIALER_APP_DATA * appdata)
-{
-//DBG_ENTER();
-TIMER_DATA* timer_data=&(appdata->g_timer_data);
-
-	
-timer_data->ticks++;
-timer_data->hour=timer_data->ticks/3600;
-timer_data->min=(timer_data->ticks-timer_data->hour*3600)/60;
-timer_data->sec=timer_data->ticks%60;
-
-
-sprintf(timer_data->timestring,"Calling ... (%02d:%02d:%02d)",timer_data->hour,timer_data->min,timer_data->sec);
-
-//ok,we update the label now.
-
-
-moko_dialer_status_set_status_label(appdata->status_outgoing,timer_data->timestring);
-moko_dialer_status_update_icon(appdata->status_outgoing);
-
-if(timer_data->stopsec!=0&&timer_data->ticks>=timer_data->stopsec)
-{
-
-timer_data->timeout=1;
-gtk_timeout_remove(timer_data->ptimer);
-timer_data->ptimer=0;
-//maybe it failes
-window_outgoing_fails(appdata);
-return 0;//0 stops the timer.
-}
-else
-return 1;
-}
-
-
-
-void
-on_window_outgoing_hide                 (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-if(appdata->g_timer_data.ptimer!=0)
-{
-gtk_timeout_remove(appdata->g_timer_data.ptimer);
-appdata->g_timer_data.ptimer=0;
-}
-if(appdata->g_state.callstate!=STATE_TALKING)
-{//	add_histroy_entry(g_state.historytype,g_state.contactinfo.name,g_state.contactinfo.number,g_state.contactinfo.picpath,g_state.starttime,0);
-
-add_histroy_entry(appdata,appdata->g_state.historytype,
-	appdata->g_peer_info.name,
-	appdata->g_peer_info.number,
-	appdata->g_peer_info.picpath,
-	appdata->g_state.starttime,
-	appdata->g_state.startdate,
-	0);
-
-}
-appdata->window_present=0;
-
-
-}
-
-gint window_outgoing_setup_timer(MOKO_DIALER_APP_DATA * appdata)
-{
-time_t timep;
-struct tm *p;
-time(&timep);
-p=localtime(&timep);
-
-sprintf(appdata->g_state.starttime,"%02d:%02d:%02d",p->tm_hour,p->tm_min,p->tm_sec);
-sprintf(appdata->g_state.startdate,"%04d/%02d/%02d",p->tm_year,p->tm_mon,p->tm_mday);
-
-if(appdata->g_timer_data.ptimer!=0)
-{
-gtk_timeout_remove(appdata->g_timer_data.ptimer);
-appdata->g_timer_data.ptimer=0;
-}
-
-memset(&(appdata->g_timer_data),0,sizeof(appdata->g_timer_data));
-// 1:30 timeout
-appdata->g_timer_data.stopsec=90;
-
-appdata->g_timer_data.ptimer=gtk_timeout_add(1000,timer_outgoing_time_out,appdata);
-
-
-}
-
-void
-on_window_outgoing_show                  (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-
-//DBG_ENTER();
-appdata->window_present=widget;
-window_outgoing_setup_timer(appdata);
-//DBG_TRACE();
-appdata->g_state.callstate=STATE_CALLING;
-//DBG_TRACE();
-appdata->g_state.historytype=OUTGOING;	
-//DBG_TRACE();
-gsm_dial(appdata->g_peer_info.number);
-//DBG_LEAVE();
-}
-
-
-gint window_outgoing_init( MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-
-DBG_ENTER();
-MokoFingerWindow* window;
-GtkWidget* vbox;
-MokoDialerStatus * status;
-
-if(p_dialer_data->window_outgoing==0)
-{
-
-  vbox = gtk_vbox_new( FALSE, 0 );
-   status=moko_dialer_status_new();
-   moko_dialer_status_add_status_icon(status,"status0.png");
-   moko_dialer_status_add_status_icon(status,"status1.png");
-   moko_dialer_status_add_status_icon(status,"status2.png");
-   moko_dialer_status_set_icon_by_index(status,0);
-   
-   gtk_box_pack_start( GTK_BOX(vbox),status, FALSE, FALSE, 0 );
-
- 	
-    GtkHBox *  hbox2 = gtk_hbox_new( FALSE, 0 );
-    GtkButton* button = gtk_button_new_with_label("Speaker");
-    g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_speaker_button_clicked), p_dialer_data );
-p_dialer_data->buttonSpeaker=button;
-//gtk_widget_set_size_request(button,100,32);
-    gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button),TRUE, TRUE, 40 );
-
-  button = gtk_button_new_with_label("Redial");
-    p_dialer_data->buttonRedial=button;
-  g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_redial_button_clicked), p_dialer_data );
-//gtk_widget_set_size_request(button,100,32);
-  gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button), TRUE, TRUE, 40 );
-//gtk_widget_set_size_request(button,60,24);
-
-
-button = gtk_button_new_with_label("Cancel");
-  p_dialer_data->buttonCancel=button;
- g_signal_connect( G_OBJECT(button), "clicked", G_CALLBACK(cb_cancel_button_clicked), p_dialer_data );
-//gtk_widget_set_size_request(button,100,32);
- gtk_box_pack_start( GTK_BOX(hbox2), GTK_WIDGET(button),TRUE, TRUE, 40);
-
-
-
-
-   gtk_box_pack_start( GTK_BOX(vbox),hbox2, FALSE, FALSE, 50 );
-
-
-//currently     MokoDialogWindow is not finished, wating...
-//   MokoDialogWindow* window = (MokoDialogWindow *)(moko_dialog_window_new());
-//  moko_dialog_window_set_contents( window, GTK_WIDGET(vbox) );
-
-    window = MOKO_FINGER_WINDOW(moko_finger_window_new());
-    moko_finger_window_set_contents(window, GTK_WIDGET(vbox) );
-
-
-     gtk_widget_show_all( GTK_WIDGET(window) );
-
-     gtk_widget_hide( p_dialer_data->buttonRedial);
-
-
-     gtk_widget_hide( GTK_WIDGET(window) );   
-
-
-   moko_dialer_status_set_title_label(status, "Outgoing call");
-   moko_dialer_status_set_status_label(status, "Calling ... (00:00:00)");
-
-   p_dialer_data->window_outgoing=window;
-   p_dialer_data->status_outgoing=status;
-   
-//   DBG_MESSAGE("p_dialer_data->status_outgoing=0X%x",p_dialer_data->status_outgoing);
-
-
-  g_signal_connect ((gpointer) window, "show",
-                    G_CALLBACK (on_window_outgoing_show),
-                    p_dialer_data);
-  g_signal_connect ((gpointer) window, "hide",
-                    G_CALLBACK (on_window_outgoing_hide),
-                    p_dialer_data);
-
-}
-
-
-
-// gtk_widget_show(p_dialer_data->window_outgoing);
-
-DBG_LEAVE();
-    return 1;
-}
-
+/*   openmoko-dialer-window-outgoing.c
+ *
+ *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
+ *
+ *  Copyright (C) 2006 FIC Shanghai Lab
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Public License as published by
+ *  the Free Software Foundation; version 2 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
+ */
+
+#include <libmokoui/moko-finger-tool-box.h>
+#include <libmokoui/moko-finger-window.h>
+#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
+
+#include <gtk/gtkalignment.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkvbox.h>
+
+#include "contacts.h"
+#include "openmoko-dialer-main.h"
+#include "moko-dialer-status.h"
+#include "openmoko-dialer-window-outgoing.h"
+#include "openmoko-dialer-window-history.h"
+#include "openmoko-dialer-window-talking.h"
+#include "dialergsm.h"
+
+/* function declerations */
+void window_outgoing_setup_timer (MOKO_DIALER_APP_DATA * appdata);
+
+void 
+cb_speaker_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  //moko_dialer_status_update_icon(appdata->status_outgoing);
+
+
+  appdata->g_state.callstate = STATE_TALKING;
+
+  gtk_widget_hide (appdata->window_outgoing);
+
+
+//transfer the contact info
+  window_talking_prepare (appdata);
+
+//start dialling.
+
+  DBG_TRACE ();
+  gtk_widget_show (appdata->window_talking);
+
+
+  DBG_LEAVE ();
+}
+
+void
+cb_redial_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  gtk_widget_hide (appdata->buttonRedial);
+  gtk_widget_show (appdata->buttonSpeaker);
+  moko_dialer_status_set_title_label (appdata->status_outgoing,
+                                      "Outgoing call");
+  moko_dialer_status_set_status_label (appdata->status_outgoing,
+                                       "Calling ... (00:00:00)");
+  window_outgoing_setup_timer (appdata);
+
+  appdata->g_state.callstate = STATE_CALLING;
+  appdata->g_state.historytype = OUTGOING;
+  gsm_dial (appdata->g_peer_info.number);
+
+  DBG_LEAVE ();
+}
+
+void
+cb_cancel_button_clicked (GtkButton * button, MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  gsm_hangup ();
+  appdata->g_state.callstate = STATE_FAILED;
+  gtk_widget_hide (appdata->window_outgoing);
+  DBG_LEAVE ();
+}
+
+void
+window_outgoing_prepare (MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  if (appdata->window_outgoing == 0)
+    window_outgoing_init (appdata);
+
+
+  moko_dialer_status_set_person_number (appdata->status_outgoing,
+                                        appdata->g_peer_info.number);
+  if (appdata->g_peer_info.hasname)
+  {
+    moko_dialer_status_set_person_image (appdata->status_outgoing,
+                                         appdata->g_peer_info.ID);
+    moko_dialer_status_set_person_name (appdata->status_outgoing,
+                                        appdata->g_peer_info.name);
+  }
+  else
+  {
+    moko_dialer_status_set_person_image (appdata->status_outgoing, "");
+    moko_dialer_status_set_person_name (appdata->status_outgoing, "");
+
+  }
+  strcpy (appdata->g_state.lastnumber, appdata->g_peer_info.number);
+  DBG_LEAVE ();
+
+}
+
+void
+window_outgoing_fails (MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  moko_dialer_status_set_error (appdata->status_outgoing);
+  moko_dialer_status_set_title_label (appdata->status_outgoing,
+                                      "Call Failure");
+  gtk_widget_hide (appdata->buttonSpeaker);
+  gtk_widget_show (appdata->buttonRedial);
+  DBG_LEAVE ();
+}
+
+gint
+timer_outgoing_time_out (MOKO_DIALER_APP_DATA * appdata)
+{
+//DBG_ENTER();
+  TIMER_DATA *timer_data = &(appdata->g_timer_data);
+
+
+  timer_data->ticks++;
+  timer_data->hour = timer_data->ticks / 3600;
+  timer_data->min = (timer_data->ticks - timer_data->hour * 3600) / 60;
+  timer_data->sec = timer_data->ticks % 60;
+
+
+  sprintf (timer_data->timestring, "Calling ... (%02d:%02d:%02d)",
+           timer_data->hour, timer_data->min, timer_data->sec);
+
+//ok,we update the label now.
+
+
+  moko_dialer_status_set_status_label (appdata->status_outgoing,
+                                       timer_data->timestring);
+  moko_dialer_status_update_icon (appdata->status_outgoing);
+
+  if (timer_data->stopsec != 0 && timer_data->ticks >= timer_data->stopsec)
+  {
+
+    timer_data->timeout = 1;
+    g_source_remove (timer_data->ptimer);
+    timer_data->ptimer = 0;
+//maybe it failes
+    window_outgoing_fails (appdata);
+    return 0;                   //0 stops the timer.
+  }
+  else
+    return 1;
+}
+
+
+
+void
+on_window_outgoing_hide (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+  if (appdata->g_timer_data.ptimer != 0)
+  {
+    g_source_remove (appdata->g_timer_data.ptimer);
+    appdata->g_timer_data.ptimer = 0;
+  }
+  if (appdata->g_state.callstate != STATE_TALKING)
+  {                             //     add_histroy_entry(g_state.historytype,g_state.contactinfo.name,g_state.contactinfo.number,g_state.contactinfo.picpath,g_state.starttime,0);
+
+    add_histroy_entry (appdata, appdata->g_state.historytype,
+                       appdata->g_peer_info.name,
+                       appdata->g_peer_info.number,
+                       appdata->g_peer_info.picpath,
+                       appdata->g_state.starttime,
+                       appdata->g_state.startdate, 0);
+
+  }
+
+
+}
+
+void
+window_outgoing_setup_timer (MOKO_DIALER_APP_DATA * appdata)
+{
+  time_t timep;
+  struct tm *p;
+  time (&timep);
+  p = localtime (&timep);
+
+  sprintf (appdata->g_state.starttime, "%02d:%02d:%02d", p->tm_hour,
+           p->tm_min, p->tm_sec);
+  sprintf (appdata->g_state.startdate, "%04d/%02d/%02d", p->tm_year,
+           p->tm_mon, p->tm_mday);
+
+  if (appdata->g_timer_data.ptimer != 0)
+  {
+    g_source_remove (appdata->g_timer_data.ptimer);
+    appdata->g_timer_data.ptimer = 0;
+  }
+
+  memset (&(appdata->g_timer_data), 0, sizeof (appdata->g_timer_data));
+// 1:30 timeout
+  appdata->g_timer_data.stopsec = 90;
+
+  appdata->g_timer_data.ptimer =
+    g_timeout_add (1000, (GSourceFunc) timer_outgoing_time_out, appdata);
+
+
+}
+
+void
+on_window_outgoing_show (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+
+  //DBG_ENTER ();
+  window_outgoing_setup_timer (appdata);
+  //DBG_TRACE ();
+  appdata->g_state.callstate = STATE_CALLING;
+  //DBG_TRACE ();
+  appdata->g_state.historytype = OUTGOING;
+  //DBG_TRACE ();
+  gsm_dial (appdata->g_peer_info.number);
+  //DBG_LEAVE ();
+}
+
+
+gint
+window_outgoing_init (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+
+  DBG_ENTER ();
+  MokoFingerWindow *window;
+  GtkWidget *vbox;
+  GtkWidget *status;
+
+  if (p_dialer_data->window_outgoing == 0)
+  {
+
+    vbox = gtk_vbox_new (FALSE, 0);
+    status = moko_dialer_status_new ();
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status0.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status1.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status2.png");
+    moko_dialer_status_set_icon_by_index (MOKO_DIALER_STATUS (status), 0);
+
+    gtk_box_pack_start (GTK_BOX (vbox), status, FALSE, FALSE, 0);
+
+
+    GtkWidget *hbox2 = gtk_hbox_new (FALSE, 0);
+    GtkWidget *button = gtk_button_new_with_label ("Speaker");
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_speaker_button_clicked), p_dialer_data);
+    p_dialer_data->buttonSpeaker = button;
+//gtk_widget_set_size_request(button,100,32);
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 40);
+
+    button = gtk_button_new_with_label ("Redial");
+    p_dialer_data->buttonRedial = button;
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_redial_button_clicked), p_dialer_data);
+//gtk_widget_set_size_request(button,100,32);
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 40);
+//gtk_widget_set_size_request(button,60,24);
+
+
+    button = gtk_button_new_with_label ("Cancel");
+    p_dialer_data->buttonCancel = button;
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_cancel_button_clicked), p_dialer_data);
+//gtk_widget_set_size_request(button,100,32);
+    gtk_box_pack_start (GTK_BOX (hbox2), GTK_WIDGET (button), TRUE, TRUE, 40);
+
+
+
+
+    gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 50);
+
+
+//currently     MokoDialogWindow is not finished, wating...
+//   MokoDialogWindow* window = (MokoDialogWindow *)(moko_dialog_window_new());
+//  moko_dialog_window_set_contents( window, GTK_WIDGET(vbox) );
+
+    window = MOKO_FINGER_WINDOW (moko_finger_window_new ());
+    moko_finger_window_set_contents (window, GTK_WIDGET (vbox));
+
+
+    gtk_widget_show_all (GTK_WIDGET (window));
+
+    gtk_widget_hide (p_dialer_data->buttonRedial);
+
+
+    gtk_widget_hide (GTK_WIDGET (window));
+
+
+    moko_dialer_status_set_title_label (MOKO_DIALER_STATUS (status), "Outgoing call");
+    moko_dialer_status_set_status_label (MOKO_DIALER_STATUS (status), "Calling ... (00:00:00)");
+
+    p_dialer_data->window_outgoing = GTK_WIDGET (window);
+    p_dialer_data->status_outgoing = MOKO_DIALER_STATUS (status);
+
+//   DBG_MESSAGE("p_dialer_data->status_outgoing=0X%x",p_dialer_data->status_outgoing);
+
+
+    g_signal_connect ((gpointer) window, "show",
+                      G_CALLBACK (on_window_outgoing_show), p_dialer_data);
+    g_signal_connect ((gpointer) window, "hide",
+                      G_CALLBACK (on_window_outgoing_hide), p_dialer_data);
+
+  }
+
+
+
+// gtk_widget_show(p_dialer_data->window_outgoing);
+
+  DBG_LEAVE ();
+  return 1;
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.h	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-outgoing.h	2007-02-08 18:05:11 UTC (rev 916)
@@ -28,11 +28,10 @@
 {
 #endif
 
-
-
   gint window_outgoing_init (MOKO_DIALER_APP_DATA * p_dialer_data);
-
   void window_outgoing_prepare (MOKO_DIALER_APP_DATA * appdata);
+  void window_outgoing_fails (MOKO_DIALER_APP_DATA *appdata);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-talking.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-talking.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/openmoko-dialer-window-talking.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -1,397 +1,424 @@
-/*   openmoko-dialer-window-talking.c
- *
- *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
- *
- *  Copyright (C) 2006 FIC Shanghai Lab
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Public License as published by
- *  the Free Software Foundation; version 2 of the license.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser Public License for more details.
- *
- *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
- */
-#include "alsa.h"
-#include <libmokoui/moko-finger-tool-box.h>
-#include <libmokoui/moko-finger-window.h>
-#include <libmokoui/moko-finger-wheel.h>
-#include <libmokoui/moko-pixmap-button.h>
-
-#include <gtk/gtkalignment.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
-#include <gtk/gtkvbox.h>
-#include "contacts.h"
-#include "openmoko-dialer-main.h"
-#include "moko-dialer-status.h"
-#include "openmoko-dialer-window-talking.h"
-
-void
-openmoko_wheel_press_left_up_cb(GtkWidget *widget, MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
- gint l , r;
- alsa_get_volume(&l, &r);
-alsa_set_volume(l+10, r+10);
-
- alsa_get_volume(&l, &r);
- g_print("l = %d, r = %d\n", l, r);
-
-/*
-    l = 90; 
-    r = 90;
-
-*/    
-
-}
-
-void
-openmoko_wheel_press_right_down_cb(GtkWidget *widget, MOKO_DIALER_APP_DATA * appdata)
-{
- gint l , r;
-  alsa_get_volume(&l, &r);
-alsa_set_volume(l-10, r-10);
- alsa_get_volume(&l, &r);
- g_print("l = %d, r = %d\n", l, r);
-
-DBG_ENTER();
-}
-
-
-void cb_tool_button_speaker_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-  DBG_ENTER();
-}
-
-void cb_tool_button_dtmf_talk_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-	DBG_ENTER();
-	
-	appdata->dtmf_in_talking_window=!appdata->dtmf_in_talking_window;
-	if(appdata->dtmf_in_talking_window)
-		{
-		
-			
-			moko_pixmap_button_set_finger_toolbox_btn_center_image(button, appdata->imageTALK);
-		       gtk_widget_hide(appdata->content_talk);
-			gtk_widget_show(appdata->content_dtmf);
-		}
-	else
-		{
-			moko_pixmap_button_set_finger_toolbox_btn_center_image(button, appdata->imageDTMF);
-			gtk_widget_hide(appdata->content_dtmf);
-		       gtk_widget_show(appdata->content_talk);
-		       
-
-		}
-
-  
-}
-
-void cb_tool_button_hangup_clicked( GtkButton* button, MOKO_DIALER_APP_DATA * appdata)
-{
-     gsm_hangup();
-     gtk_widget_hide(appdata->window_talking);
-
-}
-
-
-void
-on_dtmf_panel_user_input(GtkWidget * widget,gchar parac,
-                                        gpointer         user_data)
-{
-char input[2];
-input[0]=parac;
-input[1]=0;
-char codesinput[MOKO_DIALER_MAX_NUMBER_LEN+1];
-
-
-MOKO_DIALER_APP_DATA * appdata=(MOKO_DIALER_APP_DATA*)user_data;
-MokoDialerTextview *moko_dtmf_text_view=appdata->moko_dtmf_text_view;
-
-moko_dialer_textview_insert(moko_dtmf_text_view, input);
-
-
-gsm_dtmf_send(input[0]);
-//lgsm_voice_dtmf(lgsmh, buf[1]);
-
-}
-
-
-
-void window_talking_prepare(MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-
-//   moko_dialer_status_set_person_number(appdata->status_talking, appdata->g_peer_info.number);
-
-if(!appdata->window_talking)
-	window_talking_init(appdata);
-
-if(!appdata->window_talking)
-{
-	DBG_WARN("NO TALKING WINDOW INITIATED");
-	return;
-}
-
-
-if(appdata->g_peer_info.hasname)
-{
-DBG_TRACE();
-   moko_dialer_status_set_person_image(appdata->status_talking, appdata->g_peer_info.ID);  
-DBG_TRACE();
-   moko_dialer_status_set_person_name(appdata->status_talking, appdata->g_peer_info.name);
-   DBG_TRACE();
-}
-else
-{
-   moko_dialer_status_set_person_image(appdata->status_talking, "");  
-   moko_dialer_status_set_person_name(appdata->status_talking, "");
-
-}
-
-DBG_LEAVE();
-
-}
-
-gint timer_talking_time_out(MOKO_DIALER_APP_DATA * appdata)
-{
-//DBG_ENTER();
-TIMER_DATA* timer_data=&(appdata->g_timer_data);
-
-	
-timer_data->ticks++;
-timer_data->hour=timer_data->ticks/3600;
-timer_data->min=(timer_data->ticks-timer_data->hour*3600)/60;
-timer_data->sec=timer_data->ticks%60;
-
-
-sprintf(timer_data->timestring,"Talking (%02d:%02d:%02d)",timer_data->hour,timer_data->min,timer_data->sec);
-
-//ok,we update the label now.
-
-
-moko_dialer_status_set_status_label(appdata->status_talking,timer_data->timestring);
-moko_dialer_status_update_icon(appdata->status_talking);
-
-if(timer_data->stopsec!=0&&timer_data->ticks>=timer_data->stopsec)
-{
-
-timer_data->timeout=1;
-gtk_timeout_remove(timer_data->ptimer);
-timer_data->ptimer=0;
-return 0;//0 stops the timer.
-}
-else
-return 1;
-}
-
-void
-on_window_talking_hide                 (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-
-
-if(appdata->g_timer_data.ptimer!=0)
-{
-gtk_timeout_remove(appdata->g_timer_data.ptimer);
-appdata->g_timer_data.ptimer=0;
-}
-
-gtk_widget_hide(appdata->wheel_talking);
-gtk_widget_hide(appdata->toolbox_talking);
-
-//DBG_MESSAGE("%s, %s",appdata->g_state.starttime,appdata->g_state.startdate);
-add_histroy_entry(appdata,appdata->g_state.historytype,
-	appdata->g_peer_info.name,
-	appdata->g_peer_info.number,
-	appdata->g_peer_info.picpath,
-	appdata->g_state.starttime,
-	appdata->g_state.startdate,
-	appdata->g_timer_data.ticks);
-	appdata->window_present=0;
-}
-
-void
-on_window_talking_show                  (GtkWidget       *widget,
-                                        MOKO_DIALER_APP_DATA * appdata)
-{
-DBG_ENTER();
-appdata->window_present=widget;
-appdata->dtmf_in_talking_window=TRUE;
-	//hide the talking button in talking mode.
-
-time_t timep;
-struct tm *p;
-time(&timep);
-p=localtime(&timep);
-
-sprintf(appdata->g_state.starttime,"%02d:%02d:%02d",p->tm_hour,p->tm_min,p->tm_sec);
-sprintf(appdata->g_state.startdate,"%04d/%02d/%02d",p->tm_year+1900,p->tm_mon,p->tm_mday);
-
-memset(&(appdata->g_timer_data),0,sizeof(appdata->g_timer_data));
-
-appdata->g_timer_data.stopsec=0;
-
-appdata->g_timer_data.ptimer=gtk_timeout_add(1000,timer_talking_time_out,appdata);
-
-if(appdata->wheel_talking)
-gtk_widget_show(appdata->wheel_talking);
-
-if(appdata->toolbox_talking)
-gtk_widget_show(appdata->toolbox_talking);
-
-
-
-DBG_LEAVE();
-}
-
-
-
-
-gint window_talking_init( MOKO_DIALER_APP_DATA* p_dialer_data)
-{
-
-DBG_ENTER();
-
-
-if(p_dialer_data->window_talking==0)
-{
-
-	MokoFingerWindow* window=NULL;
-	GtkWidget* vbox=gtk_vbox_new( FALSE, 0 );;
-	MokoDialerStatus * status=NULL;
-	GtkWidget* content_talk= NULL;
-	GtkWidget* content_dtmf= NULL;
-      MokoFingerToolBox *tools = NULL;
-      MokoDialerPanel* mokodialerpanel=NULL;
-      GtkWidget *button;
-      GtkWidget* image;
-
-
-//first, the talking content.
-
-   content_talk = gtk_vbox_new( FALSE, 0 );
-   status=moko_dialer_status_new();
-   moko_dialer_status_add_status_icon(status,"status0.png");
-   moko_dialer_status_add_status_icon(status,"status1.png");
-   moko_dialer_status_add_status_icon(status,"status2.png");
-   moko_dialer_status_set_icon_by_index(status,0);
-   
-   
-   moko_dialer_status_set_title_label(status, "In Call");
-   moko_dialer_status_set_status_label(status, "Talking ...(00:00:00)");
-
-   gtk_box_pack_start( GTK_BOX(content_talk),status, FALSE, FALSE, 0 );
-
-
-   p_dialer_data->status_talking=status;
-   p_dialer_data->content_talk= content_talk;
-
-   gtk_box_pack_start( GTK_BOX(vbox),content_talk, FALSE, FALSE, 0 );
-   
-  
-//now the dtmf content
-  	content_dtmf= gtk_vbox_new( FALSE, 0 );
-  	GtkEventBox* eventbox1 = gtk_event_box_new ();
-	gtk_widget_show (eventbox1);
-	gtk_widget_set_name(GTK_WIDGET(eventbox1),"gtkeventbox-black");
-
-   	MokoDialerTextview * mokotextview=moko_dialer_textview_new();
-
-  	gtk_container_add (GTK_CONTAINER (eventbox1), mokotextview);
-
-   	p_dialer_data->moko_dtmf_text_view=mokotextview;
-    
-  	gtk_box_pack_start( GTK_BOX(content_dtmf), GTK_WIDGET(eventbox1), FALSE,FALSE, 2 );
-
-
-
-	 mokodialerpanel=moko_dialer_panel_new();
-
-   	gtk_widget_set_size_request (mokodialerpanel, 380, 384);
-   	g_signal_connect (GTK_OBJECT (mokodialerpanel), "user_input",  G_CALLBACK (on_dtmf_panel_user_input),p_dialer_data);
-    	gtk_box_pack_start( GTK_BOX(content_dtmf), GTK_WIDGET(mokodialerpanel), TRUE, TRUE, 5 );
-  
-   	gtk_box_pack_start( GTK_BOX(vbox),content_dtmf, FALSE, FALSE, 0 );
-   	p_dialer_data->content_dtmf=content_dtmf;
-
-
-//now the container--window
-     window = MOKO_FINGER_WINDOW(moko_finger_window_new());
-     p_dialer_data->window_talking=window;
-     moko_finger_window_set_contents(window, GTK_WIDGET(vbox) );
-    g_signal_connect ((gpointer) window, "show",
-	                    G_CALLBACK (on_window_talking_show),
-	                    p_dialer_data);
-    g_signal_connect ((gpointer) window, "hide",
-	                    G_CALLBACK (on_window_talking_hide),
-	                    p_dialer_data);
-
-     
-
-
-
-     gtk_widget_show_all( GTK_WIDGET(window) );
-//the gtk_widget_show_all is really bad, cause i have to call it and then hide some widgets.
-
-   gtk_widget_hide(content_dtmf);
-
-
- //now the wheel and tool box, why should the wheel and toolbox created after the gtk_widget_show_all???
-//   gtk_widget_show(GTK_WIDGET(moko_finger_window_get_wheel(window)));
-    
-    g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
-		    "press_left_up",
-		    G_CALLBACK(openmoko_wheel_press_left_up_cb),
-		    p_dialer_data);
-    g_signal_connect(G_OBJECT(moko_finger_window_get_wheel(window)),
-		    "press_right_down",
-		    G_CALLBACK(openmoko_wheel_press_right_down_cb),
-		    p_dialer_data);
-
-
-
-        tools = moko_finger_window_get_toolbox(window);
-     
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("speaker.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-        g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_speaker_clicked), p_dialer_data);
-	
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("dtmf.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_dtmf_talk_clicked), p_dialer_data);
-	p_dialer_data->imageDTMF=image;
-	p_dialer_data->imageTALK=file_new_image_from_relative_path("talking.png");
-	
-
-	button = moko_finger_tool_box_add_button_without_label(tools);
-       image = file_new_image_from_relative_path("tony.png");
-	moko_pixmap_button_set_finger_toolbox_btn_center_image(button, image);
-	g_signal_connect(G_OBJECT(button), "clicked",
-			G_CALLBACK(cb_tool_button_hangup_clicked), p_dialer_data);
-	gtk_widget_show(GTK_WIDGET(tools));
-
-	p_dialer_data->dtmf_in_talking_window=0;
-	p_dialer_data->wheel_talking=moko_finger_window_get_wheel(window);
-	p_dialer_data->toolbox_talking=tools;
-
-
-	DBG_LEAVE();
-}
-
-    return 1;
-}
-
+/*   openmoko-dialer-window-talking.c
+ *
+ *  Authored by Tony Guan<tonyguan at fic-sh.com.cn>
+ *
+ *  Copyright (C) 2006 FIC Shanghai Lab
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU Public License as published by
+ *  the Free Software Foundation; version 2 of the license.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser Public License for more details.
+ *
+ *  Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
+ */
+#include "alsa.h"
+#include <libmokoui/moko-finger-tool-box.h>
+#include <libmokoui/moko-finger-window.h>
+#include <libmokoui/moko-finger-wheel.h>
+#include <libmokoui/moko-pixmap-button.h>
+
+#include <gtk/gtkalignment.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkvbox.h>
+
+#include "contacts.h"
+#include "common.h"
+#include "openmoko-dialer-main.h"
+#include "moko-dialer-status.h"
+#include "openmoko-dialer-window-talking.h"
+#include "openmoko-dialer-window-history.h"
+#include "dialergsm.h"
+
+void
+openmoko_wheel_press_left_up_cb (GtkWidget * widget,
+                                 MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+  gint l, r;
+  alsa_get_volume (&l, &r);
+  alsa_set_volume (l + 10, r + 10);
+
+  alsa_get_volume (&l, &r);
+  g_print ("l = %d, r = %d\n", l, r);
+
+/*
+    l = 90; 
+    r = 90;
+
+*/
+
+}
+
+void
+openmoko_wheel_press_right_down_cb (GtkWidget * widget,
+                                    MOKO_DIALER_APP_DATA * appdata)
+{
+  gint l, r;
+  alsa_get_volume (&l, &r);
+  alsa_set_volume (l - 10, r - 10);
+  alsa_get_volume (&l, &r);
+  g_print ("l = %d, r = %d\n", l, r);
+
+  DBG_ENTER ();
+}
+
+
+void
+cb_tool_button_speaker_clicked (GtkButton * button,
+                                MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+}
+
+void
+cb_tool_button_dtmf_talk_clicked (GtkButton * button,
+                                  MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+  appdata->dtmf_in_talking_window = !appdata->dtmf_in_talking_window;
+  if (appdata->dtmf_in_talking_window)
+  {
+
+
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON (button),
+                                                            appdata->
+                                                            imageTALK);
+    gtk_widget_hide (appdata->content_talk);
+    gtk_widget_show (appdata->content_dtmf);
+  }
+  else
+  {
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (MOKO_PIXMAP_BUTTON (button),
+                                                            appdata->
+                                                            imageDTMF);
+    gtk_widget_hide (appdata->content_dtmf);
+    gtk_widget_show (appdata->content_talk);
+
+
+  }
+
+
+}
+
+void
+cb_tool_button_hangup_clicked (GtkButton * button,
+                               MOKO_DIALER_APP_DATA * appdata)
+{
+  gsm_hangup ();
+  gtk_widget_hide (appdata->window_talking);
+
+}
+
+
+void
+on_dtmf_panel_user_input (GtkWidget * widget, gchar parac, gpointer user_data)
+{
+  char input[2];
+  input[0] = parac;
+  input[1] = 0;
+
+
+  MOKO_DIALER_APP_DATA *appdata = (MOKO_DIALER_APP_DATA *) user_data;
+  MokoDialerTextview *moko_dtmf_text_view = appdata->moko_dtmf_text_view;
+
+  moko_dialer_textview_insert (moko_dtmf_text_view, input);
+
+
+  gsm_dtmf_send (input[0]);
+//lgsm_voice_dtmf(lgsmh, buf[1]);
+
+}
+
+
+
+void
+window_talking_prepare (MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+//   moko_dialer_status_set_person_number(appdata->status_talking, appdata->g_peer_info.number);
+
+  if (!appdata->window_talking)
+    window_talking_init (appdata);
+
+  if (!appdata->window_talking)
+  {
+    DBG_WARN ("NO TALKING WINDOW INITIATED");
+    return;
+  }
+
+
+  if (appdata->g_peer_info.hasname)
+  {
+    DBG_TRACE ();
+    moko_dialer_status_set_person_image (appdata->status_talking,
+                                         appdata->g_peer_info.ID);
+    DBG_TRACE ();
+    moko_dialer_status_set_person_name (appdata->status_talking,
+                                        appdata->g_peer_info.name);
+    DBG_TRACE ();
+  }
+  else
+  {
+    moko_dialer_status_set_person_image (appdata->status_talking, "");
+    moko_dialer_status_set_person_name (appdata->status_talking, "");
+
+  }
+
+  DBG_LEAVE ();
+
+}
+
+gint
+timer_talking_time_out (MOKO_DIALER_APP_DATA * appdata)
+{
+//DBG_ENTER();
+  TIMER_DATA *timer_data = &(appdata->g_timer_data);
+
+
+  timer_data->ticks++;
+  timer_data->hour = timer_data->ticks / 3600;
+  timer_data->min = (timer_data->ticks - timer_data->hour * 3600) / 60;
+  timer_data->sec = timer_data->ticks % 60;
+
+
+  sprintf (timer_data->timestring, "Talking (%02d:%02d:%02d)",
+           timer_data->hour, timer_data->min, timer_data->sec);
+
+//ok,we update the label now.
+
+
+  moko_dialer_status_set_status_label (appdata->status_talking,
+                                       timer_data->timestring);
+  moko_dialer_status_update_icon (appdata->status_talking);
+
+  if (timer_data->stopsec != 0 && timer_data->ticks >= timer_data->stopsec)
+  {
+
+    timer_data->timeout = 1;
+    g_source_remove (timer_data->ptimer);
+    timer_data->ptimer = 0;
+    return 0;                   //0 stops the timer.
+  }
+  else
+    return 1;
+}
+
+void
+on_window_talking_hide (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+
+
+  if (appdata->g_timer_data.ptimer != 0)
+  {
+    g_source_remove (appdata->g_timer_data.ptimer);
+    appdata->g_timer_data.ptimer = 0;
+  }
+
+  gtk_widget_hide (appdata->wheel_talking);
+  gtk_widget_hide (appdata->toolbox_talking);
+
+//DBG_MESSAGE("%s, %s",appdata->g_state.starttime,appdata->g_state.startdate);
+  add_histroy_entry (appdata, appdata->g_state.historytype,
+                     appdata->g_peer_info.name,
+                     appdata->g_peer_info.number,
+                     appdata->g_peer_info.picpath,
+                     appdata->g_state.starttime,
+                     appdata->g_state.startdate, appdata->g_timer_data.ticks);
+
+
+}
+
+void
+on_window_talking_show (GtkWidget * widget, MOKO_DIALER_APP_DATA * appdata)
+{
+  DBG_ENTER ();
+
+  appdata->dtmf_in_talking_window = TRUE;
+  //hide the talking button in talking mode.
+
+  time_t timep;
+  struct tm *p;
+  time (&timep);
+  p = localtime (&timep);
+
+  sprintf (appdata->g_state.starttime, "%02d:%02d:%02d", p->tm_hour,
+           p->tm_min, p->tm_sec);
+  sprintf (appdata->g_state.startdate, "%04d/%02d/%02d", p->tm_year + 1900,
+           p->tm_mon, p->tm_mday);
+
+  memset (&(appdata->g_timer_data), 0, sizeof (appdata->g_timer_data));
+
+  appdata->g_timer_data.stopsec = 0;
+
+  appdata->g_timer_data.ptimer =
+    g_timeout_add (1000, (GSourceFunc) timer_talking_time_out, appdata);
+
+  if (appdata->wheel_talking)
+    gtk_widget_show (appdata->wheel_talking);
+
+  if (appdata->toolbox_talking)
+    gtk_widget_show (appdata->toolbox_talking);
+
+
+
+  DBG_LEAVE ();
+}
+
+
+
+
+gint
+window_talking_init (MOKO_DIALER_APP_DATA * p_dialer_data)
+{
+
+  DBG_ENTER ();
+
+
+  if (p_dialer_data->window_talking == 0)
+  {
+
+    MokoFingerWindow *window = NULL;
+    GtkWidget *vbox = gtk_vbox_new (FALSE, 0);;
+    GtkWidget *status = NULL;
+    GtkWidget *content_talk = NULL;
+    GtkWidget *content_dtmf = NULL;
+    MokoFingerToolBox *tools = NULL;
+    GtkWidget *mokodialerpanel = NULL;
+    MokoPixmapButton *button;
+    GtkWidget *image;
+
+
+//first, the talking content.
+
+    content_talk = gtk_vbox_new (FALSE, 0);
+    status = moko_dialer_status_new ();
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status0.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status1.png");
+    moko_dialer_status_add_status_icon (MOKO_DIALER_STATUS (status), "status2.png");
+    moko_dialer_status_set_icon_by_index (MOKO_DIALER_STATUS (status), 0);
+
+
+    moko_dialer_status_set_title_label (MOKO_DIALER_STATUS (status), "In Call");
+    moko_dialer_status_set_status_label (MOKO_DIALER_STATUS (status), "Talking ...(00:00:00)");
+
+    gtk_box_pack_start (GTK_BOX (content_talk), status, FALSE, FALSE, 0);
+
+
+    p_dialer_data->status_talking = MOKO_DIALER_STATUS (status);
+    p_dialer_data->content_talk = content_talk;
+
+    gtk_box_pack_start (GTK_BOX (vbox), content_talk, FALSE, FALSE, 0);
+
+
+//now the dtmf content
+    content_dtmf = gtk_vbox_new (FALSE, 0);
+    GtkWidget *eventbox1 = gtk_event_box_new ();
+    gtk_widget_show (eventbox1);
+    gtk_widget_set_name (eventbox1, "gtkeventbox-black");
+
+    GtkWidget *mokotextview = moko_dialer_textview_new ();
+
+    gtk_container_add (GTK_CONTAINER (eventbox1), mokotextview);
+
+    p_dialer_data->moko_dtmf_text_view = MOKO_DIALER_TEXTVIEW (mokotextview);
+
+    gtk_box_pack_start (GTK_BOX (content_dtmf), GTK_WIDGET (eventbox1), FALSE,
+                        FALSE, 2);
+
+
+
+    mokodialerpanel = moko_dialer_panel_new ();
+
+    gtk_widget_set_size_request (mokodialerpanel, 380, 384);
+    g_signal_connect (GTK_OBJECT (mokodialerpanel), "user_input",
+                      G_CALLBACK (on_dtmf_panel_user_input), p_dialer_data);
+    gtk_box_pack_start (GTK_BOX (content_dtmf), GTK_WIDGET (mokodialerpanel),
+                        TRUE, TRUE, 5);
+
+    gtk_box_pack_start (GTK_BOX (vbox), content_dtmf, FALSE, FALSE, 0);
+    p_dialer_data->content_dtmf = content_dtmf;
+
+
+//now the container--window
+    window = MOKO_FINGER_WINDOW (moko_finger_window_new ());
+    p_dialer_data->window_talking = GTK_WIDGET (window);
+    moko_finger_window_set_contents (window, GTK_WIDGET (vbox));
+    g_signal_connect ((gpointer) window, "show",
+                      G_CALLBACK (on_window_talking_show), p_dialer_data);
+    g_signal_connect ((gpointer) window, "hide",
+                      G_CALLBACK (on_window_talking_hide), p_dialer_data);
+
+
+
+
+
+    gtk_widget_show_all (GTK_WIDGET (window));
+//the gtk_widget_show_all is really bad, cause i have to call it and then hide some widgets.
+
+    gtk_widget_hide (content_dtmf);
+
+
+    //now the wheel and tool box, why should the wheel and toolbox created after the gtk_widget_show_all???
+//   gtk_widget_show(GTK_WIDGET(moko_finger_window_get_wheel(window)));
+
+    g_signal_connect (G_OBJECT (moko_finger_window_get_wheel (window)),
+                      "press_left_up",
+                      G_CALLBACK (openmoko_wheel_press_left_up_cb),
+                      p_dialer_data);
+    g_signal_connect (G_OBJECT (moko_finger_window_get_wheel (window)),
+                      "press_right_down",
+                      G_CALLBACK (openmoko_wheel_press_right_down_cb),
+                      p_dialer_data);
+
+
+
+    tools = moko_finger_window_get_toolbox (window);
+
+    button = MOKO_PIXMAP_BUTTON (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("speaker.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (button, image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_speaker_clicked),
+                      p_dialer_data);
+
+    button = MOKO_PIXMAP_BUTTON (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("dtmf.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (button, image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_dtmf_talk_clicked),
+                      p_dialer_data);
+    p_dialer_data->imageDTMF = image;
+    p_dialer_data->imageTALK =
+      file_new_image_from_relative_path ("talking.png");
+
+
+    button = MOKO_PIXMAP_BUTTON (moko_finger_tool_box_add_button_without_label (tools));
+    image = file_new_image_from_relative_path ("tony.png");
+    moko_pixmap_button_set_finger_toolbox_btn_center_image (button, image);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (cb_tool_button_hangup_clicked),
+                      p_dialer_data);
+    gtk_widget_show (GTK_WIDGET (tools));
+
+    p_dialer_data->dtmf_in_talking_window = 0;
+    p_dialer_data->wheel_talking = GTK_WIDGET (moko_finger_window_get_wheel (window));
+    p_dialer_data->toolbox_talking = GTK_WIDGET (tools);
+
+
+    DBG_LEAVE ();
+  }
+
+  return 1;
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-dialer/src/pin.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/pin.c	2007-02-08 17:29:07 UTC (rev 915)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/pin.c	2007-02-08 18:05:11 UTC (rev 916)
@@ -24,7 +24,7 @@
   }
   else
   {
-   gsm_pin_require(pinbuf);
+    gsm_pin_require (pinbuf);
     return lgsm_pin (lh, pinbuf);
   }
 
@@ -32,7 +32,7 @@
 }
 
 int
-pin_init (struct lgsm_handle *lh, const char *pin_preset)
+pin_init (struct lgsm_handle *lh, char *pin_preset)
 {
   pin = pin_preset;
   return lgsm_evt_handler_register (lh, GSMD_EVT_PIN, &pin_handler);





More information about the commitlog mailing list