r1516 - in trunk/src/target/OM-2007/applications/openmoko-messages: . src

alex_tang at sita.openmoko.org alex_tang at sita.openmoko.org
Tue Mar 27 10:34:54 CEST 2007


Author: alex_tang
Date: 2007-03-27 10:34:31 +0200 (Tue, 27 Mar 2007)
New Revision: 1516

Added:
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
Modified:
   trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac
   trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h
Log:
Add contact window to choose contacts.


Modified: trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac	2007-03-27 08:34:31 UTC (rev 1516)
@@ -17,8 +17,10 @@
                  AC_MSG_ERROR([*** Required dbus-glib-1 not installed ***]))
 PKG_CHECK_MODULES(DBUS, dbus-1,,
 	         AC_MSG_ERROR([*** Required dbus-1 not installed ***]))
-LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS"
-CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS"
+PKG_CHECK_MODULES(LIBEBOOK, libebook-1.2,,
+	         AC_MSG_ERROR([*** Required dbus-1 not installed ***]))
+LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS $LIBEBOOK_LIBS"
+CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS $LIBEBOOK_CFLAGS"
 
 # output stuff
 AC_OUTPUT([

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am	2007-03-27 08:34:31 UTC (rev 1516)
@@ -5,7 +5,13 @@
 
 bin_PROGRAMS = openmoko-messages
 
-openmoko_messages_SOURCES = main.c main.h foldersdb.c foldersdb.h callbacks.c callbacks.h detail-area.c detail-area.h sms-dialog-window.c sms-dialog-window.h sms-membership-window.c sms-membership-window.h
+openmoko_messages_SOURCES = main.c main.h \
+                            foldersdb.c foldersdb.h \
+			    callbacks.c callbacks.h \
+			    detail-area.c detail-area.h \
+			    sms-dialog-window.c sms-dialog-window.h \
+			    sms-membership-window.c sms-membership-window.h \
+			    sms-contact-window.c sms-contact-window.h
 
 openmoko_messages_LDADD = @OPENMOKO_LIBS@
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -20,517 +20,576 @@
 
 #include "callbacks.h"
 #include "detail-area.h"
+#include "sms-contact-window.h"
 #include <gtk/gtk.h>
 #include <dbus/dbus.h>
 #include <dbus/dbus-glib.h>
 
+void cb_addressBtn_clicked (GtkButton* button, gpointer* data);
+void sms_contact_select_done (GtkWidget* widget, gpointer data);
+
 void
 send_signal_to_footer (DBusConnection* bus, gchar* message_str)
 {
-    DBusMessage *message;
+  DBusMessage *message;
 
-    if(message_str == NULL)
-        g_debug("Input string is null");
-    else
-        g_debug(message_str);
+  if(message_str == NULL)
+    g_debug("Input string is null");
+  else
+    g_debug(message_str);
 
-    message = dbus_message_new_signal ("/org/openmoko/footer",
-                                       "org.openmoko.dbus.TaskManager", 
-				       "push_statusbar_message");
-    dbus_message_append_args (message,
-                              DBUS_TYPE_STRING, &message_str,
-                              DBUS_TYPE_INVALID);
-    dbus_connection_send (bus, message, NULL);
-    dbus_message_unref (message);
+  message = dbus_message_new_signal ("/org/openmoko/footer",
+                                     "org.openmoko.dbus.TaskManager",
+                                     "push_statusbar_message");
+  dbus_message_append_args (message,
+                            DBUS_TYPE_STRING, &message_str,
+                            DBUS_TYPE_INVALID);
+  dbus_connection_send (bus, message, NULL);
+  dbus_message_unref (message);
 }
 
-static gboolean 
+static gboolean
 model_number_helper (GtkTreeModel* model,
-		     GtkTreePath*  path,
-		     GtkTreeIter*  iter,
-		     gpointer      data)
+                     GtkTreePath*  path,
+                     GtkTreeIter*  iter,
+                     gpointer      data)
 {
-    MessengerData* d = (MessengerData*)data;
-    d->msg_num ++;
-    return FALSE;
+  MessengerData* d = (MessengerData*)data;
+  d->msg_num ++;
+  return FALSE;
 }
 
 gint get_model_number (MessengerData* d)
 {
-    d->msg_num = 0;
-    gtk_tree_model_foreach (d->filter,model_number_helper,d);
-    return d->msg_num;
+  d->msg_num = 0;
+  gtk_tree_model_foreach (d->filter,model_number_helper,d);
+  return d->msg_num;
 }
 
 gboolean cb_filter_changed(GtkWidget* widget, gchar* text, MessengerData* d)
 {
-    d->currentfolder = g_strdup(text);
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
-    gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d));
-    send_signal_to_footer(d->bus,str);
-    
-    return FALSE;
+  d->currentfolder = g_strdup(text);
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
+  gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d));
+  send_signal_to_footer(d->bus,str);
+
+  return FALSE;
 }
 
 void cb_new_sms (GtkMenuItem* item, MessengerData* d)
 {
-    SmsDialogWindow* sms_window = sms_dialog_window_new();
-    sms_dialog_window_set_title (sms_window,"New SMS");
-    gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE);
-    gtk_widget_show_all (GTK_WIDGET(sms_window));
+  SmsDialogWindow* sms_window = sms_dialog_window_new();
+  sms_dialog_window_set_title (sms_window,"New SMS");
+  gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE);
+  gtk_widget_show_all (GTK_WIDGET(sms_window));
+
+  g_signal_connect (G_OBJECT(sms_window->addressBtn),
+                    "clicked",
+                    G_CALLBACK(cb_addressBtn_clicked),
+                    sms_window->toEntry );
 }
 
 void cb_new_mail (GtkMenuItem* item, MessengerData* d)
 {
-    SmsDialogWindow* mail_window = sms_dialog_window_new();
-    mail_dialog_window_set_title (mail_window,"New Email");
-    gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE);
-    gtk_widget_show_all ( GTK_WIDGET(mail_window) );
+  SmsDialogWindow* mail_window = sms_dialog_window_new();
+  mail_dialog_window_set_title (mail_window,"New Email");
+  gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE);
+  gtk_widget_show_all ( GTK_WIDGET(mail_window) );
+
+  g_signal_connect (G_OBJECT(mail_window->addressBtn),
+                    "clicked",
+                    G_CALLBACK(cb_addressBtn_clicked),
+                    mail_window->toEntry);
 }
 
 void cb_new_folder (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("new folder called");
-    GtkWidget* hbox;
-    GtkWidget* nfResetBtn;
-    GtkWidget* nfConfirmBtn;
+  g_debug ("new folder called");
+  GtkWidget* hbox;
+  GtkWidget* nfResetBtn;
+  GtkWidget* nfConfirmBtn;
 
-    if ((d->nfWin != NULL) && (d->nfWin->window != NULL))
-        gtk_entry_set_text (GTK_ENTRY(d->nfEntry),"");
-    else
+  if ((d->nfWin != NULL) && (d->nfWin->window != NULL))
+    gtk_entry_set_text (GTK_ENTRY(d->nfEntry),"");
+  else
     {
-        d->nfWin = moko_dialog_window_new();
-	GtkWidget* nfBox = gtk_vbox_new (FALSE,10);
-	gtk_widget_set_size_request (nfBox, 480, -1);
-	GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1);
-	gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10);
-	moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder");
-	
-	GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:");
-	gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5);
-	gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0);
-	
-	d->nfEntry = gtk_entry_new ();
-	gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0);
-	
-	hbox = gtk_hbox_new (FALSE,20);
-	nfConfirmBtn = gtk_button_new_with_label ("OK");
-	nfResetBtn = gtk_button_new_with_label ("Reset");
-	gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0);
+      d->nfWin = moko_dialog_window_new();
+      GtkWidget* nfBox = gtk_vbox_new (FALSE,10);
+      gtk_widget_set_size_request (nfBox, 480, -1);
+      GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1);
+      gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10);
+      moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder");
 
-	gtk_container_add (GTK_CONTAINER(nfAlign),nfBox);
+      GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:");
+      gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5);
+      gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0);
 
-	moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign);
-	g_signal_connect (G_OBJECT(nfConfirmBtn), 
-	                  "clicked",
-			  G_CALLBACK(cb_nfBtn_clicked),
-			  d);
-	g_signal_connect (G_OBJECT(nfResetBtn),
-	                  "clicked",
-			  G_CALLBACK(cb_nfResetBtn_clicked),
-			  d);
+      d->nfEntry = gtk_entry_new ();
+      gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0);
+
+      hbox = gtk_hbox_new (FALSE,20);
+      nfConfirmBtn = gtk_button_new_with_label ("OK");
+      nfResetBtn = gtk_button_new_with_label ("Reset");
+      gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0);
+      gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0);
+
+      gtk_container_add (GTK_CONTAINER(nfAlign),nfBox);
+
+      moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign);
+      g_signal_connect (G_OBJECT(nfConfirmBtn),
+                        "clicked",
+                        G_CALLBACK(cb_nfBtn_clicked),
+                        d);
+      g_signal_connect (G_OBJECT(nfResetBtn),
+                        "clicked",
+                        G_CALLBACK(cb_nfResetBtn_clicked),
+                        d);
     }
-    gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE);
-    gtk_widget_show_all (d->nfWin);
+  gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE);
+  gtk_widget_show_all (d->nfWin);
 }
 
 void cb_mode_read (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("mode read");
-    message* msg;
-    GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
+  g_debug ("mode read");
+  message* msg;
+  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
 
-    if ( has_selection ){
-        msg = g_malloc(sizeof(message));
-        gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
+  if ( has_selection )
+    {
+      msg = g_malloc(sizeof(message));
+      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
     }
-    else msg = NULL;
-    detail_read_message (DETAIL_AREA(d->details),msg);
+  else msg = NULL;
+  detail_read_message (DETAIL_AREA(d->details),msg);
 }
 
 void cb_mode_reply (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("mode reply");
-    message* msg;
-    GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
+  g_debug ("mode reply");
+  message* msg;
+  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
 
-    if ( has_selection ) {
-        msg = g_malloc(sizeof(message));
-        gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
-    }else msg = NULL;
-    
-    SmsDialogWindow* sms_window = sms_dialog_window_new();
-    if (msg != NULL){
-        sms_dialog_window_set_title (sms_window,"Reply SMS");
-	sms_dialog_reply_message (sms_window,msg);
-    }else sms_dialog_window_set_title (sms_window,"New SMS");
-    gtk_widget_show_all ( GTK_WIDGET(sms_window) );
+  if ( has_selection )
+    {
+      msg = g_malloc(sizeof(message));
+      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
+    }
+  else msg = NULL;
+
+  SmsDialogWindow* sms_window = sms_dialog_window_new();
+  if (msg != NULL)
+    {
+      sms_dialog_window_set_title (sms_window,"Reply SMS");
+      sms_dialog_reply_message (sms_window,msg);
+    }
+  else sms_dialog_window_set_title (sms_window,"New SMS");
+  gtk_widget_show_all ( GTK_WIDGET(sms_window) );
 }
 
 void cb_mode_forward (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("mode forward");
-    message* msg;
-    GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
+  g_debug ("mode forward");
+  message* msg;
+  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view ));
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter );
 
-    if ( has_selection ){
-        msg = g_malloc(sizeof(message));
-        gtk_tree_model_get( model, &iter, 
-	                    COLUMN_FROM, &msg->name, 
-			    COLUMN_SUBJECT, &msg->subject,
-			    COLUMN_FOLDER, &msg->folder,
-			    COLUMN_CONTENT, &msg->content,
-			    -1 );
+  if ( has_selection )
+    {
+      msg = g_malloc(sizeof(message));
+      gtk_tree_model_get( model, &iter,
+                          COLUMN_FROM, &msg->name,
+                          COLUMN_SUBJECT, &msg->subject,
+                          COLUMN_FOLDER, &msg->folder,
+                          COLUMN_CONTENT, &msg->content,
+                          -1 );
     }
-    else msg = NULL;
+  else msg = NULL;
 
-    SmsDialogWindow* sms_window = sms_dialog_window_new();
-    sms_dialog_window_set_title (sms_window,"Forward SMS");
-    sms_dialog_forward_message (sms_window, msg);
-    gtk_widget_show_all ( GTK_WIDGET(sms_window) );
+  SmsDialogWindow* sms_window = sms_dialog_window_new();
+  sms_dialog_window_set_title (sms_window,"Forward SMS");
+  sms_dialog_forward_message (sms_window, msg);
+  gtk_widget_show_all ( GTK_WIDGET(sms_window) );
 }
 
 void cb_delete_folder (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("delete folder called");
-    GtkWidget* msgDialog;
-    
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-    gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
-    if (!g_strcasecmp(oldName,"Inbox")  ||
-        !g_strcasecmp(oldName,"Outbox") ||
-	!g_strcasecmp(oldName,"Draft")  ||
-	!g_strcasecmp(oldName,"Sent")   ||
-	!g_strcasecmp(oldName,"Trash")){
-	msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
-                                            GTK_DIALOG_DESTROY_WITH_PARENT,
-                                            GTK_MESSAGE_WARNING,
-                                            GTK_BUTTONS_CLOSE,
-                                            g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) );
-        gtk_dialog_run (GTK_DIALOG (msgDialog));
-	gtk_widget_destroy (msgDialog);
-    }else{
-        GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
-                                                    GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                    GTK_MESSAGE_WARNING,
-                                                    GTK_BUTTONS_OK_CANCEL,
-        g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder));
-	gint result = gtk_dialog_run (GTK_DIALOG (dialog));
-	switch (result){
-	    case GTK_RESPONSE_OK:
-	                    g_debug ("clicked ok");
-			    delete_folder(d,oldName);
-			    break;
-            case GTK_RESPONSE_CANCEL: g_debug ("clicked cancel"); break;
-	    default: g_debug ("clicked default"); break;
-	}
-	gtk_widget_destroy (dialog);
+  g_debug ("delete folder called");
+  GtkWidget* msgDialog;
+
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
+  if (!g_strcasecmp(oldName,"Inbox")  ||
+      !g_strcasecmp(oldName,"Outbox") ||
+      !g_strcasecmp(oldName,"Draft")  ||
+      !g_strcasecmp(oldName,"Sent")   ||
+      !g_strcasecmp(oldName,"Trash"))
+    {
+      msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
+                                          GTK_DIALOG_DESTROY_WITH_PARENT,
+                                          GTK_MESSAGE_WARNING,
+                                          GTK_BUTTONS_CLOSE,
+                                          g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) );
+      gtk_dialog_run (GTK_DIALOG (msgDialog));
+      gtk_widget_destroy (msgDialog);
     }
+  else
+    {
+      GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
+                          GTK_DIALOG_DESTROY_WITH_PARENT,
+                          GTK_MESSAGE_WARNING,
+                          GTK_BUTTONS_OK_CANCEL,
+                          g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder));
+      gint result = gtk_dialog_run (GTK_DIALOG (dialog));
+      switch (result)
+        {
+        case GTK_RESPONSE_OK:
+          g_debug ("clicked ok");
+          delete_folder(d,oldName);
+          break;
+        case GTK_RESPONSE_CANCEL:
+          g_debug ("clicked cancel");
+          break;
+        default:
+          g_debug ("clicked default");
+          break;
+        }
+      gtk_widget_destroy (dialog);
+    }
 }
 
 void cb_delete_message (GtkMenuItem* item, MessengerData* d)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    GtkTreeIter childiter;
-    GtkTreeSelection* selection;
-	  
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view));
-    gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter);
-    if (has_selection){
-        gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter);
-	gtk_list_store_remove (d->liststore, &childiter);
-    }else {
-        GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
-	                                            GTK_DIALOG_DESTROY_WITH_PARENT,
-						    GTK_MESSAGE_WARNING,
-						    GTK_BUTTONS_OK,
-						    "No message selected");
-        gtk_dialog_run (GTK_DIALOG (dialog));
-        gtk_widget_destroy (dialog);
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  GtkTreeIter childiter;
+  GtkTreeSelection* selection;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view));
+  gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter);
+  if (has_selection)
+    {
+      gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter);
+      gtk_list_store_remove (d->liststore, &childiter);
     }
+  else
+    {
+      GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
+                          GTK_DIALOG_DESTROY_WITH_PARENT,
+                          GTK_MESSAGE_WARNING,
+                          GTK_BUTTONS_OK,
+                          "No message selected");
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+    }
 }
 
 void cb_mmitem_activate (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("message membership");
-    d->mmWin = sms_membership_window_new();
-    gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE);
-    sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore);
-    sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist);
-    sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) );
+  g_debug ("message membership");
+  d->mmWin = sms_membership_window_new();
+  gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE);
+  sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore);
+  sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist);
+  sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) );
 }
 
 void cb_frBtn_clicked (GtkButton* button, MessengerData* d)
 {
-    GSList *c;
-    gchar* folder;
-    
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-    gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
-    gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry)));
-    gtk_label_set_text (GTK_LABEL(menulabel),newName);
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
-		
-    c = d->folderlist;
-    for (; c; c = g_slist_next(c) ){
-        folder = (gchar*) c->data;
-	if (!g_strcasecmp(folder,oldName)){
-	    g_debug ("old %s, new %s", oldName, newName);
-	    c->data = g_strdup(newName); 
-	}
+  GSList *c;
+  gchar* folder;
+
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
+  gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry)));
+  gtk_label_set_text (GTK_LABEL(menulabel),newName);
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
+
+  c = d->folderlist;
+  for (; c; c = g_slist_next(c) )
+    {
+      folder = (gchar*) c->data;
+      if (!g_strcasecmp(folder,oldName))
+        {
+          g_debug ("old %s, new %s", oldName, newName);
+          c->data = g_strdup(newName);
+        }
     }
-    d->filtmenu = reload_filter_menu (d,d->folderlist);
-    MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
-    g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
-    moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu));
-    gtk_widget_show_all (GTK_WIDGET(menubox));
-    gtk_widget_hide (d->frWin);
+  d->filtmenu = reload_filter_menu (d,d->folderlist);
+  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
+  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
+  moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu));
+  gtk_widget_show_all (GTK_WIDGET(menubox));
+  gtk_widget_hide (d->frWin);
 }
 
 void cb_frResetBtn_clicked (GtkButton* button, GtkWidget* entry)
 {
-    gtk_entry_set_text(GTK_ENTRY(entry),"");
+  gtk_entry_set_text(GTK_ENTRY(entry),"");
 }
 
 void cb_fnitem_activate (GtkMenuItem* item, MessengerData* d)
 {
-    g_debug ("folder rename called");
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  g_debug ("folder rename called");
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
 
-    gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
-    if (!g_strcasecmp(oldName,"Inbox") ||
-        !g_strcasecmp(oldName,"Outbox") ||
-	!g_strcasecmp(oldName,"Draft") ||
-	!g_strcasecmp(oldName,"Sent") ||
-	!g_strcasecmp(oldName,"Sent")){
-	GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
-	                                               GTK_DIALOG_DESTROY_WITH_PARENT,
-						       GTK_MESSAGE_WARNING,
-						       GTK_BUTTONS_CLOSE,
-        g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) );
-	gtk_dialog_run (GTK_DIALOG (msgDialog));
-	gtk_widget_destroy (msgDialog);
-    }else {
-        GtkWidget* hbox;
-	GtkWidget* frResetBtn;
-	GtkWidget* frConfirmBtn;
+  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
+  if (!g_strcasecmp(oldName,"Inbox") ||
+      !g_strcasecmp(oldName,"Outbox") ||
+      !g_strcasecmp(oldName,"Draft") ||
+      !g_strcasecmp(oldName,"Sent") ||
+      !g_strcasecmp(oldName,"Sent"))
+    {
+      GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)),
+                             GTK_DIALOG_DESTROY_WITH_PARENT,
+                             GTK_MESSAGE_WARNING,
+                             GTK_BUTTONS_CLOSE,
+                             g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) );
+      gtk_dialog_run (GTK_DIALOG (msgDialog));
+      gtk_widget_destroy (msgDialog);
+    }
+  else
+    {
+      GtkWidget* hbox;
+      GtkWidget* frResetBtn;
+      GtkWidget* frConfirmBtn;
 
-        if ((d->frWin != NULL) && (d->frWin->window != NULL))
-	    gtk_entry_set_text (GTK_ENTRY(d->frEntry),"");
-	else{
-	    d->frWin = moko_dialog_window_new();
-	    GtkWidget* frBox = gtk_vbox_new (FALSE,10);
-	    gtk_widget_set_size_request (frBox, 480, -1);
-	    GtkWidget* frAlign = gtk_alignment_new (0,0,1,1);
-	    gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10);
-	    moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename");
+      if ((d->frWin != NULL) && (d->frWin->window != NULL))
+        gtk_entry_set_text (GTK_ENTRY(d->frEntry),"");
+      else
+        {
+          d->frWin = moko_dialog_window_new();
+          GtkWidget* frBox = gtk_vbox_new (FALSE,10);
+          gtk_widget_set_size_request (frBox, 480, -1);
+          GtkWidget* frAlign = gtk_alignment_new (0,0,1,1);
+          gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10);
+          moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename");
 
-	    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-	    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-	    GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:",	gtk_label_get_text (GTK_LABEL(menulabel))));
-	    gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5);
-	    gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0);
+          GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+          GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+          GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:",	gtk_label_get_text (GTK_LABEL(menulabel))));
+          gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5);
+          gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0);
 
-	    d->frEntry = gtk_entry_new ();
-	    gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0);
+          d->frEntry = gtk_entry_new ();
+          gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0);
 
-	    hbox = gtk_hbox_new (FALSE,20);
-	    frConfirmBtn = gtk_button_new_with_label ("OK");
-	    frResetBtn = gtk_button_new_with_label ("Reset");
-	    gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0);
-	    gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0);
-	    gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0);
-	    gtk_container_add (GTK_CONTAINER(frAlign),frBox);
-	    
-	    moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign);
-	    g_signal_connect (G_OBJECT(frConfirmBtn), 
-	                      "clicked",
-			      G_CALLBACK(cb_frBtn_clicked),
-			      d);
-            g_signal_connect (G_OBJECT(frResetBtn),
-	                      "clicked",
-		              G_CALLBACK(cb_frResetBtn_clicked),
-			      d->frEntry);
-	}
-	gtk_widget_show_all ( GTK_WIDGET(d->frWin) );
-   }
+          hbox = gtk_hbox_new (FALSE,20);
+          frConfirmBtn = gtk_button_new_with_label ("OK");
+          frResetBtn = gtk_button_new_with_label ("Reset");
+          gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0);
+          gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0);
+          gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0);
+          gtk_container_add (GTK_CONTAINER(frAlign),frBox);
+
+          moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign);
+          g_signal_connect (G_OBJECT(frConfirmBtn),
+                            "clicked",
+                            G_CALLBACK(cb_frBtn_clicked),
+                            d);
+          g_signal_connect (G_OBJECT(frResetBtn),
+                            "clicked",
+                            G_CALLBACK(cb_frResetBtn_clicked),
+                            d->frEntry);
+        }
+      gtk_widget_show_all ( GTK_WIDGET(d->frWin) );
+    }
 }
 
 void cb_nfBtn_clicked (GtkButton* button, MessengerData* d)
 {
-    gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry)));
-    g_debug ("new folder %s",folder);
-    d->folderlist = g_slist_append (d->folderlist,folder);
-    d->filtmenu = reload_filter_menu (d,d->folderlist);
-    MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window );
-    g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
-    moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
-    gtk_widget_show_all (GTK_WIDGET(menubox));
-    foldersdb_update (d->folderlist);
-    update_folder_sensitive(d, d->folderlist);
-    gtk_widget_hide (d->nfWin);
+  gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry)));
+  g_debug ("new folder %s",folder);
+  d->folderlist = g_slist_append (d->folderlist,folder);
+  d->filtmenu = reload_filter_menu (d,d->folderlist);
+  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window );
+  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
+  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
+  gtk_widget_show_all (GTK_WIDGET(menubox));
+  foldersdb_update (d->folderlist);
+  update_folder_sensitive(d, d->folderlist);
+  gtk_widget_hide (d->nfWin);
 }
 
 void cb_nfResetBtn_clicked (GtkButton* button, MessengerData* d)
 {
-    gtk_entry_set_text(GTK_ENTRY(d->nfEntry),"");
-    g_debug ("reset entry");
+  gtk_entry_set_text(GTK_ENTRY(d->nfEntry),"");
+  g_debug ("reset entry");
 }
 
 void cb_dfBtn_clicked (GtkButton* button, MessengerData* d)
 {
-    GSList* c;
+  GSList* c;
 
-    for( c =d->folderlist; c; c=g_slist_next(c)){
-        if(!g_strcasecmp((gchar*)c->data, d->currentfolder)) {
-	    d->folderlist = g_slist_remove (d->folderlist, c->data);
-	    break;
-	}
+  for( c =d->folderlist; c; c=g_slist_next(c))
+    {
+      if(!g_strcasecmp((gchar*)c->data, d->currentfolder))
+        {
+          d->folderlist = g_slist_remove (d->folderlist, c->data);
+          break;
+        }
     }
 
-    d->filtmenu = reload_filter_menu (d,d->folderlist);
-    MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
-    g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
-    moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
+  d->filtmenu = reload_filter_menu (d,d->folderlist);
+  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
+  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
+  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
 
-    /*set the default filter item to "Inbox" */
-    gchar* str = g_strdup("Inbox");
-    moko_menu_box_set_active_filter (menubox,str);
-    gtk_widget_show_all (GTK_WIDGET(menubox));
-    update_folder_sensitive (d, d->folderlist);
-    
-    /*result inform */
-    GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))),
-                                                GTK_DIALOG_DESTROY_WITH_PARENT,
-						GTK_MESSAGE_INFO,
-						GTK_BUTTONS_CLOSE,
-						"Delete successful");
-    gtk_dialog_run (GTK_DIALOG (dialog));
-    gtk_widget_destroy (dialog);
+  /*set the default filter item to "Inbox" */
+  gchar* str = g_strdup("Inbox");
+  moko_menu_box_set_active_filter (menubox,str);
+  gtk_widget_show_all (GTK_WIDGET(menubox));
+  update_folder_sensitive (d, d->folderlist);
+
+  /*result inform */
+  GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))),
+                      GTK_DIALOG_DESTROY_WITH_PARENT,
+                      GTK_MESSAGE_INFO,
+                      GTK_BUTTONS_CLOSE,
+                      "Delete successful");
+  gtk_dialog_run (GTK_DIALOG (dialog));
+  gtk_widget_destroy (dialog);
 }
 
 void delete_folder (MessengerData* d, gchar* oldName)
 {
-    GSList* c;
+  GSList* c;
 
-    for( c =d->folderlist; c; c=g_slist_next(c)) {
-        if(!g_strcasecmp((gchar*)c->data, oldName)) {
-	    d->folderlist = g_slist_remove (d->folderlist, c->data);	
-	    break;
+  for( c =d->folderlist; c; c=g_slist_next(c))
+    {
+      if(!g_strcasecmp((gchar*)c->data, oldName))
+        {
+          d->folderlist = g_slist_remove (d->folderlist, c->data);
+          break;
         }
     }
 
-    d->filtmenu = reload_filter_menu (d,d->folderlist);
-    MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
-    g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
-    moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
+  d->filtmenu = reload_filter_menu (d,d->folderlist);
+  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) );
+  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
+  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu));
 
-    /*set the default filter item to "Inbox" */
-    gchar* str = g_strdup("Inbox");
-    moko_menu_box_set_active_filter (menubox,str);
-    gtk_widget_show_all (GTK_WIDGET(menubox));
-    update_folder_sensitive (d, d->folderlist);
+  /*set the default filter item to "Inbox" */
+  gchar* str = g_strdup("Inbox");
+  moko_menu_box_set_active_filter (menubox,str);
+  gtk_widget_show_all (GTK_WIDGET(menubox));
+  update_folder_sensitive (d, d->folderlist);
 }
 
 void on_mmode_rdo_btn_clicked (gchar* folder)
 {
-    g_debug ("switch to %s folder", folder);
+  g_debug ("switch to %s folder", folder);
 }
 
 void cb_cursor_changed(GtkTreeSelection* selection, MessengerData* d)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    GtkTreeIter childiter;
-    GtkTreeView* view;
-    message* msg;
-    GdkPixbuf* icon;
-    GError*   error = NULL;
-    
-    view = gtk_tree_selection_get_tree_view( selection );
-    if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) {
-        msg = g_malloc(sizeof(message));
-        gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1);
-        
-        if (msg->status == UNREAD) {
-	    icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);
-	    msg->status = READ;
-	    gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter);
-	    gtk_list_store_set (d->liststore, &childiter, 
-	                        COLUMN_ICON, icon,
-				COLUMN_STATUS, msg->status, 
-				-1);
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  GtkTreeIter childiter;
+  GtkTreeView* view;
+  message* msg;
+  GdkPixbuf* icon;
+  GError*   error = NULL;
+
+  view = gtk_tree_selection_get_tree_view( selection );
+  if ( gtk_tree_selection_get_selected( selection, &model, &iter ) )
+    {
+      msg = g_malloc(sizeof(message));
+      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1);
+
+      if (msg->status == UNREAD)
+        {
+          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);
+          msg->status = READ;
+          gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter);
+          gtk_list_store_set (d->liststore, &childiter,
+                              COLUMN_ICON, icon,
+                              COLUMN_STATUS, msg->status,
+                              -1);
         }
-        detail_read_message (DETAIL_AREA(d->details),msg);
-      }
+      detail_read_message (DETAIL_AREA(d->details),msg);
+    }
 }
 
 void
 on_btnsend_clicked                 (GtkButton       *button,
                                     gpointer         user_data)
 {
-    g_debug("Button send clicked\n");
+  g_debug("Button send clicked\n");
 }
 
 void
 on_btn_address_clicked                 (GtkButton       *button,
                                         gpointer         user_data)
 {
-    g_debug("Button address clicked\n");
+  g_debug("Button address clicked\n");
 }
 
 void cb_search_entry_changed (GtkEditable* editable, MessengerData* d)
 {
-    GtkWidget* search_entry = GTK_WIDGET(editable);
-    d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry)));
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
-    g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d));
-    gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d));
-    send_signal_to_footer(d->bus,str);
+  GtkWidget* search_entry = GTK_WIDGET(editable);
+  d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry)));
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
+  g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d));
+  gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d));
+  send_signal_to_footer(d->bus,str);
 }
 
 void cb_search_on (MessengerData* d)
 {
-    g_debug ("search on");
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-    gtk_label_set_text (GTK_LABEL(menulabel),"Search Result");
-    d->searchOn = TRUE;
+  g_debug ("search on");
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  gtk_label_set_text (GTK_LABEL(menulabel),"Search Result");
+  d->searchOn = TRUE;
 }
 
 void cb_search_off (MessengerData* d)
 {
-    g_debug ("search off ");
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-    gtk_label_set_text (GTK_LABEL(menulabel),"Inbox");
-    d->searchOn = FALSE; 
-    GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox)));
-    gtk_entry_set_text (GTK_ENTRY(search_entry), "");
-    d->s_key = "";
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
+  g_debug ("search off ");
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  gtk_label_set_text (GTK_LABEL(menulabel),"Inbox");
+  d->searchOn = FALSE;
+  GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox)));
+  gtk_entry_set_text (GTK_ENTRY(search_entry), "");
+  d->s_key = "";
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
 }
 
+void cb_addressBtn_clicked (GtkButton* button, gpointer* data)
+{
+  GtkWidget* contactWin = sms_contact_new();
+  gtk_window_set_decorated (GTK_WINDOW(contactWin),FALSE);
+  GtkWidget* toEntry = (GtkWidget*)data;
+  g_signal_connect (G_OBJECT(contactWin),"contact_select_done",
+                    G_CALLBACK(sms_contact_select_done), toEntry);
+  gtk_widget_show(contactWin);
+}
 
+void sms_contact_select_done (GtkWidget* widget, gpointer data)
+{
+  g_debug("sms select contact done");
+  GtkWidget* toEntry = (GtkWidget*)data;
+  gtk_entry_set_text (GTK_ENTRY(toEntry),SMS_CONTACT_WINDOW(widget)->nameList);
+}
+

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -50,7 +50,7 @@
                                         gpointer         user_data);
 void on_btn_address_clicked            (GtkButton       *button,
                                         gpointer         user_data);
-                                        
+
 void cb_search_entry_changed (GtkEditable* editable, MessengerData* d);
 void cb_search_on (MessengerData* d);
 void cb_search_off (MessengerData* d);

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -15,23 +15,20 @@
  *
  * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: Alex $]
  *
- */ 
+ */
 
 #include "detail-area.h"
-#include "callbacks.h"
 #include "main.h"
 
-GtkWidget* detail_area_mode_edit (DetailArea *self);
-GtkWidget* detail_area_new_mail (DetailArea* self);
 GtkWidget* detail_area_mode_read (DetailArea* self);
-GtkWidget* detail_area_mode_membership (DetailArea* self);
 
 G_DEFINE_TYPE (DetailArea, detail_area, GTK_TYPE_SCROLLED_WINDOW)
 
 #define DETAIL_AREA_GET_PRIVATE(o)     (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DETAIL_AREA, DetailAreaPrivate))
 
-typedef struct _DetailAreaPrivate{
-} DetailAreaPrivate;
+typedef struct _DetailAreaPrivate
+  {}
+DetailAreaPrivate;
 
 /* parent class pointer */
 GtkWindowClass* parent_class = NULL;
@@ -40,333 +37,128 @@
 gboolean
 _expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data)
 {
-	
-	return TRUE;
+  return TRUE;
 }
 
 static void
 detail_area_dispose (GObject *object)
 {
-    if (G_OBJECT_CLASS (detail_area_parent_class)->dispose)
-        G_OBJECT_CLASS (detail_area_parent_class)->dispose (object);
+  if (G_OBJECT_CLASS (detail_area_parent_class)->dispose)
+    G_OBJECT_CLASS (detail_area_parent_class)->dispose (object);
 }
 
 static void
 detail_area_finalize (GObject *object)
 {
-    G_OBJECT_CLASS (detail_area_parent_class)->finalize (object);
+  G_OBJECT_CLASS (detail_area_parent_class)->finalize (object);
 }
-    
+
 static void
 detail_area_class_init (DetailAreaClass *klass)
 {
-    /* hook parent */
-    GObjectClass *object_class = G_OBJECT_CLASS (klass);
-    parent_class = g_type_class_peek_parent(klass);
+  /* hook parent */
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  parent_class = g_type_class_peek_parent(klass);
 
-    /* register private data */
-    g_type_class_add_private (klass, sizeof (DetailAreaPrivate));
+  /* register private data */
+  g_type_class_add_private (klass, sizeof (DetailAreaPrivate));
 
-    object_class->dispose = detail_area_dispose;
-    object_class->finalize = detail_area_finalize;
-    
+  object_class->dispose = detail_area_dispose;
+  object_class->finalize = detail_area_finalize;
+
 }
 
 static void
 detail_area_init (DetailArea *self)
 {
-    gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER );
-    
-    self->readAttributes = g_malloc (sizeof(ReadAttributes));
-    self->editAttributes = g_malloc (sizeof(EditAttributes));
-    self->notebook = GTK_NOTEBOOK( gtk_notebook_new() );
-    //gtk_notebook_append_page (self->notebook,detail_area_mode_edit(self),NULL);
-    //gtk_notebook_append_page (self->notebook,detail_area_new_mail(self),NULL);
-    gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL);
-    
-    //gtk_notebook_append_page (self->notebook,detail_area_mode_membership(self),NULL);
-    gtk_notebook_set_show_tabs (self->notebook,FALSE);
-    gtk_notebook_set_show_border (self->notebook,FALSE);
-    //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(self), GTK_WIDGET(self->notebook) );
- 
+  gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER );
+
+  self->readAttributes = g_malloc (sizeof(ReadAttributes));
+  self->editAttributes = g_malloc (sizeof(EditAttributes));
+  self->notebook = GTK_NOTEBOOK( gtk_notebook_new() );
+  gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL);
+  gtk_notebook_set_show_tabs (self->notebook,FALSE);
+  gtk_notebook_set_show_border (self->notebook,FALSE);
 }
 
 GtkWidget* detail_area_new (void)
 {
-    return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL ));
+  return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL ));
 }
 
 GtkWidget* detail_area_get_notebook(DetailArea* self)
 {
-    return GTK_WIDGET(self->notebook);
+  return GTK_WIDGET(self->notebook);
 }
 
-GtkWidget* detail_area_mode_edit (DetailArea* self)
-{
-    /* create detail box */
-    self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0));
-    EditAttributes* editAttributes = self->editAttributes;
-
-    /* create tool box */
-    self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0)); 
-    MokoToolBox* mokobox = (MokoToolBox*)MOKO_TOOL_BOX(moko_tool_box_new());
-    GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox));
-    editAttributes->sendBtn = gtk_button_new_with_label("Send");
-    gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->sendBtn), FALSE, FALSE, 0 );
-    editAttributes->addrBtn = gtk_button_new_with_label("Address");
-    gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->addrBtn), FALSE, FALSE, 0 );
-
-    /* fill entry area */
-    self->entryarea = MOKO_FIXED(moko_fixed_new());
-    GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-    gtk_alignment_set_padding (alignment, 5, 5, 5, 5);
-    GtkWidget* entrybox = gtk_hbox_new(FALSE,0);
-    GtkWidget* toLabel = gtk_label_new("To:");
-    gtk_widget_set_size_request (toLabel, 40, -1);
-    editAttributes->toEntry = gtk_entry_new();
-    gtk_widget_set_size_request (editAttributes->toEntry, 300, -1);
-    GtkWidget* inputLabel = gtk_label_new("(120/1)");
-    gtk_widget_set_size_request (inputLabel, 80, -1);
-    gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),editAttributes->toEntry,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),inputLabel,FALSE,TRUE,0);
-    gtk_container_add (GTK_CONTAINER(alignment), entrybox);
-
-    moko_fixed_set_cargo(MOKO_FIXED(self->entryarea),GTK_WIDGET(alignment));
-
-    /* fill textview */
-    editAttributes->txtView = gtk_text_view_new();
-    GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-    gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50);
-    gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(editAttributes->txtView),GTK_WRAP_CHAR);
-    gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(editAttributes->txtView));
-
-    gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0);
-
-    return GTK_WIDGET(self->detailbox);
-}
-
-//TODO move mail function to edit mode
-GtkWidget* detail_area_new_mail (DetailArea* self) {
-    
-    /* create detail box */
-    self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0));
-
-    /* create tool box */
-    self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0));
-    MokoToolBox* mokobox = MOKO_TOOL_BOX(moko_tool_box_new());
-    GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox));
-    GtkWidget* button = gtk_button_new_with_label("Send");
-    gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 );
-    button = gtk_button_new_with_label("Attach");
-    gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 );
-    button = gtk_button_new_with_label("Address");
-    gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 );
-
-    /* fill entry area */
-    self->entryarea = MOKO_FIXED(moko_fixed_new());
-    GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-    gtk_alignment_set_padding (alignment, 5, 5, 5, 5);
-
-    GtkVBox* entrybox = GTK_VBOX(gtk_vbox_new(FALSE,0));
-    gtk_box_set_spacing (GTK_BOX(entrybox),2);
-    GtkWidget* hbox = gtk_hbox_new(FALSE,0);
-    GtkWidget* toLabel = gtk_label_new("To:");
-    gtk_widget_set_size_request (toLabel, 110, -1);
-    gtk_misc_set_alignment (GTK_MISC (toLabel),0.8,0.5);
-    GtkWidget* toEntry = gtk_entry_new();
-    gtk_widget_set_size_request (toEntry, 300, -1);
-    gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toLabel),FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toEntry),FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0);
-
-    hbox = gtk_hbox_new(FALSE,0);
-    GtkWidget* ccLabel = gtk_label_new("CC:");
-    gtk_widget_set_size_request (ccLabel, 110, -1);
-    gtk_misc_set_alignment (GTK_MISC (ccLabel),0.8,0.5);
-    GtkWidget* ccEntry = gtk_entry_new();
-    gtk_widget_set_size_request (ccEntry, 300, -1);
-    gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0);
-
-    hbox = gtk_hbox_new(FALSE,0);
-    GtkWidget* bccLabel = gtk_label_new("Bcc:");
-    gtk_widget_set_size_request (bccLabel, 110, -1);
-    gtk_misc_set_alignment (GTK_MISC (bccLabel),0.8,0.5);
-    GtkWidget* bccEntry = gtk_entry_new();
-    gtk_widget_set_size_request (bccEntry, 300, -1);
-    gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0);
-
-    hbox = gtk_hbox_new(FALSE,0);
-    GtkWidget* subjectLabel = gtk_label_new("Subject:");
-    gtk_widget_set_size_request (subjectLabel, 110, -1);
-    gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.55,0.5);
-    GtkWidget* subjectEntry = gtk_entry_new();
-    gtk_widget_set_size_request (subjectEntry, 300, -1);
-    gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0);
-    gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0);
-
-    gtk_container_add (GTK_CONTAINER(alignment), GTK_WIDGET(entrybox));
-
-    moko_fixed_set_cargo(self->entryarea,GTK_WIDGET(alignment));
-
-     /* fill textview */
-     /*self->textview = GTK_TEXT_VIEW(gtk_text_view_new ());
-     GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-     gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50);
-     gtk_text_view_set_wrap_mode (self->textview,GTK_WRAP_CHAR);
-     gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(self->textview));
-
-     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0);
-     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0);
-     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0);*/
-
-    return GTK_WIDGET(self->detailbox);
-}
-
 GtkWidget* detail_area_mode_read (DetailArea* self)
 {
-     /* create detail box */
-     self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0));
-     
-     ReadAttributes* readAttributes = self->readAttributes;
+  /* create detail box */
+  self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0));
 
-     GtkWidget* headerbox = gtk_vbox_new(FALSE,0);
-     GtkWidget* hbox = gtk_hbox_new(FALSE,0);
-     readAttributes->from_label = gtk_label_new ("Alex");
-     gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5);
-     readAttributes->date_label = gtk_label_new ("Hello");
-     gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5);
-     
-     GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1);
-     gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5);
-     GtkWidget* label = gtk_label_new ("From:");      
-     gtk_misc_set_alignment (GTK_MISC (label),1,0.5);
-     gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
-     gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0);
-     gtk_container_add(GTK_CONTAINER(cellalign),hbox);
-     gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0);
+  ReadAttributes* readAttributes = self->readAttributes;
 
-     cellalign = gtk_alignment_new (0.5, 0.5, 1, 1);
-     gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5);
-     hbox = gtk_hbox_new(FALSE,0);
-     label = gtk_label_new ("Date:");
-     gtk_misc_set_alignment (GTK_MISC (label),1,0.5);
-     gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
-     gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0);
-     gtk_container_add(GTK_CONTAINER(cellalign),hbox);
-     gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0);
+  GtkWidget* headerbox = gtk_vbox_new(FALSE,0);
+  GtkWidget* hbox = gtk_hbox_new(FALSE,0);
+  readAttributes->from_label = gtk_label_new ("Alex");
+  gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5);
+  readAttributes->date_label = gtk_label_new ("Hello");
+  gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5);
 
-     GtkWidget* hseparator = gtk_hseparator_new();
-     GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0);
-     gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50);
-     /*GtkWidget* details = gtk_label_new("this is the detail");*/
-     readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n"
-     "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n"
-     "\nto make the fullscreen\n \ntrigger more interesting\n \n \n");
-     gtk_widget_set_size_request (readAttributes->details,420,-1);
-     gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE);
-     gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5);
-     gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details);
-     gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0);
-     gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0);
-     gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0);
-     
-     return GTK_WIDGET(self->detailbox);
-}
+  GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5);
+  GtkWidget* label = gtk_label_new ("From:");
+  gtk_misc_set_alignment (GTK_MISC (label),1,0.5);
+  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
+  gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0);
+  gtk_container_add(GTK_CONTAINER(cellalign),hbox);
+  gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0);
 
-GtkWidget* detail_area_mode_membership (DetailArea* self)
-{
+  cellalign = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5);
+  hbox = gtk_hbox_new(FALSE,0);
+  label = gtk_label_new ("Date:");
+  gtk_misc_set_alignment (GTK_MISC (label),1,0.5);
+  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
+  gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0);
+  gtk_container_add(GTK_CONTAINER(cellalign),hbox);
+  gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0);
 
-    /* create detail box */
-    self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0));
-    GtkWidget *title = gtk_label_new ("Message Membership");
-    gtk_misc_set_alignment (GTK_MISC(title),0.4,1);
-    gtk_box_pack_start (GTK_BOX(self->detailbox),title,FALSE,TRUE,0);
+  GtkWidget* hseparator = gtk_hseparator_new();
+  GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0);
+  gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50);
+  /*GtkWidget* details = gtk_label_new("this is the detail");*/
+  readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n"
+                            "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n"
+                            "\nto make the fullscreen\n \ntrigger more interesting\n \n \n");
+  gtk_widget_set_size_request (readAttributes->details,420,-1);
+  gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE);
+  gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5);
+  gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details);
+  gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0);
+  gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0);
+  gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0);
 
-    GSList *c;
-    GtkWidget *rdo_btn = NULL;
-    GSList *rdo_btn_group;
-    c = self->folderlist;
-
-    for (; c; c = g_slist_next(c) ) {
-        gchar* folder = (gchar*) c->data;
-	      g_debug( "find folder '%s'", folder );
-	      if(!g_strcasecmp(folder,"Inbox")){
-	         rdo_btn = gtk_radio_button_new_with_label (NULL, folder);
-	         rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn));
-	         gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE);
-        }
-	      else
-	         rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder);
-	
-	      g_signal_connect_swapped (G_OBJECT(rdo_btn), 
-	                                "released",
-			                            G_CALLBACK (on_mmode_rdo_btn_clicked),
-			                            c->data);
-	      gtk_box_pack_start (GTK_BOX (self->detailbox), rdo_btn, FALSE, TRUE, 0);
-    }
-
-    return GTK_WIDGET(self->detailbox);
+  return GTK_WIDGET(self->detailbox);
 }
 
-void detail_new_sms (DetailArea* self)
-{
-		EditAttributes* editAttributes = self->editAttributes;
-		gtk_entry_set_text (GTK_ENTRY(editAttributes->toEntry),"");
-		GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView));
-		gtk_text_buffer_set_text (buffer,"",0);
-		gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE);
-}
-
 void detail_read_message (DetailArea* self, message* msg)
 {
-		ReadAttributes* readAttributes = self->readAttributes;
-		if(msg != NULL)
-			{
-		    gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name);
-		    gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject);
-		    gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder);
-		    g_free(msg);
-		  }
-		else
-		  {
-			  gtk_label_set_text(GTK_LABEL(readAttributes->from_label), "");
-		    gtk_label_set_text(GTK_LABEL(readAttributes->date_label), "");
-		    gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message");
-		  }
-		gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ);
-}
+  ReadAttributes* readAttributes = self->readAttributes;
+  if(msg != NULL)
+    {
+      gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name);
+      gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject);
+      gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder);
+      g_free(msg);
+    }
+  else
+    {
+      gtk_label_set_text(GTK_LABEL(readAttributes->from_label), "");
+      gtk_label_set_text(GTK_LABEL(readAttributes->date_label), "");
+      gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message");
+    }
 
-void detail_reply_message (DetailArea* self, message* msg)
-{
-		EditAttributes* editAttributes = self->editAttributes;
-		if(msg != NULL)
-			{
-	  	  gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name);
-	   	 g_free(msg);
-	 		}
-	 	GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView));
-	 	gtk_text_buffer_set_text (buffer,"",0);
-		gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE);
+  gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ);
 }
 
-void detail_forward_message (DetailArea* self, message* msg)
-{
-		EditAttributes* editAttributes = self->editAttributes;
-		if(msg != NULL)
-			{
-	  	  gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name);
-	   	 g_free(msg);
-	 		}
-	  GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView));
-	  gchar *fwdStr = g_strdup_printf("\n\n\n>%s",msg->content);
-		gtk_text_buffer_set_text (buffer,fwdStr,strlen(fwdStr));
-		gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE);
-}

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -25,7 +25,6 @@
 #include <libmokoui/moko-pixmap-button.h>
 #include <libmokoui/moko-tool-box.h>
 #include <libmokoui/moko-fixed.h>
-//#include "main.h"
 #include "message.h"
 
 G_BEGIN_DECLS
@@ -37,20 +36,25 @@
 #define IS_DETAIL_AREA_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_DETAIL_AREA))
 #define DETAIL_AREA_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DETAIL_AREA, DetailAreaClass))
 
-typedef struct _Read_Attributes{
+typedef struct _Read_Attributes
+  {
     GtkWidget* from_label;
     GtkWidget* date_label;
     GtkWidget* details;
-}ReadAttributes;
+  }
+ReadAttributes;
 
-typedef struct _Edit_Attributes{
+typedef struct _Edit_Attributes
+  {
     GtkWidget* sendBtn;
     GtkWidget* addrBtn;
     GtkWidget* toEntry;
     GtkWidget* txtView;
-}EditAttributes;
+  }
+EditAttributes;
 
-typedef struct _DetailArea{
+typedef struct _DetailArea
+  {
     MokoDetailsWindow parent;
     GtkNotebook* notebook;
     GtkVBox* detailbox;
@@ -60,20 +64,20 @@
     guint* page;
     ReadAttributes* readAttributes;
     EditAttributes* editAttributes;
-}DetailArea;
+  }
+DetailArea;
 
-typedef struct _DetailAreaClass{
+typedef struct _DetailAreaClass
+  {
     MokoDetailsWindowClass parent_class;
-}DetailAreaClass;
+  }
+DetailAreaClass;
 
 GType detail_area_get_type();
 GtkWidget* detail_area_new(void);
 GtkWidget* detail_area_get_notebook(DetailArea* self);
 
-void detail_new_sms (DetailArea* self);
 void detail_read_message (DetailArea* self, message* msg);
-void detail_reply_message (DetailArea* self, message* msg);
-void detail_forward_message (DetailArea* self, message* msg);
 
 G_END_DECLS
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -33,83 +33,82 @@
 static void
 foldersdb_dispose (GObject *object)
 {
-   if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose)
-       G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object);
+  if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose)
+    G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object);
 }
 
 static void
 foldersdb_finalize (GObject *object)
 {
-    G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object);
+  G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object);
 }
 
 static void
 foldersdb_class_init (FoldersDBClass *klass)
 {
-    g_debug( "foldersdb_class_init" );
-    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  g_debug( "foldersdb_class_init" );
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-    /* register private data */
-    /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/
+  /* register private data */
+  /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/
 
-    /* hook virtual methods */
-    /* ... */
+  /* hook virtual methods */
+  /* ... */
 
-    /* install properties */
-    /* ... */
+  /* install properties */
+  /* ... */
 
-    object_class->dispose = foldersdb_dispose;
-    object_class->finalize = foldersdb_finalize;
+  object_class->dispose = foldersdb_dispose;
+  object_class->finalize = foldersdb_finalize;
 
-    FILE* file = fopen( PKGDATADIR "/folderlist", "rw" );
-    g_assert( file ); //FIXME error handling, if folder file is not present
-    char line[256];
-    char *elem;
-    char *tok = "\n";
+  FILE* file = fopen( PKGDATADIR "/folderlist", "rw" );
+  g_assert( file ); //FIXME error handling, if folder file is not present
+  char line[256];
+  char *elem;
+  char *tok = "\n";
 
-    while( fgets(line, sizeof(line), file) ) 
+  while( fgets(line, sizeof(line), file) )
     {
-        elem = g_strdup(strtok(line, tok));
-        klass->folders = g_slist_append(klass->folders, elem);
+      elem = g_strdup(strtok(line, tok));
+      klass->folders = g_slist_append(klass->folders, elem);
     }
 
-    fclose( file );
+  fclose( file );
 }
 
 static void
 foldersdb_init (FoldersDB *self)
-{
-}
+{}
 
 FoldersDB*
 foldersdb_new (void)
 {
-    return g_object_new (TYPE_FOLDERSDB, NULL);
+  return g_object_new (TYPE_FOLDERSDB, NULL);
 }
 
 GSList* foldersdb_get_folders(FoldersDB* self)
 {
-    FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self);
-        return klass->folders;
+  FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self);
+  return klass->folders;
 }
 
 void foldersdb_update ( GSList* folderlist )
 {
-    /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/
-    FILE* file = fopen( PKGDATADIR "/folderlist", "w" );
-    g_assert( file );
-    GSList* c;
-    char *elem;
+  /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/
+  FILE* file = fopen( PKGDATADIR "/folderlist", "w" );
+  g_assert( file );
+  GSList* c;
+  char *elem;
 
-    for( c =folderlist; c; c=g_slist_next(c))
-        {
-	    if(g_slist_next(c) != NULL)
-	        elem = g_strdup_printf( "%s\n", (char*)c->data);
-            else
-	        elem = g_strdup(c->data);
-	    fputs(elem, file);
-	}
-    fclose( file );
+  for( c =folderlist; c; c=g_slist_next(c))
+    {
+      if(g_slist_next(c) != NULL)
+        elem = g_strdup_printf( "%s\n", (char*)c->data);
+      else
+        elem = g_strdup(c->data);
+      fputs(elem, file);
+    }
+  fclose( file );
 }
 
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -18,7 +18,7 @@
  */
 
 #ifndef __FOLDERsDB_H_
-#define __FOLDERsDB_H_ 
+#define __FOLDERsDB_H_
 
 #include <glib-object.h>
 #include <stdio.h>
@@ -33,14 +33,18 @@
 #define IS_FOLDERSDB_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass),     TYPE_FOLDERSDB))
 #define FOLDERSDB_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj),     TYPE_FOLDERSDB, FoldersDBClass))
 
-typedef struct {
+typedef struct
+  {
     GObject parent;
-} FoldersDB;
+  }
+FoldersDB;
 
-typedef struct {
+typedef struct
+  {
     GObjectClass parent_class;
     GSList* folders;
-} FoldersDBClass;
+  }
+FoldersDBClass;
 
 GType foldersdb_get_type (void);
 FoldersDB* foldersdb_new (void);

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -22,8 +22,10 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <string.h>
-#include <stdlib.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
 
 #include "main.h"
 #include "foldersdb.h"
@@ -39,349 +41,375 @@
 
 #include <gtk/gtk.h>
 
+typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model,
+    GtkTreeIter *iter,
+    gpointer data);
+
 gboolean init_dbus (MessengerData* d)
 {
-    DBusError error;
+  DBusError error;
 
-    /* Get a connection to the session bus */
-    dbus_error_init (&error);
-    d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+  /* Get a connection to the session bus */
+  dbus_error_init (&error);
+  d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
 
-    if (!d->bus)
+  if (!d->bus)
     {
-        g_warning ("Failed to connect to the D-BUS daemon: %s", error.message);
-	return FALSE;
+      g_warning ("Failed to connect to the D-BUS daemon: %s", error.message);
+      return FALSE;
     }
 
-    if (dbus_error_is_set (&error))
+  if (dbus_error_is_set (&error))
     {
-        fprintf(stdout, "Connection Error (%s)\n", error.message);
-	dbus_error_free (&error);
+      fprintf(stdout, "Connection Error (%s)\n", error.message);
+      dbus_error_free (&error);
     }
 
-    if (NULL == d->bus)
+  if (NULL == d->bus)
     {
-        fprintf(stdout, "Connection Error: bus == NULL \n");
-	exit (1);
+      fprintf(stdout, "Connection Error: bus == NULL \n");
+      exit (1);
     }
 
-    return TRUE;
+  return TRUE;
 }
 
 int main( int argc, char** argv )
 {
-    g_debug( "openmoko-messenger starting up" );
+  g_debug( "openmoko-messenger starting up" );
 
-    /* Initialize GTK+ */
-    gtk_init( &argc, &argv );
+  /* Initialize GTK+ */
+  gtk_init( &argc, &argv );
 
-    MessengerData* d = g_new ( MessengerData, 1);
-    d->foldersdb = foldersdb_new();
-    d->s_key = "";
-    d->msg_num = 0;
-    d->app = MOKO_APPLICATION (moko_application_get_instance());
-    d->currentfolder = g_strdup("Inbox");
-    g_set_application_name( "Messages" ); 
-    
-    if (init_dbus(d))
-        g_debug("D-Bus initialize successfully");
+  MessengerData* d = g_new ( MessengerData, 1);
+  d->foldersdb = foldersdb_new();
+  d->s_key = "";
+  d->msg_num = 0;
+  d->app = MOKO_APPLICATION (moko_application_get_instance());
+  d->currentfolder = g_strdup("Inbox");
+  g_set_application_name( "Messages" );
 
-    /* ui */
-    setup_ui(d);
+  if (init_dbus(d))
+    g_debug("D-Bus initialize successfully");
 
-    /* disable mmitem if necessary*/
-    update_folder_sensitive (d, d->folderlist);
-		
-    /* Set up this connection to work in a GLib event loop */
-    dbus_connection_setup_with_g_main (d->bus, NULL);
+  /* ui */
+  setup_ui(d);
 
-    /* show everything and run main loop */
-    gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE);
-    gtk_widget_show_all (GTK_WIDGET(d->window));
-    gtk_main();
+  /* disable mmitem if necessary*/
+  update_folder_sensitive (d, d->folderlist);
 
-    return 0;
+  /* Set up this connection to work in a GLib event loop */
+  dbus_connection_setup_with_g_main (d->bus, NULL);
 
+  /* show everything and run main loop */
+  gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE);
+  gtk_widget_show_all (GTK_WIDGET(d->window));
+  gtk_main();
+
+  return 0;
+
 }
 
 void update_folder_sensitive (MessengerData* d, GSList* folderlist)
 {
-    if (g_slist_length (folderlist) > 5){
-        gtk_widget_set_sensitive (d->mmitem, TRUE);
-	gtk_widget_set_sensitive (d->fnitem, TRUE);
+  if (g_slist_length (folderlist) > 5)
+    {
+      gtk_widget_set_sensitive (d->mmitem, TRUE);
+      gtk_widget_set_sensitive (d->fnitem, TRUE);
     }
-    else{
-	gtk_widget_set_sensitive (d->mmitem, FALSE);
-	gtk_widget_set_sensitive (d->fnitem, FALSE);
+  else
+    {
+      gtk_widget_set_sensitive (d->mmitem, FALSE);
+      gtk_widget_set_sensitive (d->fnitem, FALSE);
     }
 }
 
 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist)
 {
-    GSList *c;
-    GtkWidget* filtmenu;
+  GSList *c;
+  GtkWidget* filtmenu;
 
-    filtmenu = gtk_menu_new();
-    c = folderlist;
-    for (; c; c = g_slist_next(c) ){
-        gchar* folder = (gchar*) c->data;
-	g_debug( "adding folder '%s'", folder );
-        gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) );
+  filtmenu = gtk_menu_new();
+  c = folderlist;
+  for (; c; c = g_slist_next(c) )
+    {
+      gchar* folder = (gchar*) c->data;
+      g_debug( "adding folder '%s'", folder );
+      gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) );
     }
 
-    return filtmenu;
+  return filtmenu;
 }
 
 void setup_ui( MessengerData* d )
 {
-    /* main window */
-    d->window = MOKO_PANED_WINDOW(moko_paned_window_new());
-    d->mmWin = NULL;
-		 
-    /* application menu */
-    d->menu = gtk_menu_new(); 
-    gtk_widget_show (d->menu);
-    d->mmitem = gtk_menu_item_new_with_label( "Message Membership" );
-    d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" );
-    GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" );
-    GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" );
-    GtkWidget* sepitem = gtk_separator_menu_item_new(); 
-    GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" );
-    g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d );
-    g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d );
-    g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem );
-    gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem );
-    moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) );
+  /* main window */
+  d->window = MOKO_PANED_WINDOW(moko_paned_window_new());
+  d->mmWin = NULL;
 
-    /* filter menu */
-    d->filtmenu = gtk_menu_new();
-    gtk_widget_show (d->filtmenu);
-    d->folderlist = foldersdb_get_folders( d->foldersdb );
-    d->filtmenu = reload_filter_menu( d, d->folderlist );
+  /* application menu */
+  d->menu = gtk_menu_new();
+  gtk_widget_show (d->menu);
+  d->mmitem = gtk_menu_item_new_with_label( "Message Membership" );
+  d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" );
+  GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" );
+  GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" );
+  GtkWidget* sepitem = gtk_separator_menu_item_new();
+  GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" );
+  g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d );
+  g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d );
+  g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem );
+  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem );
+  moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) );
 
-    moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) );
-    GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window));
-    g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
+  /* filter menu */
+  d->filtmenu = gtk_menu_new();
+  gtk_widget_show (d->filtmenu);
+  d->folderlist = foldersdb_get_folders( d->foldersdb );
+  d->filtmenu = reload_filter_menu( d, d->folderlist );
 
-    /* connect close event */
-    g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d );
+  moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) );
+  GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window));
+  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d );
 
-    /* set navagation area */
-    populate_navigation_area( d );
+  /* connect close event */
+  g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d );
 
-    /* set toolbox */
-    GtkWidget* newButton;
-    GtkWidget* modeButton;
-    GtkWidget* getmailButton;
-    GtkWidget* deleteButton;
+  /* set navagation area */
+  populate_navigation_area( d );
 
-    GtkWidget* newMenu;
-    GtkWidget* modeMenu;
-    GtkWidget* deleteMenu;
-    
-    GtkWidget* image;
+  /* set toolbox */
+  GtkWidget* newButton;
+  GtkWidget* modeButton;
+  GtkWidget* getmailButton;
+  GtkWidget* deleteButton;
 
-    /* set tool bar */
-    d->toolbox = moko_tool_box_new_with_search();
-    gtk_widget_show (d->toolbox);
-    GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox)));
-    gtk_widget_show (searchEntry);
-    g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d ); 
-    g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d ); 
-    g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d ); 
+  GtkWidget* newMenu;
+  GtkWidget* modeMenu;
+  GtkWidget* deleteMenu;
 
-    /* set action buttons*/
-    deleteMenu = gtk_menu_new();
-    GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" );
-    GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" );
-    g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d ); 
-    g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d ); 
+  GtkWidget* image;
 
-    gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) );
-    gtk_widget_show_all (deleteMenu);
-    deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
-    image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png");
-    moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image);
-    moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu));
+  /* set tool bar */
+  d->toolbox = moko_tool_box_new_with_search();
+  gtk_widget_show (d->toolbox);
+  GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox)));
+  gtk_widget_show (searchEntry);
+  g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d );
+  g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d );
+  g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d );
 
-    getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
-    image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png");
-    moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image);
+  /* set action buttons*/
+  deleteMenu = gtk_menu_new();
+  GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" );
+  GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" );
+  g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d );
+  g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d );
 
-    modeMenu = gtk_menu_new();
-    GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" );
-    GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" );
-    GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" );
+  gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) );
+  gtk_widget_show_all (deleteMenu);
+  deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
+  image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png");
+  moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image);
+  moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu));
 
-    gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem);
-    gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem);
-    gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem);
-    g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d );
-    g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d );
-    g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d );
-    gtk_widget_show_all (modeMenu);
-    modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
-    image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png");
-    moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image);
-    moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) );
+  getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
+  image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png");
+  moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image);
 
-    newMenu = gtk_menu_new();
-    GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ;
-    GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ;
-    GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ;
+  modeMenu = gtk_menu_new();
+  GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" );
+  GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" );
+  GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" );
 
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem);
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem);
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem);
-    gtk_widget_show_all (newMenu);
-    g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d );
-    g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d );
-    g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d );
-    newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
-    image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png");
-    moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image);
-    moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem);
+  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem);
+  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem);
+  g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d );
+  g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d );
+  g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d );
+  gtk_widget_show_all (modeMenu);
+  modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
+  image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png");
+  moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image);
+  moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) );
 
-    moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) );
+  newMenu = gtk_menu_new();
+  GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ;
+  GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ;
+  GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ;
 
-    /* detail area */
-    populate_detail_area (d);
-    
-    /* Fix default "Filter Menu" bug*/
-    d->currentfolder = g_strdup("Inbox");
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
-    GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-    gtk_label_set_text (GTK_LABEL(menulabel),"Inbox");
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
-    
-    /* select the first column */
-    gint index = 0;
-    GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) );
-    GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 );
-    gtk_tree_selection_select_path( tree_selection, path );
-    gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE ); 
-    gtk_widget_grab_focus (d->view);
+  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem);
+  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem);
+  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem);
+  gtk_widget_show_all (newMenu);
+  g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d );
+  g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d );
+  g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d );
+  newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox)));
+  image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png");
+  moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image);
+  moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) );
+
+  moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) );
+
+  /* detail area */
+  populate_detail_area (d);
+
+  /* Fix default "Filter Menu" bug*/
+  d->currentfolder = g_strdup("Inbox");
+  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu));
+  GtkWidget* menulabel = GTK_BIN(menuitem)->child;
+  gtk_label_set_text (GTK_LABEL(menulabel),"Inbox");
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
+
+  /* select the first column */
+  gint index = 0;
+  GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) );
+  GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 );
+  gtk_tree_selection_select_path( tree_selection, path );
+  gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE );
+  gtk_widget_grab_focus (d->view);
+
+  /* temporary setting */
+  GtkSettings* settings = gtk_settings_get_default();
+  g_object_set(settings,
+               "gtk-theme-name","openmoko-standard",
+	       NULL);
 }
 
 gboolean filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, MessengerData* d)
 {
-    gchar* folder;
-    gchar* from;
-    gchar* subject;
+  gchar* folder;
+  gchar* from;
+  gchar* subject;
 
-    gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1);
-    gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1);
-    gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1);
-	  
-    if (d->searchOn){
-        if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key))
-	    return FALSE;
-    }else {
-        gtk_menu_set_active (GTK_MENU(d->filtmenu),0);
-	if(g_strcasecmp(folder,d->currentfolder))
-	    return FALSE;
+  gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1);
+  gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1);
+  gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1);
+
+  if (d->searchOn)
+    {
+      if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key))
+        return FALSE;
     }
+  else
+    {
+      gtk_menu_set_active (GTK_MENU(d->filtmenu),0);
+      if(g_strcasecmp(folder,d->currentfolder))
+        return FALSE;
+    }
 
-    return TRUE;
+  return TRUE;
 }
 
 void cell_data_func (GtkTreeViewColumn *col,
-		     GtkCellRenderer   *renderer,
-		     GtkTreeModel      *model,
-		     GtkTreeIter  	    *iter,
-		     gpointer          user_data)
+                     GtkCellRenderer   *renderer,
+                     GtkTreeModel      *model,
+                     GtkTreeIter  	    *iter,
+                     gpointer          user_data)
 {
-    gint status;
-    gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);
+  gint status;
+  gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);
 
-    if (status == UNREAD)
-        g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);
-    else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);
+  if (status == UNREAD)
+    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);
+  else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);
 }
 
 void populate_navigation_area( MessengerData* d )
 {
-    guint         i;
-    GdkPixbuf*    icon = NULL;
-    GError*       error = NULL;
-    GtkTreeIter   iter;
-    
-    d->liststore = gtk_list_store_new( NUM_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING );
-    d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL);
-    d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter)); 
-    
-    for (i = 0;  i < G_N_ELEMENTS(names);  ++i) {
-        gtk_list_store_append(d->liststore, &iter);
-	switch(states[i]) {
-	    case UNREAD	  : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error);break;
-	    case READ	  : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);break;
-	    case REPLIED  : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error);break;
-	    case FORWARD  :  icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error);break;
-	}
-	gtk_list_store_set(d->liststore, &iter,
-	                   COLUMN_ICON, icon,
-		           COLUMN_FROM, names[i],
-		           COLUMN_SUBJECT, subjects[i],
-		           COLUMN_CONTENT, contents[i],
-		           COLUMN_STATUS, states[i],
-		           COLUMN_FOLDER, folders[i],
-		           -1);
+  guint         i;
+  GdkPixbuf*    icon = NULL;
+  GError*       error = NULL;
+  GtkTreeIter   iter;
+
+  d->liststore = gtk_list_store_new( NUM_COLS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING );
+  d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL);
+  d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter));
+
+  for (i = 0;  i < G_N_ELEMENTS(names);  ++i)
+    {
+      gtk_list_store_append(d->liststore, &iter);
+      switch(states[i])
+        {
+        case UNREAD	  :
+          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error);
+          break;
+        case READ	  :
+          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);
+          break;
+        case REPLIED  :
+          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error);
+          break;
+        case FORWARD  :
+          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error);
+          break;
+        }
+      gtk_list_store_set(d->liststore, &iter,
+                         COLUMN_ICON, icon,
+                         COLUMN_FROM, names[i],
+                         COLUMN_SUBJECT, subjects[i],
+                         COLUMN_CONTENT, contents[i],
+                         COLUMN_STATUS, states[i],
+                         COLUMN_FOLDER, folders[i],
+                         -1);
     }
-    gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter),
-                                            filter_visible_function,
-					    d,
-					    NULL);															
-    GtkCellRenderer* ren;
-    GtkTreeViewColumn* column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, "From");
-	  
-    /* Add status picture */
-    ren = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, ren, FALSE);
-    gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL);
-		
-    /* add message from name */
-    ren = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, ren, TRUE);
-    gtk_tree_view_column_set_attributes(column, ren,
-                                        "text", COLUMN_FROM,
-				        NULL);
+  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter),
+                                          (GtkTreeModelFilterVisibleFunc)filter_visible_function,
+                                          d,
+                                          NULL);
+  GtkCellRenderer* ren;
+  GtkTreeViewColumn* column = gtk_tree_view_column_new();
+  gtk_tree_view_column_set_title(column, "From");
 
-    /* Bold if UNREAD */
-    gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL);
-    moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column );
+  /* Add status picture */
+  ren = gtk_cell_renderer_pixbuf_new();
+  gtk_tree_view_column_pack_start(column, ren, FALSE);
+  gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL);
 
-    ren = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, "Subject");
-    gtk_tree_view_column_pack_start(column, ren, TRUE);
-    gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL);
-    gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL);
-    moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column );
+  /* add message from name */
+  ren = gtk_cell_renderer_text_new();
+  gtk_tree_view_column_pack_start(column, ren, TRUE);
+  gtk_tree_view_column_set_attributes(column, ren,
+                                      "text", COLUMN_FROM,
+                                      NULL);
 
-    GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) );
-    g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d ); 
-    moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) );
+  /* Bold if UNREAD */
+  gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL);
+  moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column );
+
+  ren = gtk_cell_renderer_text_new();
+  column = gtk_tree_view_column_new();
+  gtk_tree_view_column_set_title(column, "Subject");
+  gtk_tree_view_column_pack_start(column, ren, TRUE);
+  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL);
+  gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL);
+  moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column );
+
+  GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) );
+  g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d );
+  moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) );
 }
 
 void populate_detail_area( MessengerData* d )
 {
-   d->details = detail_area_new();
-   gtk_widget_show (d->details);
-   gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details)));
-   moko_paned_window_set_lower_pane( d->window, GTK_WIDGET(moko_details_window_put_in_box(DETAIL_AREA(d->details))));
+  d->details = detail_area_new();
+  gtk_widget_show (d->details);
+  gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details)));
+  moko_paned_window_set_lower_pane( MOKO_PANED_WINDOW(d->window), GTK_WIDGET(moko_details_window_put_in_box(d->details)));
 }
 
 void main_quit(GtkMenuItem* item, MessengerData* d)
 {
-    foldersdb_update (d->folderlist);
-    send_signal_to_footer(d->bus,"");
-    gtk_main_quit();
+  foldersdb_update (d->folderlist);
+  send_signal_to_footer(d->bus,"");
+  gtk_main_quit();
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -26,13 +26,13 @@
 #include <libmokoui/moko-tree-view.h>
 #include <gtk/gtkliststore.h>
 #include <gtk/gtktreemodelfilter.h>
-#include <dbus/dbus-glib.h>
 #include <dbus/dbus.h>
 
 #include "foldersdb.h"
 #include "detail-area.h"
 
-typedef struct _MessengerData{
+typedef struct _MessengerData
+  {
     MokoApplication* app;
     MokoPanedWindow* window;
     GtkWidget* menu;
@@ -56,26 +56,27 @@
     GtkWidget* nfEntry;
     GtkWidget* frEntry;
     DBusConnection *bus;
-}MessengerData;
+  }
+MessengerData;
 
 enum {
-    COLUMN_ICON,
-    COLUMN_FROM,
-    COLUMN_SUBJECT,
-    COLUMN_CONTENT,
-    COLUMN_STATUS,
-    COLUMN_FOLDER,
-    NUM_COLS,
+  COLUMN_ICON,
+  COLUMN_FROM,
+  COLUMN_SUBJECT,
+  COLUMN_CONTENT,
+  COLUMN_STATUS,
+  COLUMN_FOLDER,
+  NUM_COLS,
 };
 
 enum {
-    PAGE_EDIT_MODE,
-    PAGE_NEW_MAIL,
-    PAGE_MODE_READ,
-    PAGE_MODE_REPLY,
-    PAGE_MODE_FORWARD,
-    PAGE_MODE_MMSHIP,
-    NUM_PAGES,
+  PAGE_EDIT_MODE,
+  PAGE_NEW_MAIL,
+  PAGE_MODE_READ,
+  PAGE_MODE_REPLY,
+  PAGE_MODE_FORWARD,
+  PAGE_MODE_MMSHIP,
+  NUM_PAGES,
 };
 
 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist);

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -21,34 +21,47 @@
 #ifndef _MESSAGE_H_
 #define _MESSAGE_H_
 
-typedef struct message{
+typedef struct message
+  {
     gchar* name;
     gchar* subject;
     gchar* folder;
     gchar* content;
     gint   status;
-}message;
+  }
+message;
 
 enum {
-    UNREAD,
-    READ,
-    REPLIED,
-    FORWARD,
-    NUM_STATES,
+  UNREAD,
+  READ,
+  REPLIED,
+  FORWARD,
+  NUM_STATES,
 };
 
-const static gint states[] = { UNREAD, READ, UNREAD, UNREAD, FORWARD,
-                               UNREAD, UNREAD, REPLIED, READ, UNREAD };
+const static gint states[] =
+  {
+    UNREAD, READ, UNREAD, UNREAD, FORWARD,
+    UNREAD, UNREAD, REPLIED, READ, UNREAD
+  };
 
-const static gchar *names[] = { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.",
-                                "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J."};
+const static gchar *names[] =
+  { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.",
+    "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J."
+  };
 
-const static gchar *subjects[] = { "Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"};
+const static gchar *subjects[] =
+  { "Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"
+  };
 
-const static gchar *folders[] = { "Inbox", "Outbox", "Sent", "Inbox", "Inbox",
-                                  "Inbox", "Inbox", "Inbox", "Inbox", "Inbox"};
+const static gchar *folders[] =
+  { "Inbox", "Outbox", "Sent", "Inbox", "Inbox",
+    "Inbox", "Inbox", "Inbox", "Inbox", "Inbox"
+  };
 
-const static gchar *contents[] = {"Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"};
+const static gchar *contents[] =
+  {"Hello Alex", "We need sms support", "I need u", "Help harald", "The gui is really cool", "Can't u see", "2:00 pm", "Bugzillia page", "Hi there", "Target support"
+  };
 
 #endif
 

Added: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -0,0 +1,278 @@
+/*
+ *  sms-contact-window.c
+ *  
+ *  Authored By Alex Tang <alex at fic-sh.com.cn>
+ *
+ *  Copyright (C) 2006-2007 OpenMoko Inc.
+ *
+ *  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.1 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 Public License for more details.
+ *  
+ *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
+ */
+#include "sms-contact-window.h"
+
+G_DEFINE_TYPE (SmsContactWindow, sms_contact_window, MOKO_TYPE_WINDOW)
+
+#define SMS_CONTACT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SMS_TYPE_CONTACT_WINDOW, SmsContactWindowPrivate))
+
+typedef struct
+{
+  /* private members define here */
+  GtkWidget* vbox;
+  GtkWidget* buttonbox;
+  GtkWidget* contacts_view;
+}SmsContactWindowPrivate;
+
+static gint sms_contact_signals[LAST_SIGNAL] = {0};
+
+static void sms_contact_window_close (SmsContactWindow* self);
+GtkWidget* create_contacts_list (SmsContactData* data);
+static gboolean open_book(SmsContactData* data);
+static void loadContacts (EBook* book, EBookStatus status, gpointer closure);
+static void updateContactsView (EBook* book, EBookStatus status, 
+                                GList* contacts, gpointer closure);
+static void contacts_view_cursor_changed(GtkTreeSelection* selection, SmsContactData* data);
+static void contact_select_done(void);
+
+static void
+sms_contact_window_dispose(GObject* object)
+{
+  if (G_OBJECT_CLASS (sms_contact_window_parent_class)->dispose)
+    G_OBJECT_CLASS (sms_contact_window_parent_class)->dispose (object);
+}
+
+static void
+sms_contact_window_finalize(GObject* object)
+{
+  G_OBJECT_CLASS (sms_contact_window_parent_class)->finalize (object);
+}
+
+
+static void
+sms_contact_window_class_init (SmsContactWindowClass* klass)
+{
+  GObjectClass* object_class = G_OBJECT_CLASS(klass);
+  g_type_class_add_private (klass, sizeof(SmsContactWindowPrivate));
+
+  /* create a new signal */
+  sms_contact_signals[CONTACT_SELECT_DONE_SIGNAL] = g_signal_new("contact_select_done",
+                                                   SMS_TYPE_CONTACT_WINDOW,
+						   G_SIGNAL_RUN_FIRST,
+						   G_STRUCT_OFFSET(SmsContactWindowClass, contact_select_done),
+						   NULL,NULL,
+						   g_cclosure_marshal_VOID__VOID,
+						   G_TYPE_NONE,0,NULL);
+
+  object_class->dispose = sms_contact_window_dispose;
+  object_class->finalize = sms_contact_window_finalize;
+
+}
+
+GtkWidget* sms_contact_new()
+{
+  return GTK_WIDGET(g_object_new(SMS_TYPE_CONTACT_WINDOW, NULL));
+}
+
+static void updateContactsView (EBook* book, EBookStatus status, 
+                                GList* contacts, gpointer closure)
+{
+  g_debug("contacts has ");
+  GtkTreeIter iter;
+  SmsContactData* data = (SmsContactData*)closure;
+  GtkListStore *contacts_liststore = data->contacts_liststore;
+  GList* c = contacts;
+  g_debug ("list length %d", g_list_length(c));
+
+  for (;c;c=c->next){
+    EContact *contact = E_CONTACT (c->data);
+    const gchar *name, *phoneNum;
+    name = e_contact_get_const (contact, E_CONTACT_FULL_NAME);
+    phoneNum =  e_contact_get_const (contact, E_CONTACT_PHONE_BUSINESS);
+    gtk_list_store_append(contacts_liststore, &iter);
+    gtk_list_store_set (contacts_liststore, &iter, 
+                        CONTACT_SEL_COL, FALSE,
+                        CONTACT_NAME_COL, name,
+			CONTACT_CELLPHONE_COL, phoneNum,
+			-1);
+  }
+}
+
+static void loadContacts(EBook* book, EBookStatus status, gpointer closure)
+{
+  EBookQuery* query;
+  SmsContactData* data = (SmsContactData*)closure;
+
+  if(status == E_BOOK_ERROR_OK){
+    query = e_book_query_any_field_contains ("");
+    e_book_async_get_contacts(data->book, query, updateContactsView, data);
+    e_book_query_unref(query);
+    g_debug("start loading to tree view");
+  }
+  else
+    g_warning("Got error %d when opening book",status);
+}
+
+static gboolean
+open_book (SmsContactData* data)
+{
+  e_book_async_open(data->book,FALSE,loadContacts,data);
+  return FALSE;
+}
+
+static void
+sms_contact_window_init (SmsContactWindow* self)
+{
+  MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );
+  if ( parent )
+    {
+      gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
+      gtk_window_set_modal( GTK_WINDOW(self), TRUE );
+      gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );
+    }
+
+  /* initialzation */
+  SmsContactWindowPrivate* priv = SMS_CONTACT_WINDOW_GET_PRIVATE(self);
+  priv->vbox = gtk_vbox_new(FALSE,0);
+  SmsContactData* data = g_new0(SmsContactData,1);
+  data->book = e_book_new_system_addressbook(NULL);
+  if (!data->book)
+    g_critical ("Could not load system addressbook");
+  self->nameList = g_strdup("tyh");
+
+  /* Set the "select" window title */
+  GtkWidget* titleLabel = gtk_label_new ("Select Contacts");
+  gtk_widget_set_name( GTK_WIDGET(titleLabel), "mokodialogwindow-title-label" );
+  GtkWidget* eventbox = gtk_event_box_new();
+  gtk_container_add( GTK_CONTAINER(eventbox), GTK_WIDGET(titleLabel) );
+  gtk_widget_set_name( eventbox, "mokodialogwindow-title-labelbox" );  
+  gtk_box_pack_start(GTK_BOX(priv->vbox), eventbox, FALSE, TRUE, 0);
+
+  /* create contact list */
+  data->contacts_liststore = gtk_list_store_new (3, G_TYPE_BOOLEAN,
+                                                 G_TYPE_STRING, G_TYPE_STRING);
+  priv->contacts_view = create_contacts_list(data);
+  gtk_box_pack_start(GTK_BOX(priv->vbox), priv->contacts_view, TRUE, TRUE, 0);
+  g_object_unref (data->contacts_liststore);
+
+  /* add close and back window button */
+  GtkWidget* closebutton = moko_pixmap_button_new();
+  moko_pixmap_button_set_action_btn_lower_label ( MOKO_PIXMAP_BUTTON(closebutton),"Select");
+  g_signal_connect_swapped( G_OBJECT(closebutton), "clicked", G_CALLBACK(sms_contact_window_close), self );
+  GtkWidget* backbutton = moko_pixmap_button_new();
+  moko_pixmap_button_set_action_btn_lower_label ( MOKO_PIXMAP_BUTTON(backbutton),"Back");
+  g_signal_connect_swapped( G_OBJECT(backbutton), "clicked", G_CALLBACK(sms_contact_window_close), self );
+  priv->buttonbox = gtk_hbox_new (FALSE,0);
+  gtk_box_pack_start(GTK_BOX(priv->buttonbox), closebutton, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(priv->buttonbox), backbutton, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(priv->vbox), priv->buttonbox, FALSE, TRUE, 0);
+  
+  /* loading contacts */
+  g_idle_add((GSourceFunc)open_book,data);
+  //loadBook(data);
+
+  gtk_widget_show_all(priv->vbox);
+  gtk_container_add(GTK_CONTAINER(self), priv->vbox);
+
+}
+
+GtkWidget *
+create_contacts_list (SmsContactData *data)
+{
+  MokoNavigationList* moko_navigation_list = (MokoNavigationList*)moko_navigation_list_new ();
+  GtkWidget* treeview = GTK_WIDGET (moko_navigation_list_get_tree_view (moko_navigation_list));
+  
+  gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
+                           GTK_TREE_MODEL (data->contacts_liststore));
+
+  /* add columns to treeview */
+  GtkCellRenderer* renderer;
+  GtkTreeViewColumn* column;
+
+  /* name column */
+  column = gtk_tree_view_column_new();
+  gtk_tree_view_column_set_title(column, "Name");
+
+  renderer = gtk_cell_renderer_toggle_new();
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "active", CONTACT_SEL_COL, NULL);
+
+  renderer = gtk_cell_renderer_text_new();
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", CONTACT_NAME_COL, NULL);
+  gtk_tree_view_column_set_sort_column_id (column, CONTACT_NAME_COL);
+
+  moko_navigation_list_append_column (moko_navigation_list, column);
+
+  /* mobile column */
+  renderer = gtk_cell_renderer_text_new ();
+  column = gtk_tree_view_column_new_with_attributes ("Cell Phone", renderer,
+                                                     "text", CONTACT_CELLPHONE_COL, NULL);
+  gtk_tree_view_column_set_sort_column_id (column, CONTACT_CELLPHONE_COL);
+  moko_navigation_list_append_column (moko_navigation_list, column);
+
+  GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(treeview) );
+  g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(contacts_view_cursor_changed), data );
+
+  return GTK_WIDGET (moko_navigation_list);
+}
+
+static void sms_contact_window_close (SmsContactWindow* self)
+{
+  g_signal_emit (G_OBJECT(self),sms_contact_signals[CONTACT_SELECT_DONE_SIGNAL],0);
+
+  /* Synthesize delete_event to close dialog. */
+
+  GtkWidget *widget = GTK_WIDGET(self);
+  GdkEvent *event;
+
+  event = gdk_event_new( GDK_DELETE );
+
+  event->any.window = g_object_ref(widget->window);
+  event->any.send_event = TRUE;
+
+  gtk_main_do_event( event );
+  gdk_event_free( event );
+  
+}
+
+static void contacts_view_cursor_changed(GtkTreeSelection* selection, SmsContactData* data)
+{
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  //GtkTreeView* view = gtk_tree_selection_get_tree_view( selection );
+
+  if ( gtk_tree_selection_get_selected( selection, &model, &iter ) )
+  {
+     gchar* name;
+     gchar* phoneNum;
+     gboolean selected;
+     GtkListStore* liststore = data->contacts_liststore;
+
+     gtk_tree_model_get( model, &iter, 
+                         CONTACT_SEL_COL, &selected,
+			 CONTACT_NAME_COL, &name,
+                         CONTACT_CELLPHONE_COL, &phoneNum,
+                         -1);
+
+    if (selected)
+      gtk_list_store_set (liststore, &iter, CONTACT_SEL_COL, FALSE, -1);
+    else
+      gtk_list_store_set (liststore, &iter, CONTACT_SEL_COL, TRUE, -1);
+  }
+
+}
+
+static void contact_select_done(void)
+{
+  g_debug("select ok");
+}
+

Added: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -0,0 +1,76 @@
+/*
+ *  sms-contact-window.h
+ *  
+ *  Authored By Alex Tang <alex at fic-sh.com.cn>
+ *
+ *  Copyright (C) 2006-2007 OpenMoko Inc.
+ *
+ *  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.1 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 Public License for more details.
+ *  
+ *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
+ */
+#ifndef _SMS_CONTACT_WINDOW_H_
+#define _SMS_CONTACT_WINDOW_H_
+
+#include <libmokoui/moko-window.h>
+#include <libmokoui/moko-pixmap-button.h>
+#include <libmokoui/moko-navigation-list.h>
+#include <libmokoui/moko-application.h>
+#include <libebook/e-book.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define SMS_TYPE_CONTACT_WINDOW  sms_contact_window_get_type()
+#define SMS_CONTACT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SMS_TYPE_CONTACT_WINDOW, SmsContactWindow))
+#define SMS_CONTACT_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SMS_TYPE_CONTACT_WINDOW, SmsContactWindowClass))
+#define SMS_IS_CONTACT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SMS_TYPE_CONTACT_WINDOW))
+#define SMS_IS_CONTACT_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SMS_TYPE_CONTACT_WINDOW_CLASS)
+#define SMS_GET_CONTACT_WINDOW_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SMS_TYPE_CONTACT_WINDOW, SmsContactWindowClass)
+
+GType sms_contact_window_get_type();
+GtkWidget* sms_contact_new();
+
+enum {
+  CONTACT_SEL_COL,
+  CONTACT_NAME_COL,
+  CONTACT_CELLPHONE_COL,
+  CONTACT_LAST_COL
+};
+
+enum {
+  CONTACT_SELECT_DONE_SIGNAL,
+  LAST_SIGNAL
+};
+
+typedef struct
+{
+  MokoWindow parent;
+  /* instance members */
+  gchar* nameList;
+}SmsContactWindow;
+
+typedef struct
+{
+  MokoWindowClass parent_class;
+  /* class members */
+  void (*contact_select_done)(void);
+}SmsContactWindowClass;
+
+typedef struct
+{
+  EBook* book;
+  GtkListStore *contacts_liststore;
+}SmsContactData;
+
+G_END_DECLS
+
+#endif

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -1,4 +1,4 @@
-/*  
+/*
  *  sms-dialog-window.c
  *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
@@ -16,7 +16,7 @@
  *  
  *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
  */
- 
+
 #include "sms-dialog-window.h"
 #include "main.h"
 #include <libmokoui/moko-pixmap-button.h>
@@ -42,7 +42,7 @@
 typedef struct _SmsDialogWindowPrivate SmsDialogWindowPrivate;
 
 struct _SmsDialogWindowPrivate
-{
+  {
     GtkWidget* vbox;
     GtkWidget* hbox;
     GtkWidget* eventbox;
@@ -51,50 +51,50 @@
     GtkWidget* toolbox;
     GtkWidget* closebutton;
     GtkWidget* txtView;
-    GtkWidget* toEntry;
-};
+  };
 
 typedef struct _SmsDialogRunInfo
-{
+  {
     SmsDialogWindow *dialog;
     gint response_id;
     GMainLoop *loop;
     gboolean destroyed;
-} SmsDialogRunInfo;
+  }
+SmsDialogRunInfo;
 
 static void sms_dialog_window_close(SmsDialogWindow* self);
 gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget,
-                                                 GdkEventKey     *event,
-		                                 SmsDialogWindow *self);
+    GdkEventKey     *event,
+    SmsDialogWindow *self);
 
 
 static void
 shutdown_loop (SmsDialogRunInfo *ri)
 {
-    if (g_main_loop_is_running (ri->loop))
-        g_main_loop_quit (ri->loop);
+  if (g_main_loop_is_running (ri->loop))
+    g_main_loop_quit (ri->loop);
 }
 
 static void
 run_unmap_handler (SmsDialogWindow* dialog, gpointer data)
 {
-    SmsDialogRunInfo *ri = data;
+  SmsDialogRunInfo *ri = data;
 
-    shutdown_loop (ri);
+  shutdown_loop (ri);
 }
 
 static void
 run_response_handler (SmsDialogWindow* dialog,
-                              gint response_id,
-                              gpointer data)
+                      gint response_id,
+                      gpointer data)
 {
-    SmsDialogRunInfo *ri;
+  SmsDialogRunInfo *ri;
 
-    ri = data;
+  ri = data;
 
-    ri->response_id = response_id;
+  ri->response_id = response_id;
 
-    shutdown_loop (ri);
+  shutdown_loop (ri);
 }
 
 static gint
@@ -102,422 +102,353 @@
                     GdkEventAny *event,
                     gpointer data)
 {
-    SmsDialogRunInfo *ri = data;
+  SmsDialogRunInfo *ri = data;
 
-    shutdown_loop (ri);
+  shutdown_loop (ri);
 
-    return TRUE; /* Do not destroy */
+  return TRUE; /* Do not destroy */
 }
 
 static void
-        run_destroy_handler (SmsDialogWindow* dialog, gpointer data)
+run_destroy_handler (SmsDialogWindow* dialog, gpointer data)
 {
-    SmsDialogRunInfo *ri = data;
+  SmsDialogRunInfo *ri = data;
 
-    /* shutdown_loop will be called by run_unmap_handler */
+  /* shutdown_loop will be called by run_unmap_handler */
 
-    ri->destroyed = TRUE;
+  ri->destroyed = TRUE;
 }
 
 
 static void
 sms_dialog_window_dispose(GObject* object)
 {
-    if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose)
-        G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object);
+  if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose)
+    G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object);
 }
 
 static void
 sms_dialog_window_finalize(GObject* object)
 {
-    G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object);
+  G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object);
 }
 
 static void
 sms_dialog_window_class_init(SmsDialogWindowClass* klass)
 {
-    GObjectClass* object_class = G_OBJECT_CLASS(klass);
+  GObjectClass* object_class = G_OBJECT_CLASS(klass);
 
-    g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate));
+  g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate));
 
-    object_class->dispose = sms_dialog_window_dispose;
-    object_class->finalize = sms_dialog_window_finalize;
+  object_class->dispose = sms_dialog_window_dispose;
+  object_class->finalize = sms_dialog_window_finalize;
 }
 
 SmsDialogWindow*
 sms_dialog_window_new(void)
 {
-    return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL);
+  return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL);
 }
 
 static void
 sms_dialog_window_init(SmsDialogWindow* self)
 {
-    MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );
-    if ( parent )
+  MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );
+  if ( parent )
     {
-        gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
+      gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
 #ifndef DEBUG_THIS_FILE
-        gtk_window_set_modal( GTK_WINDOW(self), TRUE );
+      gtk_window_set_modal( GTK_WINDOW(self), TRUE );
 #endif
-        gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );
+      gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );
     }
 }
 
 void sms_dialog_window_set_title(SmsDialogWindow* self, const gchar* title)
 {
-    SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-    if ( !priv->titleLabel )
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  if ( !priv->titleLabel )
     {
-        priv->titleLabel = gtk_label_new( title );
-        priv->hbox = gtk_hbox_new( FALSE, 0 );
-        gtk_window_set_title( GTK_WINDOW(self), title );
-        gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
-        gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 );
-        PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10");
-        priv->textInLabel = gtk_label_new( "160(1)" );
-        gtk_widget_modify_font (priv->textInLabel, font_desc);
-        gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" );
-        gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0);
-        priv->eventbox = gtk_event_box_new();
-        gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) );
-        gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
-        //FIXME get from theme
-        gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
-        gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
-        gtk_widget_show( GTK_WIDGET(priv->eventbox) );
+      priv->titleLabel = gtk_label_new( title );
+      priv->hbox = gtk_hbox_new( FALSE, 0 );
+      gtk_window_set_title( GTK_WINDOW(self), title );
+      gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
+      gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 );
+      PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10");
+      priv->textInLabel = gtk_label_new( "160(1)" );
+      gtk_widget_modify_font (priv->textInLabel, font_desc);
+      gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" );
+      gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0);
+      priv->eventbox = gtk_event_box_new();
+      gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) );
+      gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
+      //FIXME get from theme
+      gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
+      gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
+      gtk_widget_show( GTK_WIDGET(priv->eventbox) );
     }
-    else
+  else
     {
-        gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
-        gtk_window_set_title( GTK_WINDOW(self), title );
+      gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
+      gtk_window_set_title( GTK_WINDOW(self), title );
     }
-    if ( !priv->vbox )
+  if ( !priv->vbox )
     {
-	GtkWidget* image;
-	GtkWidget* smsSendBtn;
-	GtkWidget* emailBtn;
-    		
-        priv->vbox = gtk_vbox_new( FALSE, 0 );
-        gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
-        
-        //Add toolbox
-        priv->hbox = gtk_hbox_new( FALSE, 0 );
-        priv->toolbox = moko_tool_box_new();
-        GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox));
-        priv->closebutton = moko_pixmap_button_new();
-        image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png");
-        moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image);
-        gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" );
-        gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280);
-        g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self );
+      GtkWidget* image;
+      GtkWidget* smsSendBtn;
+      GtkWidget* emailBtn;
 
-        emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-        gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" );
-        image = gtk_image_new_from_file (PKGDATADIR "/Address.png");
-        moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image);
-        
-        smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-        gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" );
-	image = gtk_image_new_from_file (PKGDATADIR "/Send.png");
-    	moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image);
-        
-        gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 );
-        gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
-        
-        //Fill input entry
-	GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-	gtk_alignment_set_padding (alignment, 10, 10, 50, 10);
-	GtkWidget* entrybox = gtk_hbox_new(FALSE,0);
-	GtkWidget* toLabel = gtk_label_new("To:");
-	gtk_widget_set_size_request (toLabel, 40, -1);
-	gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5);
-	priv->toEntry = gtk_entry_new();
-	gtk_widget_set_size_request (priv->toEntry, 320, -1);
-	gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0);
-	gtk_box_pack_start (GTK_BOX(entrybox),priv->toEntry,FALSE,TRUE,0);
-	gtk_container_add (GTK_CONTAINER(alignment), entrybox);
-	gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
-		    
-        /* fill textview */
-	priv->txtView = gtk_text_view_new();
-	GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-	gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30);
-	GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-	GtkWidget*  viewport = gtk_viewport_new (NULL, NULL);
-	gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR);
-	gtk_container_add (GTK_CONTAINER(viewport), priv->txtView);
-	gtk_container_add (GTK_CONTAINER (scolwin), viewport);
-	gtk_container_add (GTK_CONTAINER(viewAlign),scolwin);
-   	gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 );
-	gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
+      priv->vbox = gtk_vbox_new( FALSE, 0 );
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
 
-	g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event",
-	                   G_CALLBACK (on_sms_txtView_key_release_event),
-			   self);
-    }
-}
+      //Add toolbox
+      priv->hbox = gtk_hbox_new( FALSE, 0 );
+      priv->toolbox = moko_tool_box_new();
+      GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox));
+      priv->closebutton = moko_pixmap_button_new();
+      image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image);
+      gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" );
+      gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280);
+      g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self );
 
-void mail_dialog_window_set_title(SmsDialogWindow* self, const gchar* title)
-{
-    SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-    if ( !priv->titleLabel ) {
-        priv->titleLabel = gtk_label_new( title );
-        gtk_window_set_title( GTK_WINDOW(self), title );
-        gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
-        priv->eventbox = gtk_event_box_new();
-        gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) );
-        gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
-        //FIXME get from theme
-        gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
-        gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel);
-        gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
-        gtk_widget_show( GTK_WIDGET(priv->eventbox) );
-    }
-    else{
-        gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
-        gtk_window_set_title( GTK_WINDOW(self), title );
-    }
-    if ( !priv->vbox ){
-        GtkWidget* image;
-	GtkWidget* smsSendBtn;
-	GtkWidget* emailBtn;
-	GtkWidget* attachBtn;
-    		
-        priv->vbox = gtk_vbox_new( FALSE, 0 );
-        gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
-        
-        //Add toolbox
-        priv->hbox = gtk_hbox_new( FALSE, 0 );
-        priv->toolbox = moko_tool_box_new();
-        GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox));
-        priv->closebutton = moko_pixmap_button_new();
-        image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png");
-        moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image);
-        gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" );
-        gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200);
-        g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self );
+      self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
+      gtk_widget_set_name( GTK_WIDGET(self->addressBtn ), "mokostylusbutton-white" );
+      image = gtk_image_new_from_file (PKGDATADIR "/Address.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn ),image);
 
-	attachBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-	gtk_widget_set_name( GTK_WIDGET(attachBtn), "mokostylusbutton-white" );
-        image = gtk_image_new_from_file (PKGDATADIR "/Address.png");
-        moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(attachBtn),image);
-        
-        emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-        gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" );
-        image = gtk_image_new_from_file (PKGDATADIR "/Attached.png");
-        moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image);
-        
-        smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-        gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" );
-        image = gtk_image_new_from_file (PKGDATADIR "/Send.png");
-   	moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image);
-        
-        gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 );
-        gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
-        
-        //Fill input entry
-	GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-	gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
-	GtkWidget* hbox = gtk_hbox_new(FALSE,0);
-	PangoFontDescription* font_desc;
-	font_desc = pango_font_description_from_string ("Bold 12");
-	GtkWidget* toLabel = gtk_label_new("To:");
-	gtk_widget_modify_font (toLabel, font_desc);
-	gtk_widget_set_size_request (toLabel, 110, -1);
-	gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5);
-	priv->toEntry = gtk_entry_new();
-	gtk_widget_set_size_request (priv->toEntry, 320, -1);
-	gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0);
-	gtk_box_pack_start (GTK_BOX(hbox),priv->toEntry,FALSE,TRUE,0);
-	gtk_container_add (GTK_CONTAINER(alignment), hbox);
-	gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
+      smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
+      gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" );
+      image = gtk_image_new_from_file (PKGDATADIR "/Send.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image);
 
-        alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-	gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
-	hbox = gtk_hbox_new(FALSE,0);
-	GtkWidget* ccLabel = gtk_label_new("CC:");
-	font_desc = pango_font_description_from_string ("Bold 12");
-	gtk_widget_set_size_request (ccLabel, 110, -1);
-	gtk_widget_modify_font (ccLabel, font_desc);
-	gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5);
-	GtkWidget* ccEntry = gtk_entry_new();
-	gtk_widget_set_size_request (ccEntry, 320, -1);
-	gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0);
-	gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0);
-	gtk_container_add (GTK_CONTAINER(alignment), hbox);
-	gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
-        
-	alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-	gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
-	hbox = gtk_hbox_new(FALSE,0);
-	GtkWidget* bccLabel = gtk_label_new("Bcc:");
-	font_desc = pango_font_description_from_string ("Bold 12");
-	gtk_widget_set_size_request (bccLabel, 110, -1);
-	gtk_widget_modify_font (bccLabel, font_desc);
-	gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5);
-	GtkWidget* bccEntry = gtk_entry_new();
-	gtk_widget_set_size_request (bccEntry, 320, -1);
-	gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0);
-	gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0);
-	gtk_container_add (GTK_CONTAINER(alignment), hbox);
-	gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 );
+      gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
 
-        alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-	gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
-	hbox = gtk_hbox_new(FALSE,0);
-	GtkWidget* subjectLabel = gtk_label_new("Subject:");
-	font_desc = pango_font_description_from_string ("Bold 12");
-	gtk_widget_modify_font (subjectLabel, font_desc);
-	gtk_widget_set_size_request (subjectLabel, 110, -1);
-	gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5);
-	GtkWidget* subjectEntry = gtk_entry_new();
-	gtk_widget_set_size_request (subjectEntry, 320, -1);
-	gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0);
-	gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0);
-	gtk_container_add (GTK_CONTAINER(alignment), hbox);
-	gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
+      //Fill input entry
+      GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+      gtk_alignment_set_padding (alignment, 10, 10, 50, 10);
+      GtkWidget* entrybox = gtk_hbox_new(FALSE,0);
+      GtkWidget* toLabel = gtk_label_new("To:");
+      gtk_widget_set_size_request (toLabel, 40, -1);
+      gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5);
+      self->toEntry = gtk_entry_new();
+      gtk_widget_set_size_request (self->toEntry, 320, -1);
+      gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0);
+      gtk_box_pack_start (GTK_BOX(entrybox),self->toEntry,FALSE,TRUE,0);
+      gtk_container_add (GTK_CONTAINER(alignment), entrybox);
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
 
-        /* fill textview */
-	GtkWidget* txtView = gtk_text_view_new();
-	GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-	gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30);
-	GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-	GtkWidget*  viewport = gtk_viewport_new (NULL, NULL);
-	gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR);
-	gtk_container_add (GTK_CONTAINER(viewport), txtView);
-	gtk_container_add (GTK_CONTAINER (scolwin), viewport);
-	gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin));
-	gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 );
-	gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
+      /* fill textview */
+      priv->txtView = gtk_text_view_new();
+      GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
+      gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30);
+      GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+      GtkWidget*  viewport = gtk_viewport_new (NULL, NULL);
+      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR);
+      gtk_container_add (GTK_CONTAINER(viewport), priv->txtView);
+      gtk_container_add (GTK_CONTAINER (scolwin), viewport);
+      gtk_container_add (GTK_CONTAINER(viewAlign),scolwin);
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 );
+      gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
+
+      g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event",
+                         G_CALLBACK (on_sms_txtView_key_release_event),
+                         self);
     }
 }
 
-void sms_dialog_window_set_contents(SmsDialogWindow* self, GtkWidget* contents)
+void mail_dialog_window_set_title(SmsDialogWindow* self, const gchar* title)
 {
-     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-     g_return_if_fail( priv->vbox );
-     gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 );
-}
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  if ( !priv->titleLabel )
+    {
+      priv->titleLabel = gtk_label_new( title );
+      gtk_window_set_title( GTK_WINDOW(self), title );
+      gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
+      priv->eventbox = gtk_event_box_new();
+      gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
+      //FIXME get from theme
+      gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
+      gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel);
+      gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
+      gtk_widget_show( GTK_WIDGET(priv->eventbox) );
+    }
+  else
+    {
+      gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
+      gtk_window_set_title( GTK_WINDOW(self), title );
+    }
+  if ( !priv->vbox )
+    {
+      GtkWidget* image;
+      GtkWidget* smsSendBtn;
+      GtkWidget* emailBtn;
 
-static void sms_dialog_window_close(SmsDialogWindow* self)
-{
-     /* Synthesize delete_event to close dialog. */
+      priv->vbox = gtk_vbox_new( FALSE, 0 );
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
 
-     GtkWidget *widget = GTK_WIDGET(self);
-     GdkEvent *event;
+      //Add toolbox
+      priv->hbox = gtk_hbox_new( FALSE, 0 );
+      priv->toolbox = moko_tool_box_new();
+      GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox));
+      priv->closebutton = moko_pixmap_button_new();
+      image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image);
+      gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" );
+      gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200);
+      g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self );
 
-     event = gdk_event_new( GDK_DELETE );
+      self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
+      gtk_widget_set_name( GTK_WIDGET(self->addressBtn), "mokostylusbutton-white" );
+      image = gtk_image_new_from_file (PKGDATADIR "/Address.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn),image);
 
-     event->any.window = g_object_ref(widget->window);
-     event->any.send_event = TRUE;
+      emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
+      gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" );
+      image = gtk_image_new_from_file (PKGDATADIR "/Attached.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image);
 
-     gtk_main_do_event( event );
-     gdk_event_free( event );
-}
+      smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
+      gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" );
+      image = gtk_image_new_from_file (PKGDATADIR "/Send.png");
+      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image);
 
-guint sms_dialog_window_run(SmsDialogWindow* dialog)
-{
-    SmsDialogRunInfo ri = { NULL, GTK_RESPONSE_NONE, NULL, FALSE };
-    gboolean was_modal;
-    gulong response_handler;
-    gulong unmap_handler;
-    gulong destroy_handler;
-    gulong delete_handler;
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 );
+      gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
 
-    g_return_val_if_fail (SMS_IS_DIALOG_WINDOW(dialog), -1);
+      //Fill input entry
+      GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+      gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
+      GtkWidget* hbox = gtk_hbox_new(FALSE,0);
+      PangoFontDescription* font_desc;
+      font_desc = pango_font_description_from_string ("Bold 12");
+      GtkWidget* toLabel = gtk_label_new("To:");
+      gtk_widget_modify_font (toLabel, font_desc);
+      gtk_widget_set_size_request (toLabel, 110, -1);
+      gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5);
+      self->toEntry = gtk_entry_new();
+      gtk_widget_set_size_request (self->toEntry, 320, -1);
+      gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0);
+      gtk_box_pack_start (GTK_BOX(hbox),self->toEntry,FALSE,TRUE,0);
+      gtk_container_add (GTK_CONTAINER(alignment), hbox);
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
 
-    g_object_ref (dialog);
+      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+      gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
+      hbox = gtk_hbox_new(FALSE,0);
+      GtkWidget* ccLabel = gtk_label_new("CC:");
+      font_desc = pango_font_description_from_string ("Bold 12");
+      gtk_widget_set_size_request (ccLabel, 110, -1);
+      gtk_widget_modify_font (ccLabel, font_desc);
+      gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5);
+      GtkWidget* ccEntry = gtk_entry_new();
+      gtk_widget_set_size_request (ccEntry, 320, -1);
+      gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0);
+      gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0);
+      gtk_container_add (GTK_CONTAINER(alignment), hbox);
+      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
 
-#ifndef DEBUG_THIS_FILE
-    was_modal = GTK_WINDOW (dialog)->modal;
-    if (!was_modal)
-        gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-#endif
+      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+      gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
+      hbox = gtk_hbox_new(FALSE,0);
+      GtkWidget* bccLabel = gtk_label_new("Bcc:");
+      font_desc = pango_font_description_from_string ("Bold 12");
+      gtk_widget_set_size_request (bccLabel, 110, -1);
+      gtk_widget_modify_font (bccLabel, font_desc);
+      gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5);
+      GtkWidget* bccEntry = gtk_entry_new();
+      gtk_widget_set_size_request (bccEntry, 320, -1);
+      gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0);
+      gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0);
+      gtk_container_add (GTK_CONTAINER(alignment), hbox);
+      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
 
-    if (!GTK_WIDGET_VISIBLE (dialog))
-        gtk_widget_show (GTK_WIDGET (dialog));
+      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+      gtk_alignment_set_padding (alignment, 5, 5, 10, 10);
+      hbox = gtk_hbox_new(FALSE,0);
+      GtkWidget* subjectLabel = gtk_label_new("Subject:");
+      font_desc = pango_font_description_from_string ("Bold 12");
+      gtk_widget_modify_font (subjectLabel, font_desc);
+      gtk_widget_set_size_request (subjectLabel, 110, -1);
+      gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5);
+      GtkWidget* subjectEntry = gtk_entry_new();
+      gtk_widget_set_size_request (subjectEntry, 320, -1);
+      gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0);
+      gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0);
+      gtk_container_add (GTK_CONTAINER(alignment), hbox);
+      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0);
 
-    response_handler =
-            g_signal_connect (dialog,
-                              "response",
-                              G_CALLBACK (run_response_handler),
-                              &ri);
+      /* fill textview */
+      GtkWidget* txtView = gtk_text_view_new();
+      GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
+      gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30);
+      GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+      GtkWidget*  viewport = gtk_viewport_new (NULL, NULL);
+      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR);
+      gtk_container_add (GTK_CONTAINER(viewport), txtView);
+      gtk_container_add (GTK_CONTAINER (scolwin), viewport);
+      gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin));
+      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 );
+      gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
+    }
+}
 
-    unmap_handler =
-            g_signal_connect (dialog,
-                              "unmap",
-                              G_CALLBACK (run_unmap_handler),
-                              &ri);
+void sms_dialog_window_set_contents(SmsDialogWindow* self, GtkWidget* contents)
+{
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  g_return_if_fail( priv->vbox );
+  gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 );
+}
 
-    delete_handler =
-            g_signal_connect (dialog,
-                              "delete-event",
-                              G_CALLBACK (run_delete_handler),
-                              &ri);
+static void sms_dialog_window_close(SmsDialogWindow* self)
+{
+  /* Synthesize delete_event to close dialog. */
 
-    destroy_handler =
-            g_signal_connect (dialog,
-                              "destroy",
-                              G_CALLBACK (run_destroy_handler),
-                              &ri);
+  GtkWidget *widget = GTK_WIDGET(self);
+  GdkEvent *event;
 
-    ri.loop = g_main_loop_new (NULL, FALSE);
+  event = gdk_event_new( GDK_DELETE );
 
-    GDK_THREADS_LEAVE ();
-    g_main_loop_run (ri.loop);
-    GDK_THREADS_ENTER ();
+  event->any.window = g_object_ref(widget->window);
+  event->any.send_event = TRUE;
 
-    g_main_loop_unref (ri.loop);
-    ri.loop = NULL;
-
-    if (!ri.destroyed)
-    {
-        if (!was_modal)
-            gtk_window_set_modal (GTK_WINDOW(dialog), FALSE);
-
-        g_signal_handler_disconnect (dialog, response_handler);
-        g_signal_handler_disconnect (dialog, unmap_handler);
-        g_signal_handler_disconnect (dialog, delete_handler);
-        g_signal_handler_disconnect (dialog, destroy_handler);
-    }
-
-    g_object_unref (dialog);
-
-    return ri.response_id;
+  gtk_main_do_event( event );
+  gdk_event_free( event );
 }
 
 void sms_dialog_reply_message(SmsDialogWindow* self, message* msg)
 {
-    g_assert (msg != NULL);
-    SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-    gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name);
-    gtk_widget_grab_focus (priv->txtView);
+  g_assert (msg != NULL);
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name);
+  gtk_widget_grab_focus (priv->txtView);
 }
 
 void sms_dialog_forward_message(SmsDialogWindow* self, message* msg)
 {
-    g_assert (msg != NULL);
-    SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-    gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name);
-    g_assert (priv->txtView != NULL);
-    GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView));
-    gchar* text = g_strdup_printf("\n\n\n>%s",msg->content);
-    gtk_text_buffer_set_text (buffer, text, strlen(text));
-    gtk_widget_grab_focus (priv->txtView);
+  g_assert (msg != NULL);
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name);
+  g_assert (priv->txtView != NULL);
+  GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView));
+  gchar* text = g_strdup_printf("\n\n\n>%s",msg->content);
+  gtk_text_buffer_set_text (buffer, text, strlen(text));
+  gtk_widget_grab_focus (priv->txtView);
 }
 
 gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget,
                                                  GdkEventKey     *event,
-						 SmsDialogWindow *self)
+                                                 SmsDialogWindow *self)
 {
-    SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
-    GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView));
-    gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160;
-    gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1;
-    gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m));
-    return FALSE;
+  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self);
+  GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView));
+  gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160;
+  gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1;
+  gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m));
+  return FALSE;
 }
 
+

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -1,4 +1,4 @@
-/*  
+/*
  *  sms-dialog-window.h
  *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
@@ -16,7 +16,7 @@
  *  
  *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
  */
- 
+
 #ifndef _SMS_DIALOG_WINDOW_H_
 #define _SMS_DIALOG_WINDOW_H_
 
@@ -35,13 +35,19 @@
 #define SMS_IS_DIALOG_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass),   SMS_TYPE_DIALOG_WINDOW))
 #define SMS_DIALOG_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),   SMS_TYPE_DIALOG_WINDOW, SmsDialogWindowClass))
 
-typedef struct {
-    MokoWindow parent;
-} SmsDialogWindow;
+typedef struct
+{ 
+  MokoWindow parent;
+  GtkWidget* addressBtn;
+  GtkWidget* toEntry;
+}
+SmsDialogWindow;
 
-typedef struct {
-    MokoWindowClass parent_class;
-} SmsDialogWindowClass;
+typedef struct
+{
+  MokoWindowClass parent_class;
+}
+SmsDialogWindowClass;
 
 GType sms_dialog_window_get_type();
 SmsDialogWindow* sms_dialog_window_new();
@@ -51,7 +57,6 @@
 void sms_dialog_window_set_contents(SmsDialogWindow* self, GtkWidget* contents);
 void sms_dialog_reply_message(SmsDialogWindow* self, message* msg);
 void sms_dialog_forward_message(SmsDialogWindow* self, message* msg);
-guint sms_dialog_window_run(SmsDialogWindow* self);
 
 G_END_DECLS
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c	2007-03-27 08:34:31 UTC (rev 1516)
@@ -1,4 +1,4 @@
-/*  
+/*
  *  sms-membership-window.c
  *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
@@ -16,7 +16,7 @@
  *  
  *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
  */
- 
+
 #include "sms-membership-window.h"
 #include <libmokoui/moko-pixmap-button.h>
 #include <gtk/gtkeventbox.h>
@@ -36,9 +36,12 @@
 #define SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(o)   (G_TYPE_INSTANCE_GET_PRIVATE ((o), SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowPrivate))
 
 typedef struct _SmsMembershipWindowPrivate SmsMembershipWindowPrivate;
+typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model,
+    GtkTreeIter *iter,
+    gpointer data);
 
 struct _SmsMembershipWindowPrivate
-{
+  {
     GtkWidget* vbox;
     GtkWidget* hbox;
     GtkWidget* folderbox;
@@ -56,15 +59,16 @@
     GtkWidget* view;
     GtkListStore* liststore;
     GSList* rdoBtnList;
-};
+  };
 
 typedef struct _SmsMembershipRunInfo
-{
+  {
     SmsMembershipWindow *dialog;
     gint response_id;
     GMainLoop *loop;
     gboolean destroyed;
-} SmsMembershipRunInfo;
+  }
+SmsMembershipRunInfo;
 
 static void sms_membership_window_close(SmsMembershipWindow* self);
 
@@ -78,341 +82,352 @@
 static void
 sms_membership_window_dispose(GObject* object)
 {
-    if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose)
-        G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object);
+  if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose)
+    G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object);
 }
 
 static void
 sms_membership_window_finalize(GObject* object)
 {
-    G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object);
+  G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object);
 }
 
 static void
 sms_membership_window_class_init(SmsMembershipWindowClass* klass)
 {
-    GObjectClass* object_class = G_OBJECT_CLASS(klass);
+  GObjectClass* object_class = G_OBJECT_CLASS(klass);
 
-    g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate));
+  g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate));
 
-    object_class->dispose = sms_membership_window_dispose;
-    object_class->finalize = sms_membership_window_finalize;
+  object_class->dispose = sms_membership_window_dispose;
+  object_class->finalize = sms_membership_window_finalize;
 }
 
 GtkWidget*
 sms_membership_window_new(void)
 {
-    return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL));
+  return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL));
 }
 
 static void sms_membership_window_close(SmsMembershipWindow* self)
 {
-    GtkWidget *widget = GTK_WIDGET(self);
-    GdkEvent *event;
+  GtkWidget *widget = GTK_WIDGET(self);
+  GdkEvent *event;
 
-    event = gdk_event_new( GDK_DELETE );
+  event = gdk_event_new( GDK_DELETE );
 
-    event->any.window = g_object_ref(widget->window);
-    event->any.send_event = TRUE;
+  event->any.window = g_object_ref(widget->window);
+  event->any.send_event = TRUE;
 
-    gtk_main_do_event( event );
-    gdk_event_free( event );
+  gtk_main_do_event( event );
+  gdk_event_free( event );
 }
 
 gboolean membership_filter_changed(GtkWidget* widget, gchar* text, SmsMembershipWindow* self)
 {
-    g_debug("changed to %s folder",text);
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-    self->currentfolder = g_strdup(text);
-    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
-    
-    return FALSE;
+  g_debug("changed to %s folder",text);
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+  self->currentfolder = g_strdup(text);
+  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
+
+  return FALSE;
 }
 
-void sms_membership_window_show (SmsMembershipWindow* self){
-	GtkWidget *widget = GTK_WIDGET(self);
-	gtk_widget_show (widget);
+void sms_membership_window_show (SmsMembershipWindow* self)
+{
+  GtkWidget *widget = GTK_WIDGET(self);
+  gtk_widget_show (widget);
 }
 
 static void
 sms_membership_window_init(SmsMembershipWindow* self)
 {
-    MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );
-    if ( parent )
+  MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() );
+  if ( parent )
     {
-        gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
+      gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
 #ifndef DEBUG_THIS_FILE
-        gtk_window_set_modal( GTK_WINDOW(self), TRUE );
+      gtk_window_set_modal( GTK_WINDOW(self), TRUE );
 #endif
-        gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );
+      gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE );
     }
-    
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-    self->currentfolder = g_strdup("Inbox");
-    //Set title
-    priv->liststore = NULL;
-    priv->vbox = gtk_vbox_new( FALSE, 0 );
-    
-    priv->menubox = moko_menu_box_new();
-    gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 );
-    
-    priv->titleLabel = gtk_label_new( "Message Membership" );
-    gtk_window_set_title( GTK_WINDOW(self), "Message Membership" );
-    gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
-    priv->eventbox = gtk_event_box_new();
-    gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) );
-    gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
 
-    //FIXME get from theme
-    gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
-    gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
-    gtk_widget_show( GTK_WIDGET(priv->eventbox) );
-    gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
-    priv->folderbox = gtk_vbox_new( FALSE, 0 );
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+  self->currentfolder = g_strdup("Inbox");
+  //Set title
+  priv->liststore = NULL;
+  priv->vbox = gtk_vbox_new( FALSE, 0 );
 
-    //Set folder list
-    GtkWidget* closebox = gtk_hbox_new( FALSE, 0 );
-    PangoFontDescription* font_desc;
-		font_desc = pango_font_description_from_string ("bold 12");
-    priv->fromLabel = gtk_label_new( "AlexTang" );
-    gtk_widget_modify_font (priv->fromLabel, font_desc);
-    gtk_widget_set_size_request (priv->fromLabel, 250, -1);
-    gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5);
-    priv->subjectLabel = gtk_label_new( "Subject" );
-    gtk_widget_set_size_request (priv->subjectLabel, 250, -1);
-    gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5);
-    
-    //set header box: two labels and a closebutton
-    GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 );
-    gtk_box_set_spacing (GTK_BOX(headerbox),5);
-    priv->closebutton = gtk_button_new_with_label ("Close");
-    gtk_widget_set_size_request (priv->closebutton, -1, 38);
-    GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-    gtk_alignment_set_padding (alignment, 5, 5, 5, 5);
-    gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton);
-    GtkWidget* hsep = gtk_hseparator_new();
-    gtk_widget_set_size_request (hsep, -1, 3);
+  priv->menubox = moko_menu_box_new();
+  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 );
 
-    //set folder box alignment fbAlign
-    GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-    gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30);
-    gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) );
-	  
-    gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 );
-    gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 );
-    gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 );
-    gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
-    gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 );
-    gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 );
-    gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 );
-    
-    gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
-    gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
-    g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self );
-    g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self );
-    
+  priv->titleLabel = gtk_label_new( "Message Membership" );
+  gtk_window_set_title( GTK_WINDOW(self), "Message Membership" );
+  gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
+  priv->eventbox = gtk_event_box_new();
+  gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) );
+  gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" );
+
+  //FIXME get from theme
+  gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 );
+  gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
+  gtk_widget_show( GTK_WIDGET(priv->eventbox) );
+  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
+  priv->folderbox = gtk_vbox_new( FALSE, 0 );
+
+  //Set folder list
+  GtkWidget* closebox = gtk_hbox_new( FALSE, 0 );
+  PangoFontDescription* font_desc;
+  font_desc = pango_font_description_from_string ("bold 12");
+  priv->fromLabel = gtk_label_new( "AlexTang" );
+  gtk_widget_modify_font (priv->fromLabel, font_desc);
+  gtk_widget_set_size_request (priv->fromLabel, 250, -1);
+  gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5);
+  priv->subjectLabel = gtk_label_new( "Subject" );
+  gtk_widget_set_size_request (priv->subjectLabel, 250, -1);
+  gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5);
+
+  //set header box: two labels and a closebutton
+  GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 );
+  gtk_box_set_spacing (GTK_BOX(headerbox),5);
+  priv->closebutton = gtk_button_new_with_label ("Close");
+  gtk_widget_set_size_request (priv->closebutton, -1, 38);
+  GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+  gtk_alignment_set_padding (alignment, 5, 5, 5, 5);
+  gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton);
+  GtkWidget* hsep = gtk_hseparator_new();
+  gtk_widget_set_size_request (hsep, -1, 3);
+
+  //set folder box alignment fbAlign
+  GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
+  gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30);
+  gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) );
+
+  gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 );
+  gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 );
+  gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 );
+  gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 );
+  gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 );
+  gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 );
+  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 );
+
+  gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
+  gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
+  g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self );
+  g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self );
+
 }
 
 void membeship_rdo_btn_clicked ( GtkButton* button, SmsMembershipWindow* self)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    GtkTreeIter childiter;
-    GtkTreeSelection* selection;
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-	  
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view));
-    gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter);
-    if (has_selection){
-        gchar* folder;
-	gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1);
-	g_debug ("folder is %s",folder);
-	self->currentfolder = g_strdup(folder);
-	gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter);
-	gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1);
-        gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  GtkTreeIter childiter;
+  GtkTreeSelection* selection;
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+
+  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view));
+  gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter);
+  if (has_selection)
+    {
+      gchar* folder;
+      gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1);
+      g_debug ("folder is %s",folder);
+      self->currentfolder = g_strdup(folder);
+      gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter);
+      gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1);
+      gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
     }
 }
 
 void sms_membership_window_set_menubox(SmsMembershipWindow* self, GSList* folderlist)
 {
-    GtkWidget* appmenu;
-    GtkWidget* filtmenu;
-    
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);	  
-    
-    /* application menu */
-    appmenu = NULL;
-    /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" ));
-    GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" ));
-    GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" ));
-    GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" ));
-    GtkWidget* sepitem = gtk_separator_menu_item_new(); 
-    GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" ));
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) );
-    gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/
-    
-    GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ;
-    GtkWidget *rdo_btn = NULL;
-    GSList *rdo_btn_group;
-    GSList* c = folderlist;
-    
-    filtmenu = gtk_menu_new();
-    for (; c; c = g_slist_next(c) ){
-        //add folder to filter menu
-        gchar* folder = (gchar*) c->data;
-	g_debug( "adding folder '%s'", folder );
-        gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) );
-        
-        //add folder to folder list
-        if(!g_strcasecmp(folder,"Inbox")){
-	    rdo_btn = gtk_radio_button_new_with_label (NULL, folder);
-	    rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn));
-	    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE);
+  GtkWidget* appmenu;
+  GtkWidget* filtmenu;
+
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+
+  /* application menu */
+  appmenu = NULL;
+  /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" ));
+  GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" ));
+  GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" ));
+  GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" ));
+  GtkWidget* sepitem = gtk_separator_menu_item_new(); 
+  GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" ));
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) );
+  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/
+
+  GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ;
+  GtkWidget *rdo_btn = NULL;
+  GSList *rdo_btn_group;
+  GSList* c = folderlist;
+
+  filtmenu = gtk_menu_new();
+  for (; c; c = g_slist_next(c) )
+    {
+      //add folder to filter menu
+      gchar* folder = (gchar*) c->data;
+      g_debug( "adding folder '%s'", folder );
+      gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) );
+
+      //add folder to folder list
+      if(!g_strcasecmp(folder,"Inbox"))
+        {
+          rdo_btn = gtk_radio_button_new_with_label (NULL, folder);
+          rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn));
+          gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE);
         }
-	else
-	    rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder);
-	priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn);
-	g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self);
-	gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0);
+      else
+        rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder);
+      priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn);
+      g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self);
+      gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0);
     }
 
-    //set radio button box alignment
-    if (!GTK_IS_ALIGNMENT(priv->radioAlign)){
-        g_debug("Should be the first fime");
-        priv->radioAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
-        gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5);
-        priv->radioBtnBox = rdobtnbox;
-        gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
-        gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0);
-    	moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) );
+  //set radio button box alignment
+  if (!GTK_IS_ALIGNMENT(priv->radioAlign))
+    {
+      g_debug("Should be the first fime");
+      priv->radioAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
+      gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5);
+      priv->radioBtnBox = rdobtnbox;
+      gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
+      gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0);
+      moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) );
     }
-    else{
-        gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
-	priv->radioBtnBox = rdobtnbox;
-        gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
+  else
+    {
+      gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
+      priv->radioBtnBox = rdobtnbox;
+      gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) );
     }
-    moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) );
-    gtk_widget_show (priv->menubox);
-    gtk_widget_show_all (priv->vbox);
+  moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) );
+  gtk_widget_show (priv->menubox);
+  gtk_widget_show_all (priv->vbox);
 }
 
 void
 membership_cell_data_func (GtkTreeViewColumn *col,
-		           GtkCellRenderer   *renderer,
-			   GtkTreeModel      *model,
-			   GtkTreeIter       *iter,
-			   gpointer          user_data)
+                           GtkCellRenderer   *renderer,
+                           GtkTreeModel      *model,
+                           GtkTreeIter       *iter,
+                           gpointer          user_data)
 {
-    gint status;
-	
-    gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);
-    if (status == UNREAD)
-        g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);
-    else
-        g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);
+  gint status;
+
+  gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1);
+  if (status == UNREAD)
+    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL);
+  else
+    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL);
 }
 
-void membership_cursor_changed(GtkTreeSelection    *selection, 
+void membership_cursor_changed(GtkTreeSelection    *selection,
                                SmsMembershipWindow *self)
 {
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    message* msg;
-    
-    if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) {
-        msg = g_malloc(sizeof(message));
-        gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
-        gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1);
-        
-        gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name);
-        gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject);
-        g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList));
-        
-	GSList* c;
-	GtkWidget *elem;
-	for( c =priv->rdoBtnList; c; c=g_slist_next(c)) {
-	    elem = c->data;
-	    if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem)))){
-	        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE);
-	    	break;
-	    }
-	}
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+  GtkTreeModel* model;
+  GtkTreeIter iter;
+  message* msg;
+
+  if ( gtk_tree_selection_get_selected( selection, &model, &iter ) )
+    {
+      msg = g_malloc(sizeof(message));
+      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 );
+      gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1);
+
+      gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name);
+      gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject);
+      g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList));
+
+      GSList* c;
+      GtkWidget *elem;
+      for( c =priv->rdoBtnList; c; c=g_slist_next(c))
+        {
+          elem = c->data;
+          if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem))))
+            {
+              gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE);
+              break;
+            }
+        }
     }
 }
 
 gboolean membership_filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, SmsMembershipWindow* self)
 {
-    gchar* folder;
-    gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1);
+  gchar* folder;
+  gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1);
 
-    if(!g_strcasecmp(folder,self->currentfolder))
-  	return TRUE;
-    else
-        return FALSE;
+  if(!g_strcasecmp(folder,self->currentfolder))
+    return TRUE;
+  else
+    return FALSE;
 }
 
-void sms_membership_window_set_messages (SmsMembershipWindow* self, 
-                                         GtkListStore* liststore)
+void sms_membership_window_set_messages (SmsMembershipWindow* self,
+    GtkListStore* liststore)
 {
-    GtkCellRenderer* ren;
-    GtkTreeViewColumn* column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, "From");
+  GtkCellRenderer* ren;
+  GtkTreeViewColumn* column = gtk_tree_view_column_new();
+  gtk_tree_view_column_set_title(column, "From");
 
 
-    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-    priv->liststore = liststore;
-    priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL);
-    priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter)); 
-    gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter),
-                                            membership_filter_visible_function,
-					    self,
-					    NULL);
-    /* Add status picture */
-    ren = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, ren, FALSE);
-    gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL);
-    
-    /* add message from name */
-    ren = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, ren, TRUE);
-    gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL);
-    
-    /* Bold if UNREAD */
-    gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL);
-    moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column );
+  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+  priv->liststore = liststore;
+  priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL);
+  priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter));
+  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter),
+                                          (GtkTreeModelFilterVisibleFunc)membership_filter_visible_function,
+                                          self,
+                                          NULL);
+  /* Add status picture */
+  ren = gtk_cell_renderer_pixbuf_new();
+  gtk_tree_view_column_pack_start(column, ren, FALSE);
+  gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL);
 
-    ren = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, "Subject");
-    gtk_tree_view_column_pack_start(column, ren, TRUE);
-    gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL);
-    gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL);
-    moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column );
-    
-    if (!GTK_IS_ALIGNMENT(priv->msgViewAlign)){
-        GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-        gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10);
-	priv->msgViewAlign = treeViewAlign;
-	priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view));
-        gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
-        gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0);
+  /* add message from name */
+  ren = gtk_cell_renderer_text_new();
+  gtk_tree_view_column_pack_start(column, ren, TRUE);
+  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL);
+
+  /* Bold if UNREAD */
+  gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL);
+  moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column );
+
+  ren = gtk_cell_renderer_text_new();
+  column = gtk_tree_view_column_new();
+  gtk_tree_view_column_set_title(column, "Subject");
+  gtk_tree_view_column_pack_start(column, ren, TRUE);
+  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL);
+  gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL);
+  moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column );
+
+  if (!GTK_IS_ALIGNMENT(priv->msgViewAlign))
+    {
+      GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
+      gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10);
+      priv->msgViewAlign = treeViewAlign;
+      priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view));
+      gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
+      gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0);
     }
-    else{
-        gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
-        priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view));
-        gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
+  else
+    {
+      gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
+      priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view));
+      gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin);
     }
-    gtk_widget_show_all (priv->vbox);
-	  
-    GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view));
-    g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self);
+  gtk_widget_show_all (priv->vbox);
+
+  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view));
+  g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self);
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h	2007-03-27 01:57:29 UTC (rev 1515)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h	2007-03-27 08:34:31 UTC (rev 1516)
@@ -1,4 +1,4 @@
-/*  
+/*
  *  sms-membership-window.h
  *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
@@ -16,7 +16,7 @@
  *  
  *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $]
  */
- 
+
 #ifndef _SMS_MEMBERSHIP_WINDOW_H_
 #define _SMS_MEMBERSHIP_WINDOW_H_
 
@@ -41,14 +41,18 @@
 #define SMS_IS_MEMBERSHIP_WINDOW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass),   SMS_TYPE_MEMBERSHIP_WINDOW))
 #define SMS_MEMBERSHIP_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),   SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowClass))
 
-typedef struct {
+typedef struct
+  {
     MokoWindow parent;
     gchar* currentfolder;
-} SmsMembershipWindow;
+  }
+SmsMembershipWindow;
 
-typedef struct {
+typedef struct
+  {
     MokoWindowClass parent_class;
-} SmsMembershipWindowClass;
+  }
+SmsMembershipWindowClass;
 
 GType sms_membership_window_get_type();
 GtkWidget* sms_membership_window_new();





More information about the commitlog mailing list