r911 - trunk/src/target/OM-2007/applications/openmoko-messages/src

alex_tang at sita.openmoko.org alex_tang at sita.openmoko.org
Thu Feb 8 15:00:54 CET 2007


Author: alex_tang
Date: 2007-02-08 15:00:35 +0100 (Thu, 08 Feb 2007)
New Revision: 911

Modified:
   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:
Replace the comment for each file
Clean the code to remove warnings, although there are still some warnings :P
Systems folder add "trash"
Reply and forward message complete

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am	2007-02-08 14:00:35 UTC (rev 911)
@@ -3,9 +3,9 @@
 
 INCLUDES = -DPKGDATADIR=\"$(pkgdatadir)\" @OPENMOKO_CFLAGS@ -Wall -std=c99 -pedantic
 
-bin_PROGRAMS = openmoko-messenger
+bin_PROGRAMS = openmoko-messages
 
-openmoko_messenger_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
 
-openmoko_messenger_LDADD = @OPENMOKO_LIBS@
+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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,3 +1,23 @@
+/*
+ *  callbacks.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$) [$Author$]
+ */
+
+
 #include "callbacks.h"
 #include "detail-area.h"
 #include <gtk/gtk.h>
@@ -7,7 +27,7 @@
 {
     g_debug("changed to %s folder",text);
     d->currentfolder = g_strdup(text);
-    gtk_tree_model_filter_refilter (d->filter);
+    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter));
     
     return FALSE;
 }
@@ -33,7 +53,7 @@
     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,NULL,30,10);
+    gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10);
     moko_dialog_window_set_title (nfWin, "New Folder");
     
     GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:");
@@ -70,72 +90,69 @@
 {
     g_debug ("mode read");
     message* msg;
-    GtkTreeSelection* selection = gtk_tree_view_get_selection( d->view );
-    GtkTreeView* view = gtk_tree_selection_get_tree_view( selection );
+    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 );
 
-    gchar* name = NULL;
-    gchar* folder = NULL;
-    if ( has_selection )
-    	{
-    		msg = g_malloc(sizeof(message));
+    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 (d->details,msg);
+    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( d->view );
-    GtkTreeView* view = gtk_tree_selection_get_tree_view( selection );
+    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 );
 
-    gchar* name = NULL;
-    gchar* folder = NULL;
-    if ( has_selection )
-    	{
-    		msg = g_malloc(sizeof(message));
+    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;
+    }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( d->view );
-    GtkTreeView* view = gtk_tree_selection_get_tree_view( selection );
+    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 );
 
-    gchar* name = NULL;
-    gchar* folder = NULL;
-    if ( has_selection )
-    	{
-    		msg = g_malloc(sizeof(message));
+    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 );
-      }
+	                    COLUMN_FROM, &msg->name, 
+			    COLUMN_SUBJECT, &msg->subject,
+			    COLUMN_FOLDER, &msg->folder,
+			    COLUMN_CONTENT, &msg->content,
+			    -1 );
+    }
     else msg = NULL;
-    detail_forward_message (d->details,msg);
+
+    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)
@@ -143,67 +160,61 @@
     g_debug ("delete folder called");
     GtkWidget* msgDialog;
     
-    GtkWidget* menuitem = gtk_menu_get_attach_widget (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")){
-			  	
-			  msgDialog = gtk_message_dialog_new( 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( 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);
-  	}
+    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;
+    GtkTreeModel* model;
     GtkTreeIter iter;
     GtkTreeIter childiter;
     GtkTreeSelection* selection;
 	  
-	  selection = gtk_tree_view_get_selection (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( moko_application_get_main_window(d->app),
-                                  GTK_DIALOG_DESTROY_WITH_PARENT,
-                                  GTK_MESSAGE_WARNING,
-                                  GTK_BUTTONS_OK,
-                                  "No message selected");
-		    gint result = gtk_dialog_run (GTK_DIALOG (dialog));
-			  gtk_widget_destroy (dialog);
-	  }
+    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)
@@ -214,98 +225,96 @@
     	sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist);
     	sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore);
     }
-    sms_membership_window_show ( d->mmWin );
+    sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) );
 }
 
 void cb_frBtn_clicked (GtkButton* button, MessengerData* d)
 {
-		GSList *c;
-    GtkMenu* filtmenu;
+    GSList *c;
     gchar* folder;
     
-		GtkWidget* menuitem = gtk_menu_get_attach_widget (d->filtmenu);
-		GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-		gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel)));
+    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 (d->filter);
+    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); 
-	      }
+	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 = 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,d->filtmenu);
-    gtk_widget_show_all (menubox);
+    moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu));
+    gtk_widget_show_all (GTK_WIDGET(menubox));
 }
 
 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 (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")){
-			  	
-			  GtkWidget* msgDialog = gtk_message_dialog_new( 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 {
-		    MokoDialogWindow* 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,NULL,30,10);
-		    moko_dialog_window_set_title (frWin, "Folder Rename");
+    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 {
+        MokoDialogWindow* 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 (frWin, "Folder Rename");
 		    
-		    GtkWidget* menuitem = gtk_menu_get_attach_widget (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);
 		
-		    GtkWidget* hbox = gtk_hbox_new (FALSE,20);
-		    d->frEntry = gtk_entry_new ();
-		    gtk_box_pack_start (GTK_BOX(hbox), d->frEntry, FALSE, TRUE, 0);
-		    GtkWidget* frResetBtn = gtk_button_new_with_label ("Reset");
-		    gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0);
-		    gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0);
+        GtkWidget* hbox = gtk_hbox_new (FALSE,20);
+	d->frEntry = gtk_entry_new ();
+	gtk_box_pack_start (GTK_BOX(hbox), d->frEntry, FALSE, TRUE, 0);
+	GtkWidget* frResetBtn = gtk_button_new_with_label ("Reset");
+	gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0);
+	gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0);
 		
-		    hbox = gtk_hbox_new (FALSE,0);
-		    GtkWidget* frConfirmBtn = gtk_button_new_with_label ("OK");
-		    gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0);
-		    gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0);
-		    gtk_container_add (GTK_CONTAINER(frAlign),frBox);
+	hbox = gtk_hbox_new (FALSE,0);
+	GtkWidget* frConfirmBtn = gtk_button_new_with_label ("OK");
+	gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, 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 (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(frWin) );
+	moko_dialog_window_set_contents (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(frWin) );
    }
 }
 
@@ -317,9 +326,9 @@
     d->filtmenu = reload_filter_menu (d,d->folderlist);
     MokoMenuBox* menubox = 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,d->filtmenu);
-    gtk_widget_show_all (menubox);
-    /*foldersdb_update (d->folderlist);*/
+    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);
 }
 
@@ -333,58 +342,53 @@
 {
     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 = 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,d->filtmenu);
+    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 (menubox);
+    gtk_widget_show_all (GTK_WIDGET(menubox));
     update_folder_sensitive (d, d->folderlist);
     
     /*result inform */
-    GtkWidget *dialog = gtk_message_dialog_new ((gtk_widget_get_parent_window(button)),
-                                  GTK_DIALOG_DESTROY_WITH_PARENT,
-                                  GTK_MESSAGE_INFO,
-                                  GTK_BUTTONS_CLOSE,
-                                  "Delete successful");
+    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);
+    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 = 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,d->filtmenu);
+    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 (menubox);
+    gtk_widget_show_all (GTK_WIDGET(menubox));
     update_folder_sensitive (d, d->folderlist);
 }
 
@@ -395,8 +399,6 @@
 
 void cb_cursor_changed(GtkTreeSelection* selection, MessengerData* d)
 {
-		gchar* name = NULL;
-    gchar* folder = NULL;
     GtkTreeModel* model;
     GtkTreeIter iter;
     GtkTreeIter childiter;
@@ -405,27 +407,25 @@
     GdkPixbuf* icon;
     GError*   error = NULL;
     
-	  g_debug( "openmoko-messenger: selection changed" );
+    g_debug( "openmoko-messenger: selection changed" );
     view = gtk_tree_selection_get_tree_view( selection );
-    if ( gtk_tree_selection_get_selected( selection, &model, &iter ) )
-    	{
-    		msg = g_malloc(sizeof(message));
+    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 (d->details,msg);
+        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);
       }
 }
 
@@ -433,42 +433,44 @@
 on_btnsend_clicked                 (GtkButton       *button,
                                     gpointer         user_data)
 {
-	g_printf("Button send clicked\n");
+    g_debug("Button send clicked\n");
 }
 
 void
 on_btn_address_clicked                 (GtkButton       *button,
                                         gpointer         user_data)
 {
-	g_printf("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(search_entry));
-	gtk_tree_model_filter_refilter (d->filter);
-	g_debug ("search %s",d->s_key);
+    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",d->s_key);
 }
 
 void cb_search_on (MessengerData* d)
 {
-	g_debug ("search on",d->s_key);
-	GtkWidget* menuitem = gtk_menu_get_attach_widget (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",d->s_key);
-	GtkWidget* menuitem = gtk_menu_get_attach_widget (d->filtmenu);
-	GtkWidget* menulabel = GTK_BIN(menuitem)->child;
-	gtk_label_set_text (GTK_LABEL(menulabel),"Inbox");
-	d->searchOn = FALSE; 
-	GtkWidget* search_entry = moko_tool_box_get_entry (d->toolbox);
-	gtk_entry_set_text (search_entry, "");
-	d->s_key = "";
-	gtk_tree_model_filter_refilter (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));
 }
+
+

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,3 +1,22 @@
+/*
+ *  callbacks.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$) [$Author$]
+ */
+
 #ifndef _CALLBACKS_H_
 #define _CALLBACKS_H_
 
@@ -6,17 +25,6 @@
 #include "sms-membership-window.h"
 #include "main.h"
 
-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 *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 *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"};
-
 gboolean cb_filter_changed(GtkWidget* widget, gchar* text, MessengerData* d);
 
 void cb_new_sms (GtkMenuItem* item, MessengerData* d);
@@ -37,13 +45,15 @@
 void cb_frResetBtn_clicked (GtkButton* button, GtkWidget* entry);
 void cb_dfBtn_clicked (GtkButton* button, MessengerData* d);
 void on_mmode_rdo_btn_clicked (gchar* folder);
-void on_btnsend_clicked                 (GtkButton       *button,
+void on_btnsend_clicked                (GtkButton       *button,
                                         gpointer         user_data);
-void on_btn_address_clicked							(GtkButton       *button,
+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);
+void delete_folder (MessengerData* d, gchar* oldName);
+
 #endif
 

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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -2,7 +2,8 @@
  *
  * Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- * Copyright (C) 2006 First International Company
+ * 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.
@@ -91,10 +92,9 @@
     
 }
 
-DetailArea*
-detail_area_new (void)
+GtkWidget* detail_area_new (void)
 {
-    return g_object_new(TYPE_DETAIL_AREA, NULL );
+    return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL ));
 }
 
 GtkWidget* detail_area_mode_edit (DetailArea* self)
@@ -131,10 +131,10 @@
     moko_fixed_set_cargo(MOKO_FIXED(self->entryarea),GTK_WIDGET(alignment));
 
     /* fill textview */
-    editAttributes->txtView = GTK_TEXT_VIEW(gtk_text_view_new());
+    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 (editAttributes->txtView,GTK_WRAP_CHAR);
+    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);

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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,7 +1,9 @@
 /*  detail-area.h
+ *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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.
@@ -26,24 +28,26 @@
 //#include "main.h"
 #include "message.h"
 
+G_BEGIN_DECLS
+
 #define TYPE_DETAIL_AREA detail_area_get_type()
-#define DETAIL_AREA(obj)     (G_TYPE_CHECK_INSTANCE_CAST ((obj), DETAIL_AREA, DetailArea))
+#define DETAIL_AREA(obj)     (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_DETAIL_AREA, DetailArea))
 #define DETAIL_AREA_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), DETAIL_AREA, DetailAreaClass))
 #define IS_DETAIL_AREA(obj)     (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_DETAIL_AREA))
 #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{
-	GtkWidget* from_label;
-	GtkWidget* date_label;
-	GtkWidget* details;
+    GtkWidget* from_label;
+    GtkWidget* date_label;
+    GtkWidget* details;
 }ReadAttributes;
 
 typedef struct _Edit_Attributes{
-	GtkWidget* sendBtn;
-	GtkWidget* addrBtn;
-	GtkWidget* toEntry;
-	GtkWidget* txtView;
+    GtkWidget* sendBtn;
+    GtkWidget* addrBtn;
+    GtkWidget* toEntry;
+    GtkWidget* txtView;
 }EditAttributes;
 
 typedef struct _DetailArea{
@@ -63,7 +67,7 @@
 }DetailAreaClass;
 
 GType detail_area_get_type();
-DetailArea* detail_area_new(void);
+GtkWidget* detail_area_new(void);
 
 void detail_new_sms (DetailArea* self);
 void detail_read_message (DetailArea* self, message* msg);

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,3 +1,23 @@
+/*
+ *  foldersdb.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$) [$Author$]
+ */
+
+
 #include "foldersdb.h"
 
 #include <stdio.h>
@@ -2,9 +22,9 @@
 
-G_DEFINE_TYPE (FoldersDB, foldersdb, G_TYPE_OBJECT);
+G_DEFINE_TYPE (FoldersDB, foldersdb, G_TYPE_OBJECT)
 
 #define FOLDERSDB_PRIVATE(o)     (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_FOLDERSDB, FoldersDBPrivate))
 
-typedef struct _FoldersDBPrivate
+/*typedef struct _FoldersDBPrivate
 {
-} FoldersDBPrivate;
+} FoldersDBPrivate;*/
 
@@ -30,7 +50,7 @@
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
     /* register private data */
-    g_type_class_add_private (klass, sizeof (FoldersDBPrivate));
+    /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/
 
     /* hook virtual methods */
     /* ... */
@@ -41,16 +61,16 @@
     object_class->dispose = foldersdb_dispose;
     object_class->finalize = foldersdb_finalize;
 
-    FILE* file = g_fopen( "folderlist", "r" );
+    FILE* file = fopen( PKGDATADIR "/folderlist", "rw" );
     g_assert( file ); //FIXME error handling, if folder file is not present
-    gchar line[256];
-    gchar *elem;
-    gchar *tok = "\n";
+    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_list_append(klass->folders, elem);
+        elem = g_strdup(strtok(line, tok));
+        klass->folders = g_slist_append(klass->folders, elem);
     }
 
     fclose( file );
@@ -76,15 +96,15 @@
 void foldersdb_update ( GSList* folderlist )
 {
     /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/
-    FILE* file = g_fopen( "folderlist", "w" );
+    FILE* file = fopen( PKGDATADIR "/folderlist", "w" );
     g_assert( file );
     GSList* c;
-    gchar *elem;
+    char *elem;
 
     for( c =folderlist; c; c=g_slist_next(c))
         {
 	    if(g_slist_next(c) != NULL)
-	        elem = g_strdup_printf( "%s\n", c->data);
+	        elem = g_strdup_printf( "%s\n", (char*)c->data);
             else
 	        elem = g_strdup(c->data);
 	    fputs(elem, 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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -3,7 +3,7 @@
  *
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,9 +1,9 @@
 /*
- *  Messenger -- An messenger application for OpenMoko Framework
+ *  Messages -- An messages application for OpenMoko Framework
  *
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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
@@ -46,8 +46,8 @@
     /* ui */
     setup_ui(d);
 
-		//disable mmitem 
-		update_folder_sensitive (d, d->folderlist);
+    /* disable mmitem if necessary*/
+    update_folder_sensitive (d, d->folderlist);
 		
     /* show everything and run main loop */
     gtk_widget_show_all( GTK_WIDGET(d->window) );
@@ -59,297 +59,283 @@
 
 void update_folder_sensitive (MessengerData* d, GSList* folderlist)
 {
-	if (g_slist_length (folderlist) > 4){
-			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);
-		}
+    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);
+    }
 }
 
 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist)
 {
     GSList *c;
-    GtkMenu* filtmenu;
-    filtmenu = GTK_MENU(gtk_menu_new());
+    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 );
+	g_debug( "adding folder '%s'", folder );
         gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) );
     }
 
-    return GTK_WIDGET(filtmenu);
+    return filtmenu;
 }
 
 void setup_ui( MessengerData* d )
 {
-     /* main window */
-     d->window = MOKO_PANED_WINDOW(moko_paned_window_new());
-		 d->mmWin = NULL;
+    /* main window */
+    d->window = MOKO_PANED_WINDOW(moko_paned_window_new());
+    d->mmWin = NULL;
 		 
-     /* application menu */
-     d->menu = GTK_MENU(gtk_menu_new()); 
-     d->mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" ));/* message membershp item */
-     d->fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" ));/* folder rename item */
-     GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" ));/* account item */
-     GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" ));/* message membershp item */
-     GtkWidget* sepitem = gtk_separator_menu_item_new(); 
-     GtkMenuItem* closeitem = GTK_MENU_ITEM(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), GTK_WIDGET(d->mmitem) );
-     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), GTK_WIDGET(d->fnitem) );
-     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), GTK_WIDGET(accountitem) );
-     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), GTK_WIDGET(helpitem) );
-     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), GTK_WIDGET(sepitem) );
-     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), GTK_WIDGET(closeitem) );
-     moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) );
+    /* application menu */
+    d->menu = gtk_menu_new(); 
+    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) );
 
-     /* filter menu */
-     d->filtmenu = GTK_MENU(gtk_menu_new());
+    /* filter menu */
+    d->filtmenu = gtk_menu_new();
+    d->folderlist = foldersdb_get_folders( d->foldersdb );
+    d->filtmenu = reload_filter_menu( d, d->folderlist );
 
-     d->folderlist = foldersdb_get_folders( d->foldersdb );
-     d->filtmenu = GTK_MENU(reload_filter_menu (d, d->folderlist));
-
-    moko_paned_window_set_filter_menu( d->window, d->filtmenu );
-    MokoMenuBox* menubox = moko_paned_window_get_menubox( d->window );
+    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 );
 
-     /* connect close event */
-     g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d );
+    /* connect close event */
+    g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d );
 
     /* set navagation area */
     populate_navigation_area( d );
 
     /* set toolbox */
-    MokoPixmapButton* newButton;
-    MokoPixmapButton* modeButton;
-    MokoPixmapButton* getmailButton;
-    MokoPixmapButton* deleteButton;
+    GtkWidget* newButton;
+    GtkWidget* modeButton;
+    GtkWidget* getmailButton;
+    GtkWidget* deleteButton;
 
-    GtkMenu* newMenu;
-    GtkMenu* modeMenu;
-    GtkMenu* deleteMenu;
+    GtkWidget* newMenu;
+    GtkWidget* modeMenu;
+    GtkWidget* deleteMenu;
     
     GtkWidget* image;
 
     /* set tool bar */
-    d->toolbox = MOKO_TOOL_BOX(moko_tool_box_new_with_search());
-    //gtk_widget_grab_focus( GTK_WIDGET(d->toolbox) );
-    GtkWidget* searchEntry = moko_tool_box_get_entry (d->toolbox);
+    d->toolbox = moko_tool_box_new_with_search();
+    GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox)));
     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 ); 
 
     /* set action buttons*/
-    deleteMenu = GTK_MENU( gtk_menu_new() );
-    GtkImageMenuItem* delMsgItem = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_label( "Delete Message" ));
-    GtkImageMenuItem* delFolderItem = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_label( "Delete Folder" ));
+    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 ); 
 
     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 (GTK_WIDGET(deleteMenu));
-    deleteButton = moko_tool_box_add_action_button( MOKO_TOOL_BOX(d->toolbox) );
+    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), deleteMenu);
+    moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu));
 
-    getmailButton = moko_tool_box_add_action_button( MOKO_TOOL_BOX(d->toolbox) );
+    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);
 
-    modeMenu = GTK_MENU( gtk_menu_new() );
-    GtkImageMenuItem* modeReadItem = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_label( "Mode Read" ));
-    GtkImageMenuItem* modeReplyItem = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_label( "Mode Reply" ));
-    GtkImageMenuItem* modeFwdItem = GTK_IMAGE_MENU_ITEM(gtk_image_menu_item_new_with_label( "Mode Forward" ));
+    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(modeMenu), GTK_WIDGET(modeReadItem));
-    gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), GTK_WIDGET(modeReplyItem));
-    gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), GTK_WIDGET(modeFwdItem));
+    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 (GTK_WIDGET(modeMenu));
-    modeButton = moko_tool_box_add_action_button( MOKO_TOOL_BOX(d->toolbox) );
+    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_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) );
 
-    newMenu = GTK_MENU( gtk_menu_new() );
-    GtkImageMenuItem* newMsgItem = GTK_IMAGE_MENU_ITEM ( gtk_image_menu_item_new_with_label( "New SMS") );
-    GtkImageMenuItem* newFolderItem = GTK_IMAGE_MENU_ITEM ( gtk_image_menu_item_new_with_label( "New Folder") );
-    GtkImageMenuItem* newMailItem = GTK_IMAGE_MENU_ITEM ( gtk_image_menu_item_new_with_label( "New Mail") );
+    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") ;
 
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), GTK_WIDGET(newMsgItem));
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), GTK_WIDGET(newMailItem));
-    gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), GTK_WIDGET(newFolderItem));
-    gtk_widget_show_all ( GTK_WIDGET(newMenu) );
+    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 = moko_tool_box_add_action_button( MOKO_TOOL_BOX(d->toolbox) );
+    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, d->toolbox );
+    moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) );
 
     /* detail area */
     populate_detail_area (d);
     
-		//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 ); 
+    /* 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);
 }
 
 int in_string(char *str, char *key)
 {
-  int length, key_length;
-  int m,n,i;
+    int length, key_length;
+    int m,n,i;
 
-  length = strlen(str);
-  key_length = strlen(key);
+    length = strlen(str);
+    key_length = strlen(key);
 
-  n=0;
+    n=0;
 
-  for(m=0;m<length;m++)
-    {
-      if(str[m] == key[n])
-			{
-			  for(i=0;i<key_length;i++)
-			    if(str[m+i]!= key[i+n])
-			      break;
-		
-			  if(i == key_length)
-			    return 1;
-			  else
-			    {
-			      m = m+i+1;
-			      n=0;
-			    }
-			}
+    for(m=0;m<length;m++){
+        if(str[m] == key[n]){
+	    for(i=0;i<key_length;i++)
+	        if(str[m+i]!= key[i+n])
+		    break;
+	    if(i == key_length)
+	        return 1;
+	    else{
+	        m = m+i+1;
+		n=0;
+	    }
+	}
     }
-  return 0;
+    return 0;
 }
 
 gboolean filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, MessengerData* d)
 {
-	  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);
+    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) && !in_string(from, d->s_key) && !in_string(subject, d->s_key))
-	  		return FALSE;
-	  }
-	  else {
-	  	gtk_menu_set_active (d->filtmenu,0);
-	  	if(g_strcasecmp(folder,d->currentfolder))
-	  				return FALSE;
-		}
+    if (d->searchOn){
+        if ((strlen(d->s_key) > 0) && !in_string(from, d->s_key) && !in_string(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)
+void cell_data_func (GtkTreeViewColumn *col,
+		     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;
-    GError*   error = NULL;
-    GtkTreeIter  iter;
+    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( moko_tree_view_new_with_model( GTK_TREE_MODEL (d->filter)) ); 
+    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);
-    																				
+    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");
+    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 */
+    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, cell_data_func, d->liststore, NULL);
-    moko_tree_view_append_column( d->view, column );
+    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, 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_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( d->view, column );
+    moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column );
 
-    GtkTreeSelection* selection = gtk_tree_view_get_selection( 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(d->view)) );
+    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))) );
     gtk_widget_hide(d->mmWin);
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,9 +1,9 @@
 /*
- *  Messenger -- An messenger application for OpenMoko Framework
+ *  Messages -- An messages application for OpenMoko Framework
  *
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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
@@ -33,14 +33,14 @@
 typedef struct _MessengerData{
     MokoApplication* app;
     MokoPanedWindow* window;
-    GtkMenu* menu;
-    GtkMenu* filtmenu;
+    GtkWidget* menu;
+    GtkWidget* filtmenu;
     FoldersDB* foldersdb;
-    MokoToolBox* toolbox;
+    GtkWidget* toolbox;
     GtkListStore* liststore;
-    GtkTreeModelFilter* filter;
-    MokoTreeView* view;
-    DetailArea* details;
+    GtkTreeModel* filter;
+    GtkWidget* view;
+    GtkWidget* details;
     GSList* folderlist;
     gchar* currentfolder;
     gchar* s_key;
@@ -53,7 +53,7 @@
 }MessengerData;
 
 enum {
-		COLUMN_ICON,
+    COLUMN_ICON,
     COLUMN_FROM,
     COLUMN_SUBJECT,
     COLUMN_CONTENT,
@@ -72,19 +72,12 @@
     NUM_PAGES,
 };
 
-enum {
-		UNREAD,
-		READ,
-		REPLIED,
-		FORWARD,
-		NUM_STATES,
-};
-
 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist);
 void setup_ui( MessengerData* d );
 void populate_navigation_area( MessengerData* d );
 void populate_detail_area( MessengerData* d );
 void main_quit(GtkWidget* widget, GdkEvent* event, MessengerData* d);
 void update_folder_sensitive (MessengerData* d, GSList* folderlist);
+
 #endif
 

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h	2007-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,3 +1,23 @@
+/*
+ *  messages.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$) [$Author$]
+ */
+
+
 #ifndef _MESSAGE_H_
 #define _MESSAGE_H_
 
@@ -2,9 +22,31 @@
 typedef struct message{
-	gchar* name;
-	gchar* subject;
-	gchar* folder;
-	gchar* content;
-	gint	 status;
+    gchar* name;
+    gchar* subject;
+    gchar* folder;
+    gchar* content;
+    gint   status;
 }message;
 
+enum {
+    UNREAD,
+    READ,
+    REPLIED,
+    FORWARD,
+    NUM_STATES,
+};
+
+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 *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 *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
+

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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,7 +1,10 @@
-/*  sms-dialog-window.c
+/*  
+ *  sms-dialog-window.c
+ *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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.
@@ -40,13 +43,15 @@
 
 struct _SmsDialogWindowPrivate
 {
-    GtkVBox* vbox;
-    GtkHBox* hbox;
-    GtkEventBox* eventbox;
-    GtkLabel* titleLabel;
-    GtkLabel* textInLabel;
-    MokoToolBox* toolbox;
-    MokoPixmapButton* closebutton;
+    GtkWidget* vbox;
+    GtkWidget* hbox;
+    GtkWidget* eventbox;
+    GtkWidget* titleLabel;
+    GtkWidget* textInLabel;
+    GtkWidget* toolbox;
+    GtkWidget* closebutton;
+    GtkWidget* txtView;
+    GtkWidget* toEntry;
 };
 
 typedef struct _SmsDialogRunInfo
@@ -58,7 +63,11 @@
 } SmsDialogRunInfo;
 
 static void sms_dialog_window_close(SmsDialogWindow* self);
+gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget,
+                                                 GdkEventKey     *event,
+		                                 SmsDialogWindow *self);
 
+
 static void
 shutdown_loop (SmsDialogRunInfo *ri)
 {
@@ -89,9 +98,9 @@
 }
 
 static gint
-        run_delete_handler (SmsDialogWindow* dialog,
-                            GdkEventAny *event,
-                            gpointer data)
+run_delete_handler (SmsDialogWindow* dialog,
+                    GdkEventAny *event,
+                    gpointer data)
 {
     SmsDialogRunInfo *ri = data;
 
@@ -124,6 +133,7 @@
     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);
@@ -146,7 +156,7 @@
     MokoWindow* parent = moko_application_get_main_window( moko_application_get_instance() );
     if ( parent )
     {
-        gtk_window_set_transient_for( GTK_WINDOW(self), parent );
+        gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
 #ifndef DEBUG_THIS_FILE
         gtk_window_set_modal( GTK_WINDOW(self), TRUE );
 #endif
@@ -165,7 +175,7 @@
         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( "14(2)" );
+        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);
@@ -179,14 +189,14 @@
     }
     else
     {
-        gtk_label_set_text( priv->titleLabel, title );
+        gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
         gtk_window_set_title( GTK_WINDOW(self), title );
     }
     if ( !priv->vbox )
     {
-    		GtkImage* image;
-    		MokoPixmapButton* smsSendBtn;
-    		MokoPixmapButton* emailBtn;
+	GtkWidget* image;
+	MokoPixmapButton* smsSendBtn;
+	MokoPixmapButton* emailBtn;
     		
         priv->vbox = gtk_vbox_new( FALSE, 0 );
         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
@@ -209,47 +219,50 @@
         
         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);
+	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);
-		    GtkWidget* toEntry = gtk_entry_new();
-		    gtk_widget_set_size_request (toEntry, 320, -1);
-		    gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0);
-		    gtk_box_pack_start (GTK_BOX(entrybox),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 );
+	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 */
-		    GtkTextView* txtView = 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),10,10,30,30);
-		    GtkScrolledWindow* scolwin = gtk_scrolled_window_new (NULL, NULL);
-		    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-		    GtkViewport*  viewport = gtk_viewport_new (NULL, NULL);
-		    gtk_text_view_set_wrap_mode (txtView,GTK_WRAP_CHAR);
-		    gtk_container_add (GTK_CONTAINER(viewport),GTK_WIDGET(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 mail_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 );
         gtk_window_set_title( GTK_WINDOW(self), title );
         gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" );
@@ -262,17 +275,15 @@
         gtk_widget_show( GTK_WIDGET(priv->titleLabel) );
         gtk_widget_show( GTK_WIDGET(priv->eventbox) );
     }
-    else
-    {
-        gtk_label_set_text( priv->titleLabel, title );
+    else{
+        gtk_label_set_text( GTK_LABEL(priv->titleLabel), title );
         gtk_window_set_title( GTK_WINDOW(self), title );
     }
-    if ( !priv->vbox )
-    {
-    		GtkImage* image;
-    		MokoPixmapButton* smsSendBtn;
-    		MokoPixmapButton* emailBtn;
-    		MokoPixmapButton* attachBtn;
+    if ( !priv->vbox ){
+        GtkWidget* image;
+	MokoPixmapButton* smsSendBtn;
+	MokoPixmapButton* emailBtn;
+	MokoPixmapButton* attachBtn;
     		
         priv->vbox = gtk_vbox_new( FALSE, 0 );
         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 );
@@ -288,8 +299,8 @@
         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 );
 
-				attachBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox));
-				gtk_widget_set_name( GTK_WIDGET(attachBtn), "mokostylusbutton-white" );
+	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);
         
@@ -300,111 +311,111 @@
         
         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);
+        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);
-		    GtkWidget* toEntry = gtk_entry_new();
-		    gtk_widget_set_size_request (toEntry, 320, -1);
-		    gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0);
-		    gtk_box_pack_start (GTK_BOX(hbox),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 );
-		   
-		    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);
-		
-				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 textview */
-		    GtkWidget* txtView = 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),10,10,30,30);
-		    GtkScrolledWindow* scolwin = gtk_scrolled_window_new (NULL, NULL);
-		    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-		    GtkViewport*  viewport = gtk_viewport_new (NULL, NULL);
-		    gtk_text_view_set_wrap_mode (txtView,GTK_WRAP_CHAR);
-		    gtk_container_add (GTK_CONTAINER(viewport),GTK_WIDGET(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) );
+	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 );
+
+        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);
+
+        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 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) );
     }
 }
 
 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 );
+     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 );
 }
 
 static void sms_dialog_window_close(SmsDialogWindow* self)
 {
-    /* Synthesize delete_event to close dialog. */
+     /* Synthesize delete_event to close dialog. */
 
-    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 );
 }
 
 guint sms_dialog_window_run(SmsDialogWindow* dialog)
@@ -478,6 +489,35 @@
     return ri.response_id;
 }
 
-/*void sms_dialog_window_set_title(SmsDialogWindow* self, message* msg)
+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);
+}
+
+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);
+}
+
+gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget,
+                                                 GdkEventKey     *event,
+						 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;
+}
+

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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,7 +1,10 @@
-/*  sms-dialog-window.h
+/*  
+ *  sms-dialog-window.h
+ *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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.
@@ -19,6 +22,7 @@
 
 #include <libmokoui/moko-window.h>
 #include <libmokoui/moko-tool-box.h>
+#include "message.h"
 
 #include <glib-object.h>
 
@@ -45,8 +49,11 @@
 void sms_dialog_window_set_title(SmsDialogWindow* self, const gchar* title);
 void mail_dialog_window_set_title(SmsDialogWindow* self, const gchar* title);
 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
 
-#endif // _SMS_DIALOG_WINDOW_H_
\ No newline at end of file
+#endif // _SMS_DIALOG_WINDOW_H_
+

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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,7 +1,10 @@
-/*  sms-membership-window.c
+/*  
+ *  sms-membership-window.c
+ *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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.
@@ -36,17 +39,17 @@
 
 struct _SmsMembershipWindowPrivate
 {
-    GtkVBox* vbox;
-    GtkHBox* hbox;
-    GtkVBox* folderbox;
-    GtkEventBox* eventbox;
-    MokoMenuBox* menubox;
-    GtkLabel* titleLabel;
-    GtkLabel* fromLabel;
-    GtkLabel* subjectLabel;
+    GtkWidget* vbox;
+    GtkWidget* hbox;
+    GtkWidget* folderbox;
+    GtkWidget* eventbox;
+    GtkWidget* menubox;
+    GtkWidget* titleLabel;
+    GtkWidget* fromLabel;
+    GtkWidget* subjectLabel;
     GtkWidget* closebutton;
-    GtkTreeModelFilter* filter;
-    MokoTreeView* view;
+    GtkTreeModel* filter;
+    GtkWidget* view;
     GtkListStore* liststore;
     gchar* currentfolder;
     GSList* rdoBtnList;
@@ -60,61 +63,16 @@
     gboolean destroyed;
 } SmsMembershipRunInfo;
 
-static void sms_membership_window_close(SmsMembershipWindow* self);
+/*static void sms_membership_window_close(SmsMembershipWindow* self);*/
 
-static void
+/*static void
 shutdown_loop (SmsMembershipRunInfo *ri)
 {
     if (g_main_loop_is_running (ri->loop))
         g_main_loop_quit (ri->loop);
-}
+}*/
 
 static void
-run_unmap_handler (SmsMembershipWindow* dialog, gpointer data)
-{
-    SmsMembershipRunInfo *ri = data;
-
-    shutdown_loop (ri);
-}
-
-static void
-run_response_handler (SmsMembershipWindow* dialog,
-                              gint response_id,
-                              gpointer data)
-{
-    SmsMembershipRunInfo *ri;
-
-    ri = data;
-
-    ri->response_id = response_id;
-
-    shutdown_loop (ri);
-}
-
-static gint
-        run_delete_handler (SmsMembershipWindow* dialog,
-                            GdkEventAny *event,
-                            gpointer data)
-{
-    SmsMembershipRunInfo *ri = data;
-
-    shutdown_loop (ri);
-
-    return TRUE; /* Do not destroy */
-}
-
-static void
-        run_destroy_handler (SmsMembershipWindow* dialog, gpointer data)
-{
-    SmsMembershipRunInfo *ri = data;
-
-    /* shutdown_loop will be called by run_unmap_handler */
-
-    ri->destroyed = TRUE;
-}
-
-
-static void
 sms_membership_window_dispose(GObject* object)
 {
     if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose)
@@ -127,6 +85,7 @@
     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);
@@ -137,16 +96,14 @@
     object_class->finalize = sms_membership_window_finalize;
 }
 
-SmsMembershipWindow*
+GtkWidget*
 sms_membership_window_new(void)
 {
-    return 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)
+/*static void sms_membership_window_close(SmsMembershipWindow* self)
 {
-    /* Synthesize delete_event to close dialog. */
-
     GtkWidget *widget = GTK_WIDGET(self);
     GdkEvent *event;
 
@@ -157,14 +114,14 @@
 
     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);
     priv->currentfolder = g_strdup(text);
-    gtk_tree_model_filter_refilter (priv->filter);
+    gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
     
     return FALSE;
 }
@@ -186,7 +143,7 @@
     MokoWindow* parent = moko_application_get_main_window( moko_application_get_instance() );
     if ( parent )
     {
-        gtk_window_set_transient_for( GTK_WINDOW(self), parent );
+        gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) );
 #ifndef DEBUG_THIS_FILE
         gtk_window_set_modal( GTK_WINDOW(self), TRUE );
 #endif
@@ -215,7 +172,7 @@
     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
-    GtkHBox* closebox = gtk_hbox_new( FALSE, 0 );
+    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" );
@@ -226,7 +183,7 @@
     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
-    GtkVBox* headerbox = gtk_vbox_new( FALSE, 0 );
+    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);
@@ -250,46 +207,41 @@
     
     gtk_widget_show_all( GTK_WIDGET(priv->vbox) );
     gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) );
-    g_signal_connect( G_OBJECT(priv->closebutton), "clicked", sms_membership_hide, self );
+    g_signal_connect( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_hide), 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)
 {
-	  g_debug (gtk_button_get_label(button));
-	  GtkTreeModel* model;
+    g_debug (gtk_button_get_label(button));
+    GtkTreeModel* model;
     GtkTreeIter iter;
     GtkTreeIter childiter;
     GtkTreeSelection* selection;
-	  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
+    SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
 	  
-	  selection = gtk_tree_view_get_selection (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);
-		  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);
-		  g_debug (gtk_button_get_label(button));
-		  
-	  	gtk_tree_model_filter_refilter (priv->filter);
-	  }
+    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);
+	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);
+	g_debug (gtk_button_get_label(button));
+        gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter));
+    }
 }
 
-void sms_membership_window_set_menubox(SmsMembershipWindow* self, GtkList* folderlist)
+void sms_membership_window_set_menubox(SmsMembershipWindow* self, GSList* folderlist)
 {
-	  GtkWidget* appmenu;
-	  GtkWidget* filtmenu;
-	  
-	  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-	  
-	  /* application menu */
+    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" ));
@@ -303,43 +255,39 @@
     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) );*/
-	  
-	  GtkVBox* rdobtnbox = gtk_vbox_new(FALSE, 0) ;
-	  GtkWidget *rdo_btn = NULL;
+    
+    GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ;
+    GtkWidget *rdo_btn = NULL;
     GSList *rdo_btn_group;
     GSList* c = folderlist;
     
-    filtmenu = GTK_MENU(gtk_menu_new());
+    filtmenu = gtk_menu_new();
     for (; c; c = g_slist_next(c) ){
-    		//add folder to filter menu
+        //add folder to filter menu
         gchar* folder = (gchar*) c->data;
-	      g_debug( "adding folder '%s'", folder );
+	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);
+	    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_list_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
     GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1));
     gtk_alignment_set_padding (alignment, 5, 5, 30, 5);
     gtk_container_add( GTK_CONTAINER(alignment), GTK_WIDGET(rdobtnbox) );
-    gtk_box_pack_start (GTK_BOX (priv->folderbox), alignment, FALSE, TRUE, 0);
-    moko_menu_box_set_application_menu( priv->menubox, appmenu );
-	  moko_menu_box_set_filter_menu( priv->menubox, filtmenu );
-	  gtk_widget_show (priv->menubox);
-	  gtk_widget_show_all (priv->vbox);
+    gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(alignment), FALSE, TRUE, 0);
+    moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) );
+    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
@@ -361,34 +309,32 @@
 
 void membership_cursor_changed(GtkTreeSelection* selection, SmsMembershipWindow* self)
 {
-		SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);
-		GtkTreeModel* model;
+    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));
+    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 (priv->fromLabel, msg->name);
-        gtk_label_set_text (priv->subjectLabel, msg->subject);
+        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 (elem, TRUE);
-			    	break;
-			    }
-				}
-      }
+        
+	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)
@@ -403,51 +349,48 @@
 
 void sms_membership_window_set_messages (SmsMembershipWindow* self, GtkListStore* liststore)
 {
-	  GtkCellRenderer* ren;
+    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( 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);
+    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 */
+    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, liststore, NULL);
-    moko_tree_view_append_column( priv->view, column );
+    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, 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_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( priv->view, column );
+    moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column );
     
     GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1);
-		gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10);
-		gtk_container_add (GTK_CONTAINER(treeViewAlign),GTK_WIDGET(moko_tree_view_put_into_scrolled_window(priv->view)));
+    gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10);
+    gtk_container_add (GTK_CONTAINER(treeViewAlign),GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view))));
     gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(treeViewAlign), TRUE, TRUE, 0);
-	  gtk_widget_show_all (priv->vbox);
+    gtk_widget_show_all (priv->vbox);
 	  
-	  GtkTreeSelection* selection = gtk_tree_view_get_selection( priv->view );
+    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-02-08 13:59:54 UTC (rev 910)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h	2007-02-08 14:00:35 UTC (rev 911)
@@ -1,7 +1,10 @@
-/*  sms-membership-window.h
+/*  
+ *  sms-membership-window.h
+ *  
  *  Authored By Alex Tang <alex at fic-sh.com.cn>
  *
- *  Copyright (C) 2006 First International Company
+ *  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.
@@ -47,9 +50,9 @@
 } SmsMembershipWindowClass;
 
 GType sms_membership_window_get_type();
-SmsMembershipWindow* sms_membership_window_new();
+GtkWidget* sms_membership_window_new();
 
-void sms_membership_window_set_menubox(SmsMembershipWindow* self, GtkList* folderlist);
+void sms_membership_window_set_menubox(SmsMembershipWindow* self, GSList* folderlist);
 void sms_membership_window_set_messages (SmsMembershipWindow* self, GtkListStore* liststore);
 void sms_membership_window_show (SmsMembershipWindow* self);
 guint sms_membership_window_run(SmsMembershipWindow* self);
@@ -57,4 +60,5 @@
 G_END_DECLS
 
 #endif // _SMS_MEMBERSHIP_WINDOW_H_
- 
\ No newline at end of file
+
+





More information about the commitlog mailing list