Changeset 1516


Ignore:
Timestamp:
03/27/07 10:34:31 (6 years ago)
Author:
alex_tang
Message:

Add contact window to choose contacts.

Location:
trunk/src/target/OM-2007/applications/openmoko-messages
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/target/OM-2007/applications/openmoko-messages/configure.ac

    r1299 r1516  
    1818PKG_CHECK_MODULES(DBUS, dbus-1,, 
    1919                 AC_MSG_ERROR([*** Required dbus-1 not installed ***])) 
    20 LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS" 
    21 CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS" 
     20PKG_CHECK_MODULES(LIBEBOOK, libebook-1.2,, 
     21                 AC_MSG_ERROR([*** Required dbus-1 not installed ***])) 
     22LIBS="$LIBS $GTK_LIBS $DBUSGLIB_LIBS $DBUS $LIBEBOOK_LIBS" 
     23CFLAGS="$CFLAGS $OPENMOKO_CFLAGS $DBUSGLIB_CFLAGS $DBUS_DFALGS $LIBEBOOK_CFLAGS" 
    2224 
    2325# output stuff 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/Makefile.am

    r911 r1516  
    66bin_PROGRAMS = openmoko-messages 
    77 
    8 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 
     8openmoko_messages_SOURCES = main.c main.h \ 
     9                            foldersdb.c foldersdb.h \ 
     10                            callbacks.c callbacks.h \ 
     11                            detail-area.c detail-area.h \ 
     12                            sms-dialog-window.c sms-dialog-window.h \ 
     13                            sms-membership-window.c sms-membership-window.h \ 
     14                            sms-contact-window.c sms-contact-window.h 
    915 
    1016openmoko_messages_LDADD = @OPENMOKO_LIBS@ 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.c

    r1452 r1516  
    2121#include "callbacks.h" 
    2222#include "detail-area.h" 
     23#include "sms-contact-window.h" 
    2324#include <gtk/gtk.h> 
    2425#include <dbus/dbus.h> 
    2526#include <dbus/dbus-glib.h> 
    2627 
     28void cb_addressBtn_clicked (GtkButton* button, gpointer* data); 
     29void sms_contact_select_done (GtkWidget* widget, gpointer data); 
     30 
    2731void 
    2832send_signal_to_footer (DBusConnection* bus, gchar* message_str) 
    2933{ 
    30     DBusMessage *message; 
    31  
    32     if(message_str == NULL) 
    33         g_debug("Input string is null"); 
    34     else 
    35         g_debug(message_str); 
    36  
    37     message = dbus_message_new_signal ("/org/openmoko/footer", 
    38                                        "org.openmoko.dbus.TaskManager",  
    39                                        "push_statusbar_message"); 
    40     dbus_message_append_args (message, 
    41                               DBUS_TYPE_STRING, &message_str, 
    42                               DBUS_TYPE_INVALID); 
    43     dbus_connection_send (bus, message, NULL); 
    44     dbus_message_unref (message); 
    45 } 
    46  
    47 static gboolean  
     34  DBusMessage *message; 
     35 
     36  if(message_str == NULL) 
     37    g_debug("Input string is null"); 
     38  else 
     39    g_debug(message_str); 
     40 
     41  message = dbus_message_new_signal ("/org/openmoko/footer", 
     42                                     "org.openmoko.dbus.TaskManager", 
     43                                     "push_statusbar_message"); 
     44  dbus_message_append_args (message, 
     45                            DBUS_TYPE_STRING, &message_str, 
     46                            DBUS_TYPE_INVALID); 
     47  dbus_connection_send (bus, message, NULL); 
     48  dbus_message_unref (message); 
     49} 
     50 
     51static gboolean 
    4852model_number_helper (GtkTreeModel* model, 
    49                      GtkTreePath*  path, 
    50                      GtkTreeIter*  iter, 
    51                      gpointer      data) 
    52 { 
    53     MessengerData* d = (MessengerData*)data; 
    54     d->msg_num ++; 
    55     return FALSE; 
     53                     GtkTreePath*  path, 
     54                     GtkTreeIter*  iter, 
     55                     gpointer      data) 
     56{ 
     57  MessengerData* d = (MessengerData*)data; 
     58  d->msg_num ++; 
     59  return FALSE; 
    5660} 
    5761 
    5862gint get_model_number (MessengerData* d) 
    5963{ 
    60     d->msg_num = 0; 
    61     gtk_tree_model_foreach (d->filter,model_number_helper,d); 
    62     return d->msg_num; 
     64  d->msg_num = 0; 
     65  gtk_tree_model_foreach (d->filter,model_number_helper,d); 
     66  return d->msg_num; 
    6367} 
    6468 
    6569gboolean cb_filter_changed(GtkWidget* widget, gchar* text, MessengerData* d) 
    6670{ 
    67     d->currentfolder = g_strdup(text); 
    68     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
    69     gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d)); 
    70     send_signal_to_footer(d->bus,str); 
    71      
    72     return FALSE; 
     71  d->currentfolder = g_strdup(text); 
     72  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
     73  gchar* str = g_strdup_printf("folder %s has %d messages",text,get_model_number(d)); 
     74  send_signal_to_footer(d->bus,str); 
     75 
     76  return FALSE; 
    7377} 
    7478 
    7579void cb_new_sms (GtkMenuItem* item, MessengerData* d) 
    7680{ 
    77     SmsDialogWindow* sms_window = sms_dialog_window_new(); 
    78     sms_dialog_window_set_title (sms_window,"New SMS"); 
    79     gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE); 
    80     gtk_widget_show_all (GTK_WIDGET(sms_window)); 
     81  SmsDialogWindow* sms_window = sms_dialog_window_new(); 
     82  sms_dialog_window_set_title (sms_window,"New SMS"); 
     83  gtk_window_set_decorated (GTK_WINDOW(sms_window), FALSE); 
     84  gtk_widget_show_all (GTK_WIDGET(sms_window)); 
     85 
     86  g_signal_connect (G_OBJECT(sms_window->addressBtn), 
     87                    "clicked", 
     88                    G_CALLBACK(cb_addressBtn_clicked), 
     89                    sms_window->toEntry ); 
    8190} 
    8291 
    8392void cb_new_mail (GtkMenuItem* item, MessengerData* d) 
    8493{ 
    85     SmsDialogWindow* mail_window = sms_dialog_window_new(); 
    86     mail_dialog_window_set_title (mail_window,"New Email"); 
    87     gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE); 
    88     gtk_widget_show_all ( GTK_WIDGET(mail_window) ); 
     94  SmsDialogWindow* mail_window = sms_dialog_window_new(); 
     95  mail_dialog_window_set_title (mail_window,"New Email"); 
     96  gtk_window_set_decorated (GTK_WINDOW(mail_window), FALSE); 
     97  gtk_widget_show_all ( GTK_WIDGET(mail_window) ); 
     98 
     99  g_signal_connect (G_OBJECT(mail_window->addressBtn), 
     100                    "clicked", 
     101                    G_CALLBACK(cb_addressBtn_clicked), 
     102                    mail_window->toEntry); 
    89103} 
    90104 
    91105void cb_new_folder (GtkMenuItem* item, MessengerData* d) 
    92106{ 
    93     g_debug ("new folder called"); 
    94     GtkWidget* hbox; 
    95     GtkWidget* nfResetBtn; 
    96     GtkWidget* nfConfirmBtn; 
    97  
    98     if ((d->nfWin != NULL) && (d->nfWin->window != NULL)) 
    99         gtk_entry_set_text (GTK_ENTRY(d->nfEntry),""); 
    100     else 
    101     { 
    102         d->nfWin = moko_dialog_window_new(); 
    103         GtkWidget* nfBox = gtk_vbox_new (FALSE,10); 
    104         gtk_widget_set_size_request (nfBox, 480, -1); 
    105         GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1); 
    106         gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10); 
    107         moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder"); 
    108          
    109         GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:"); 
    110         gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5); 
    111         gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0); 
    112          
    113         d->nfEntry = gtk_entry_new (); 
    114         gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0); 
    115          
    116         hbox = gtk_hbox_new (FALSE,20); 
    117         nfConfirmBtn = gtk_button_new_with_label ("OK"); 
    118         nfResetBtn = gtk_button_new_with_label ("Reset"); 
    119         gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0); 
    120         gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0); 
    121         gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0); 
    122  
    123         gtk_container_add (GTK_CONTAINER(nfAlign),nfBox); 
    124  
    125         moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign); 
    126         g_signal_connect (G_OBJECT(nfConfirmBtn),  
    127                           "clicked", 
    128                           G_CALLBACK(cb_nfBtn_clicked), 
    129                           d); 
    130         g_signal_connect (G_OBJECT(nfResetBtn), 
    131                           "clicked", 
    132                           G_CALLBACK(cb_nfResetBtn_clicked), 
    133                           d); 
    134     } 
    135     gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE); 
    136     gtk_widget_show_all (d->nfWin); 
     107  g_debug ("new folder called"); 
     108  GtkWidget* hbox; 
     109  GtkWidget* nfResetBtn; 
     110  GtkWidget* nfConfirmBtn; 
     111 
     112  if ((d->nfWin != NULL) && (d->nfWin->window != NULL)) 
     113    gtk_entry_set_text (GTK_ENTRY(d->nfEntry),""); 
     114  else 
     115    { 
     116      d->nfWin = moko_dialog_window_new(); 
     117      GtkWidget* nfBox = gtk_vbox_new (FALSE,10); 
     118      gtk_widget_set_size_request (nfBox, 480, -1); 
     119      GtkWidget* nfAlign = gtk_alignment_new (0,0,1,1); 
     120      gtk_alignment_set_padding (GTK_ALIGNMENT(nfAlign), 100, 0, 30, 10); 
     121      moko_dialog_window_set_title ( MOKO_DIALOG_WINDOW(d->nfWin), "New Folder"); 
     122 
     123      GtkWidget* nfLabel = gtk_label_new ("Please input new folder name:"); 
     124      gtk_misc_set_alignment (GTK_MISC(nfLabel),0,0.5); 
     125      gtk_box_pack_start (GTK_BOX(nfBox), nfLabel, FALSE, TRUE, 0); 
     126 
     127      d->nfEntry = gtk_entry_new (); 
     128      gtk_box_pack_start (GTK_BOX(nfBox), d->nfEntry, FALSE, TRUE, 0); 
     129 
     130      hbox = gtk_hbox_new (FALSE,20); 
     131      nfConfirmBtn = gtk_button_new_with_label ("OK"); 
     132      nfResetBtn = gtk_button_new_with_label ("Reset"); 
     133      gtk_box_pack_start (GTK_BOX(hbox), nfConfirmBtn, FALSE, TRUE, 0); 
     134      gtk_box_pack_start (GTK_BOX(hbox), nfResetBtn, FALSE, TRUE, 0); 
     135      gtk_box_pack_start (GTK_BOX(nfBox), hbox, FALSE, TRUE, 0); 
     136 
     137      gtk_container_add (GTK_CONTAINER(nfAlign),nfBox); 
     138 
     139      moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->nfWin), nfAlign); 
     140      g_signal_connect (G_OBJECT(nfConfirmBtn), 
     141                        "clicked", 
     142                        G_CALLBACK(cb_nfBtn_clicked), 
     143                        d); 
     144      g_signal_connect (G_OBJECT(nfResetBtn), 
     145                        "clicked", 
     146                        G_CALLBACK(cb_nfResetBtn_clicked), 
     147                        d); 
     148    } 
     149  gtk_window_set_decorated (GTK_WINDOW(d->nfWin), FALSE); 
     150  gtk_widget_show_all (d->nfWin); 
    137151} 
    138152 
    139153void cb_mode_read (GtkMenuItem* item, MessengerData* d) 
    140154{ 
    141     g_debug ("mode read"); 
    142     message* msg; 
    143     GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
    144     GtkTreeModel* model; 
    145     GtkTreeIter iter; 
    146     gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
    147  
    148     if ( has_selection ){ 
    149         msg = g_malloc(sizeof(message)); 
    150         gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
    151         gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
    152         gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
    153     } 
    154     else msg = NULL; 
    155     detail_read_message (DETAIL_AREA(d->details),msg); 
     155  g_debug ("mode read"); 
     156  message* msg; 
     157  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
     158  GtkTreeModel* model; 
     159  GtkTreeIter iter; 
     160  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
     161 
     162  if ( has_selection ) 
     163    { 
     164      msg = g_malloc(sizeof(message)); 
     165      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
     166      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
     167      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
     168    } 
     169  else msg = NULL; 
     170  detail_read_message (DETAIL_AREA(d->details),msg); 
    156171} 
    157172 
    158173void cb_mode_reply (GtkMenuItem* item, MessengerData* d) 
    159174{ 
    160     g_debug ("mode reply"); 
    161     message* msg; 
    162     GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
    163     GtkTreeModel* model; 
    164     GtkTreeIter iter; 
    165     gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
    166  
    167     if ( has_selection ) { 
    168         msg = g_malloc(sizeof(message)); 
    169         gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
    170         gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
    171         gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
    172     }else msg = NULL; 
    173      
    174     SmsDialogWindow* sms_window = sms_dialog_window_new(); 
    175     if (msg != NULL){ 
    176         sms_dialog_window_set_title (sms_window,"Reply SMS"); 
    177         sms_dialog_reply_message (sms_window,msg); 
    178     }else sms_dialog_window_set_title (sms_window,"New SMS"); 
    179     gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 
     175  g_debug ("mode reply"); 
     176  message* msg; 
     177  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
     178  GtkTreeModel* model; 
     179  GtkTreeIter iter; 
     180  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
     181 
     182  if ( has_selection ) 
     183    { 
     184      msg = g_malloc(sizeof(message)); 
     185      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
     186      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
     187      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
     188    } 
     189  else msg = NULL; 
     190 
     191  SmsDialogWindow* sms_window = sms_dialog_window_new(); 
     192  if (msg != NULL) 
     193    { 
     194      sms_dialog_window_set_title (sms_window,"Reply SMS"); 
     195      sms_dialog_reply_message (sms_window,msg); 
     196    } 
     197  else sms_dialog_window_set_title (sms_window,"New SMS"); 
     198  gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 
    180199} 
    181200 
    182201void cb_mode_forward (GtkMenuItem* item, MessengerData* d) 
    183202{ 
    184     g_debug ("mode forward"); 
    185     message* msg; 
    186     GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
    187     GtkTreeModel* model; 
    188     GtkTreeIter iter; 
    189     gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
    190  
    191     if ( has_selection ){ 
    192         msg = g_malloc(sizeof(message)); 
    193         gtk_tree_model_get( model, &iter,  
    194                             COLUMN_FROM, &msg->name,  
    195                             COLUMN_SUBJECT, &msg->subject, 
    196                             COLUMN_FOLDER, &msg->folder, 
    197                             COLUMN_CONTENT, &msg->content, 
    198                             -1 ); 
    199     } 
    200     else msg = NULL; 
    201  
    202     SmsDialogWindow* sms_window = sms_dialog_window_new(); 
    203     sms_dialog_window_set_title (sms_window,"Forward SMS"); 
    204     sms_dialog_forward_message (sms_window, msg); 
    205     gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 
     203  g_debug ("mode forward"); 
     204  message* msg; 
     205  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW( d->view )); 
     206  GtkTreeModel* model; 
     207  GtkTreeIter iter; 
     208  gboolean has_selection = gtk_tree_selection_get_selected( selection, &model, &iter ); 
     209 
     210  if ( has_selection ) 
     211    { 
     212      msg = g_malloc(sizeof(message)); 
     213      gtk_tree_model_get( model, &iter, 
     214                          COLUMN_FROM, &msg->name, 
     215                          COLUMN_SUBJECT, &msg->subject, 
     216                          COLUMN_FOLDER, &msg->folder, 
     217                          COLUMN_CONTENT, &msg->content, 
     218                          -1 ); 
     219    } 
     220  else msg = NULL; 
     221 
     222  SmsDialogWindow* sms_window = sms_dialog_window_new(); 
     223  sms_dialog_window_set_title (sms_window,"Forward SMS"); 
     224  sms_dialog_forward_message (sms_window, msg); 
     225  gtk_widget_show_all ( GTK_WIDGET(sms_window) ); 
    206226} 
    207227 
    208228void cb_delete_folder (GtkMenuItem* item, MessengerData* d) 
    209229{ 
    210     g_debug ("delete folder called"); 
    211     GtkWidget* msgDialog; 
    212      
    213     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    214     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    215     gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
    216     if (!g_strcasecmp(oldName,"Inbox")  || 
    217         !g_strcasecmp(oldName,"Outbox") || 
    218         !g_strcasecmp(oldName,"Draft")  || 
    219         !g_strcasecmp(oldName,"Sent")   || 
    220         !g_strcasecmp(oldName,"Trash")){ 
    221         msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
    222                                             GTK_DIALOG_DESTROY_WITH_PARENT, 
    223                                             GTK_MESSAGE_WARNING, 
    224                                             GTK_BUTTONS_CLOSE, 
    225                                             g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) ); 
    226         gtk_dialog_run (GTK_DIALOG (msgDialog)); 
    227         gtk_widget_destroy (msgDialog); 
    228     }else{ 
    229         GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
    230                                                     GTK_DIALOG_DESTROY_WITH_PARENT, 
    231                                                     GTK_MESSAGE_WARNING, 
    232                                                     GTK_BUTTONS_OK_CANCEL, 
    233         g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder)); 
    234         gint result = gtk_dialog_run (GTK_DIALOG (dialog)); 
    235         switch (result){ 
    236             case GTK_RESPONSE_OK: 
    237                             g_debug ("clicked ok"); 
    238                             delete_folder(d,oldName); 
    239                             break; 
    240             case GTK_RESPONSE_CANCEL: g_debug ("clicked cancel"); break; 
    241             default: g_debug ("clicked default"); break; 
    242         } 
    243         gtk_widget_destroy (dialog); 
     230  g_debug ("delete folder called"); 
     231  GtkWidget* msgDialog; 
     232 
     233  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     234  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     235  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
     236  if (!g_strcasecmp(oldName,"Inbox")  || 
     237      !g_strcasecmp(oldName,"Outbox") || 
     238      !g_strcasecmp(oldName,"Draft")  || 
     239      !g_strcasecmp(oldName,"Sent")   || 
     240      !g_strcasecmp(oldName,"Trash")) 
     241    { 
     242      msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
     243                                          GTK_DIALOG_DESTROY_WITH_PARENT, 
     244                                          GTK_MESSAGE_WARNING, 
     245                                          GTK_BUTTONS_CLOSE, 
     246                                          g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't delete",oldName) ); 
     247      gtk_dialog_run (GTK_DIALOG (msgDialog)); 
     248      gtk_widget_destroy (msgDialog); 
     249    } 
     250  else 
     251    { 
     252      GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
     253                          GTK_DIALOG_DESTROY_WITH_PARENT, 
     254                          GTK_MESSAGE_WARNING, 
     255                          GTK_BUTTONS_OK_CANCEL, 
     256                          g_strdup_printf("Are you sure to delete folder: %s",d->currentfolder)); 
     257      gint result = gtk_dialog_run (GTK_DIALOG (dialog)); 
     258      switch (result) 
     259        { 
     260        case GTK_RESPONSE_OK: 
     261          g_debug ("clicked ok"); 
     262          delete_folder(d,oldName); 
     263          break; 
     264        case GTK_RESPONSE_CANCEL: 
     265          g_debug ("clicked cancel"); 
     266          break; 
     267        default: 
     268          g_debug ("clicked default"); 
     269          break; 
     270        } 
     271      gtk_widget_destroy (dialog); 
    244272    } 
    245273} 
     
    247275void cb_delete_message (GtkMenuItem* item, MessengerData* d) 
    248276{ 
    249     GtkTreeModel* model; 
    250     GtkTreeIter iter; 
    251     GtkTreeIter childiter; 
    252     GtkTreeSelection* selection; 
    253            
    254     selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view)); 
    255     gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 
    256     if (has_selection){ 
    257         gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 
    258         gtk_list_store_remove (d->liststore, &childiter); 
    259     }else { 
    260         GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
    261                                                     GTK_DIALOG_DESTROY_WITH_PARENT, 
    262                                                     GTK_MESSAGE_WARNING, 
    263                                                     GTK_BUTTONS_OK, 
    264                                                     "No message selected"); 
    265         gtk_dialog_run (GTK_DIALOG (dialog)); 
    266         gtk_widget_destroy (dialog); 
     277  GtkTreeModel* model; 
     278  GtkTreeIter iter; 
     279  GtkTreeIter childiter; 
     280  GtkTreeSelection* selection; 
     281 
     282  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(d->view)); 
     283  gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 
     284  if (has_selection) 
     285    { 
     286      gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 
     287      gtk_list_store_remove (d->liststore, &childiter); 
     288    } 
     289  else 
     290    { 
     291      GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
     292                          GTK_DIALOG_DESTROY_WITH_PARENT, 
     293                          GTK_MESSAGE_WARNING, 
     294                          GTK_BUTTONS_OK, 
     295                          "No message selected"); 
     296      gtk_dialog_run (GTK_DIALOG (dialog)); 
     297      gtk_widget_destroy (dialog); 
    267298    } 
    268299} 
     
    270301void cb_mmitem_activate (GtkMenuItem* item, MessengerData* d) 
    271302{ 
    272     g_debug ("message membership"); 
    273     d->mmWin = sms_membership_window_new(); 
    274     gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE); 
    275     sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore); 
    276     sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist); 
    277     sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) ); 
     303  g_debug ("message membership"); 
     304  d->mmWin = sms_membership_window_new(); 
     305  gtk_window_set_decorated (GTK_WINDOW(d->mmWin), FALSE); 
     306  sms_membership_window_set_messages (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->liststore); 
     307  sms_membership_window_set_menubox (SMS_MEMBERSHIP_WINDOW(d->mmWin), d->folderlist); 
     308  sms_membership_window_show ( SMS_MEMBERSHIP_WINDOW(d->mmWin) ); 
    278309} 
    279310 
    280311void cb_frBtn_clicked (GtkButton* button, MessengerData* d) 
    281312{ 
    282     GSList *c; 
    283     gchar* folder; 
    284      
    285     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    286     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    287     gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
    288     gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry))); 
    289     gtk_label_set_text (GTK_LABEL(menulabel),newName); 
    290     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
    291                  
    292     c = d->folderlist; 
    293     for (; c; c = g_slist_next(c) ){ 
    294         folder = (gchar*) c->data; 
    295         if (!g_strcasecmp(folder,oldName)){ 
    296             g_debug ("old %s, new %s", oldName, newName); 
    297             c->data = g_strdup(newName);  
    298         } 
    299     } 
    300     d->filtmenu = reload_filter_menu (d,d->folderlist); 
    301     MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
    302     g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
    303     moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu)); 
    304     gtk_widget_show_all (GTK_WIDGET(menubox)); 
    305     gtk_widget_hide (d->frWin); 
     313  GSList *c; 
     314  gchar* folder; 
     315 
     316  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     317  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     318  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
     319  gchar* newName = g_strdup (gtk_entry_get_text(GTK_ENTRY(d->frEntry))); 
     320  gtk_label_set_text (GTK_LABEL(menulabel),newName); 
     321  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
     322 
     323  c = d->folderlist; 
     324  for (; c; c = g_slist_next(c) ) 
     325    { 
     326      folder = (gchar*) c->data; 
     327      if (!g_strcasecmp(folder,oldName)) 
     328        { 
     329          g_debug ("old %s, new %s", oldName, newName); 
     330          c->data = g_strdup(newName); 
     331        } 
     332    } 
     333  d->filtmenu = reload_filter_menu (d,d->folderlist); 
     334  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
     335  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
     336  moko_menu_box_set_filter_menu(menubox, GTK_MENU(d->filtmenu)); 
     337  gtk_widget_show_all (GTK_WIDGET(menubox)); 
     338  gtk_widget_hide (d->frWin); 
    306339} 
    307340 
    308341void cb_frResetBtn_clicked (GtkButton* button, GtkWidget* entry) 
    309342{ 
    310     gtk_entry_set_text(GTK_ENTRY(entry),""); 
     343  gtk_entry_set_text(GTK_ENTRY(entry),""); 
    311344} 
    312345 
    313346void cb_fnitem_activate (GtkMenuItem* item, MessengerData* d) 
    314347{ 
    315     g_debug ("folder rename called"); 
    316     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    317     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    318  
    319     gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
    320     if (!g_strcasecmp(oldName,"Inbox") || 
    321         !g_strcasecmp(oldName,"Outbox") || 
    322         !g_strcasecmp(oldName,"Draft") || 
    323         !g_strcasecmp(oldName,"Sent") || 
    324         !g_strcasecmp(oldName,"Sent")){ 
    325         GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
    326                                                        GTK_DIALOG_DESTROY_WITH_PARENT, 
    327                                                        GTK_MESSAGE_WARNING, 
    328                                                        GTK_BUTTONS_CLOSE, 
    329         g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) ); 
    330         gtk_dialog_run (GTK_DIALOG (msgDialog)); 
    331         gtk_widget_destroy (msgDialog); 
    332     }else { 
    333         GtkWidget* hbox; 
    334         GtkWidget* frResetBtn; 
    335         GtkWidget* frConfirmBtn; 
    336  
    337         if ((d->frWin != NULL) && (d->frWin->window != NULL)) 
    338             gtk_entry_set_text (GTK_ENTRY(d->frEntry),""); 
    339         else{ 
    340             d->frWin = moko_dialog_window_new(); 
    341             GtkWidget* frBox = gtk_vbox_new (FALSE,10); 
    342             gtk_widget_set_size_request (frBox, 480, -1); 
    343             GtkWidget* frAlign = gtk_alignment_new (0,0,1,1); 
    344             gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10); 
    345             moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename"); 
    346  
    347             GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    348             GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    349             GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:", gtk_label_get_text (GTK_LABEL(menulabel)))); 
    350             gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5); 
    351             gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0); 
    352  
    353             d->frEntry = gtk_entry_new (); 
    354             gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0); 
    355  
    356             hbox = gtk_hbox_new (FALSE,20); 
    357             frConfirmBtn = gtk_button_new_with_label ("OK"); 
    358             frResetBtn = gtk_button_new_with_label ("Reset"); 
    359             gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0); 
    360             gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0); 
    361             gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0); 
    362             gtk_container_add (GTK_CONTAINER(frAlign),frBox); 
    363              
    364             moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign); 
    365             g_signal_connect (G_OBJECT(frConfirmBtn),  
    366                               "clicked", 
    367                               G_CALLBACK(cb_frBtn_clicked), 
    368                               d); 
    369             g_signal_connect (G_OBJECT(frResetBtn), 
    370                               "clicked", 
    371                               G_CALLBACK(cb_frResetBtn_clicked), 
    372                               d->frEntry); 
    373         } 
    374         gtk_widget_show_all ( GTK_WIDGET(d->frWin) ); 
    375    } 
     348  g_debug ("folder rename called"); 
     349  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     350  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     351 
     352  gchar* oldName = g_strdup (gtk_label_get_text (GTK_LABEL(menulabel))); 
     353  if (!g_strcasecmp(oldName,"Inbox") || 
     354      !g_strcasecmp(oldName,"Outbox") || 
     355      !g_strcasecmp(oldName,"Draft") || 
     356      !g_strcasecmp(oldName,"Sent") || 
     357      !g_strcasecmp(oldName,"Sent")) 
     358    { 
     359      GtkWidget* msgDialog = gtk_message_dialog_new( GTK_WINDOW(moko_application_get_main_window(d->app)), 
     360                             GTK_DIALOG_DESTROY_WITH_PARENT, 
     361                             GTK_MESSAGE_WARNING, 
     362                             GTK_BUTTONS_CLOSE, 
     363                             g_strdup_printf("Current folder '%s'\nis not a custom folder\nCan't rename",oldName) ); 
     364      gtk_dialog_run (GTK_DIALOG (msgDialog)); 
     365      gtk_widget_destroy (msgDialog); 
     366    } 
     367  else 
     368    { 
     369      GtkWidget* hbox; 
     370      GtkWidget* frResetBtn; 
     371      GtkWidget* frConfirmBtn; 
     372 
     373      if ((d->frWin != NULL) && (d->frWin->window != NULL)) 
     374        gtk_entry_set_text (GTK_ENTRY(d->frEntry),""); 
     375      else 
     376        { 
     377          d->frWin = moko_dialog_window_new(); 
     378          GtkWidget* frBox = gtk_vbox_new (FALSE,10); 
     379          gtk_widget_set_size_request (frBox, 480, -1); 
     380          GtkWidget* frAlign = gtk_alignment_new (0,0,1,1); 
     381          gtk_alignment_set_padding (GTK_ALIGNMENT(frAlign), 100, 0, 30, 10); 
     382          moko_dialog_window_set_title (MOKO_DIALOG_WINDOW(d->frWin), "Folder Rename"); 
     383 
     384          GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     385          GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     386          GtkWidget* frLabel = gtk_label_new (g_strdup_printf("Please input new folder name for %s:",   gtk_label_get_text (GTK_LABEL(menulabel)))); 
     387          gtk_misc_set_alignment (GTK_MISC(frLabel),0,0.5); 
     388          gtk_box_pack_start (GTK_BOX(frBox), frLabel, FALSE, TRUE, 0); 
     389 
     390          d->frEntry = gtk_entry_new (); 
     391          gtk_box_pack_start (GTK_BOX(frBox), d->frEntry, FALSE, TRUE, 0); 
     392 
     393          hbox = gtk_hbox_new (FALSE,20); 
     394          frConfirmBtn = gtk_button_new_with_label ("OK"); 
     395          frResetBtn = gtk_button_new_with_label ("Reset"); 
     396          gtk_box_pack_start (GTK_BOX(hbox), frConfirmBtn, FALSE, TRUE, 0); 
     397          gtk_box_pack_start (GTK_BOX(hbox), frResetBtn, FALSE, TRUE, 0); 
     398          gtk_box_pack_start (GTK_BOX(frBox), hbox, FALSE, TRUE, 0); 
     399          gtk_container_add (GTK_CONTAINER(frAlign),frBox); 
     400 
     401          moko_dialog_window_set_contents (MOKO_DIALOG_WINDOW(d->frWin), frAlign); 
     402          g_signal_connect (G_OBJECT(frConfirmBtn), 
     403                            "clicked", 
     404                            G_CALLBACK(cb_frBtn_clicked), 
     405                            d); 
     406          g_signal_connect (G_OBJECT(frResetBtn), 
     407                            "clicked", 
     408                            G_CALLBACK(cb_frResetBtn_clicked), 
     409                            d->frEntry); 
     410        } 
     411      gtk_widget_show_all ( GTK_WIDGET(d->frWin) ); 
     412    } 
    376413} 
    377414 
    378415void cb_nfBtn_clicked (GtkButton* button, MessengerData* d) 
    379416{ 
    380     gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry))); 
    381     g_debug ("new folder %s",folder); 
    382     d->folderlist = g_slist_append (d->folderlist,folder); 
    383     d->filtmenu = reload_filter_menu (d,d->folderlist); 
    384     MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window ); 
    385     g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
    386     moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
    387     gtk_widget_show_all (GTK_WIDGET(menubox)); 
    388     foldersdb_update (d->folderlist); 
    389     update_folder_sensitive(d, d->folderlist); 
    390     gtk_widget_hide (d->nfWin); 
     417  gchar* folder = g_strdup(gtk_entry_get_text(GTK_ENTRY(d->nfEntry))); 
     418  g_debug ("new folder %s",folder); 
     419  d->folderlist = g_slist_append (d->folderlist,folder); 
     420  d->filtmenu = reload_filter_menu (d,d->folderlist); 
     421  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( d->window ); 
     422  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
     423  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
     424  gtk_widget_show_all (GTK_WIDGET(menubox)); 
     425  foldersdb_update (d->folderlist); 
     426  update_folder_sensitive(d, d->folderlist); 
     427  gtk_widget_hide (d->nfWin); 
    391428} 
    392429 
    393430void cb_nfResetBtn_clicked (GtkButton* button, MessengerData* d) 
    394431{ 
    395     gtk_entry_set_text(GTK_ENTRY(d->nfEntry),""); 
    396     g_debug ("reset entry"); 
     432  gtk_entry_set_text(GTK_ENTRY(d->nfEntry),""); 
     433  g_debug ("reset entry"); 
    397434} 
    398435 
    399436void cb_dfBtn_clicked (GtkButton* button, MessengerData* d) 
    400437{ 
    401     GSList* c; 
    402  
    403     for( c =d->folderlist; c; c=g_slist_next(c)){ 
    404         if(!g_strcasecmp((gchar*)c->data, d->currentfolder)) { 
    405             d->folderlist = g_slist_remove (d->folderlist, c->data); 
    406             break; 
    407         } 
    408     } 
    409  
    410     d->filtmenu = reload_filter_menu (d,d->folderlist); 
    411     MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
    412     g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
    413     moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
    414  
    415     /*set the default filter item to "Inbox" */ 
    416     gchar* str = g_strdup("Inbox"); 
    417     moko_menu_box_set_active_filter (menubox,str); 
    418     gtk_widget_show_all (GTK_WIDGET(menubox)); 
    419     update_folder_sensitive (d, d->folderlist); 
    420      
    421     /*result inform */ 
    422     GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))), 
    423                                                 GTK_DIALOG_DESTROY_WITH_PARENT, 
    424                                                 GTK_MESSAGE_INFO, 
    425                                                 GTK_BUTTONS_CLOSE, 
    426                                                 "Delete successful"); 
    427     gtk_dialog_run (GTK_DIALOG (dialog)); 
    428     gtk_widget_destroy (dialog); 
     438  GSList* c; 
     439 
     440  for( c =d->folderlist; c; c=g_slist_next(c)) 
     441    { 
     442      if(!g_strcasecmp((gchar*)c->data, d->currentfolder)) 
     443        { 
     444          d->folderlist = g_slist_remove (d->folderlist, c->data); 
     445          break; 
     446        } 
     447    } 
     448 
     449  d->filtmenu = reload_filter_menu (d,d->folderlist); 
     450  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
     451  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
     452  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
     453 
     454  /*set the default filter item to "Inbox" */ 
     455  gchar* str = g_strdup("Inbox"); 
     456  moko_menu_box_set_active_filter (menubox,str); 
     457  gtk_widget_show_all (GTK_WIDGET(menubox)); 
     458  update_folder_sensitive (d, d->folderlist); 
     459 
     460  /*result inform */ 
     461  GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW(gtk_widget_get_parent_window(GTK_WIDGET(button))), 
     462                      GTK_DIALOG_DESTROY_WITH_PARENT, 
     463                      GTK_MESSAGE_INFO, 
     464                      GTK_BUTTONS_CLOSE, 
     465                      "Delete successful"); 
     466  gtk_dialog_run (GTK_DIALOG (dialog)); 
     467  gtk_widget_destroy (dialog); 
    429468} 
    430469 
    431470void delete_folder (MessengerData* d, gchar* oldName) 
    432471{ 
    433     GSList* c; 
    434  
    435     for( c =d->folderlist; c; c=g_slist_next(c)) { 
    436         if(!g_strcasecmp((gchar*)c->data, oldName)) { 
    437             d->folderlist = g_slist_remove (d->folderlist, c->data);     
    438             break; 
     472  GSList* c; 
     473 
     474  for( c =d->folderlist; c; c=g_slist_next(c)) 
     475    { 
     476      if(!g_strcasecmp((gchar*)c->data, oldName)) 
     477        { 
     478          d->folderlist = g_slist_remove (d->folderlist, c->data); 
     479          break; 
    439480        } 
    440481    } 
    441482 
    442     d->filtmenu = reload_filter_menu (d,d->folderlist); 
    443     MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
    444     g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
    445     moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
    446  
    447     /*set the default filter item to "Inbox" */ 
    448     gchar* str = g_strdup("Inbox"); 
    449     moko_menu_box_set_active_filter (menubox,str); 
    450     gtk_widget_show_all (GTK_WIDGET(menubox)); 
    451     update_folder_sensitive (d, d->folderlist); 
     483  d->filtmenu = reload_filter_menu (d,d->folderlist); 
     484  MokoMenuBox* menubox = (MokoMenuBox*)moko_paned_window_get_menubox( MOKO_PANED_WINDOW(d->window) ); 
     485  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
     486  moko_menu_box_set_filter_menu(menubox,GTK_MENU(d->filtmenu)); 
     487 
     488  /*set the default filter item to "Inbox" */ 
     489  gchar* str = g_strdup("Inbox"); 
     490  moko_menu_box_set_active_filter (menubox,str); 
     491  gtk_widget_show_all (GTK_WIDGET(menubox)); 
     492  update_folder_sensitive (d, d->folderlist); 
    452493} 
    453494 
    454495void on_mmode_rdo_btn_clicked (gchar* folder) 
    455496{ 
    456     g_debug ("switch to %s folder", folder); 
     497  g_debug ("switch to %s folder", folder); 
    457498} 
    458499 
    459500void cb_cursor_changed(GtkTreeSelection* selection, MessengerData* d) 
    460501{ 
    461     GtkTreeModel* model; 
    462     GtkTreeIter iter; 
    463     GtkTreeIter childiter; 
    464     GtkTreeView* view; 
    465     message* msg; 
    466     GdkPixbuf* icon; 
    467     GError*   error = NULL; 
    468      
    469     view = gtk_tree_selection_get_tree_view( selection ); 
    470     if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { 
    471         msg = g_malloc(sizeof(message)); 
    472         gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
    473         gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
    474         gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
    475         gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 
    476          
    477         if (msg->status == UNREAD) { 
    478             icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 
    479             msg->status = READ; 
    480             gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 
    481             gtk_list_store_set (d->liststore, &childiter,  
    482                                 COLUMN_ICON, icon, 
    483                                 COLUMN_STATUS, msg->status,  
    484                                 -1); 
     502  GtkTreeModel* model; 
     503  GtkTreeIter iter; 
     504  GtkTreeIter childiter; 
     505  GtkTreeView* view; 
     506  message* msg; 
     507  GdkPixbuf* icon; 
     508  GError*   error = NULL; 
     509 
     510  view = gtk_tree_selection_get_tree_view( selection ); 
     511  if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) 
     512    { 
     513      msg = g_malloc(sizeof(message)); 
     514      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
     515      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
     516      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
     517      gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 
     518 
     519      if (msg->status == UNREAD) 
     520        { 
     521          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 
     522          msg->status = READ; 
     523          gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(d->filter),&childiter,&iter); 
     524          gtk_list_store_set (d->liststore, &childiter, 
     525                              COLUMN_ICON, icon, 
     526                              COLUMN_STATUS, msg->status, 
     527                              -1); 
    485528        } 
    486         detail_read_message (DETAIL_AREA(d->details),msg); 
    487       } 
     529      detail_read_message (DETAIL_AREA(d->details),msg); 
     530    } 
    488531} 
    489532 
     
    492535                                    gpointer         user_data) 
    493536{ 
    494     g_debug("Button send clicked\n"); 
     537  g_debug("Button send clicked\n"); 
    495538} 
    496539 
     
    499542                                        gpointer         user_data) 
    500543{ 
    501     g_debug("Button address clicked\n"); 
     544  g_debug("Button address clicked\n"); 
    502545} 
    503546 
    504547void cb_search_entry_changed (GtkEditable* editable, MessengerData* d) 
    505548{ 
    506     GtkWidget* search_entry = GTK_WIDGET(editable); 
    507     d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry))); 
    508     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
    509     g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d)); 
    510     gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d)); 
    511     send_signal_to_footer(d->bus,str); 
     549  GtkWidget* search_entry = GTK_WIDGET(editable); 
     550  d->s_key = g_strdup (gtk_entry_get_text(GTK_ENTRY(search_entry))); 
     551  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
     552  g_debug ("search %s, result has %d messages",d->s_key,get_model_number(d)); 
     553  gchar* str = g_strdup_printf("search %s, result has %d messages",d->s_key,get_model_number(d)); 
     554  send_signal_to_footer(d->bus,str); 
    512555} 
    513556 
    514557void cb_search_on (MessengerData* d) 
    515558{ 
    516     g_debug ("search on"); 
    517     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    518     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    519     gtk_label_set_text (GTK_LABEL(menulabel),"Search Result"); 
    520     d->searchOn = TRUE; 
     559  g_debug ("search on"); 
     560  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     561  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     562  gtk_label_set_text (GTK_LABEL(menulabel),"Search Result"); 
     563  d->searchOn = TRUE; 
    521564} 
    522565 
    523566void cb_search_off (MessengerData* d) 
    524567{ 
    525     g_debug ("search off "); 
    526     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    527     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    528     gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 
    529     d->searchOn = FALSE;  
    530     GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 
    531     gtk_entry_set_text (GTK_ENTRY(search_entry), ""); 
    532     d->s_key = ""; 
    533     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
    534 } 
    535  
    536  
     568  g_debug ("search off "); 
     569  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     570  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     571  gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 
     572  d->searchOn = FALSE; 
     573  GtkWidget* search_entry = GTK_WIDGET(moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 
     574  gtk_entry_set_text (GTK_ENTRY(search_entry), ""); 
     575  d->s_key = ""; 
     576  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
     577} 
     578 
     579void cb_addressBtn_clicked (GtkButton* button, gpointer* data) 
     580{ 
     581  GtkWidget* contactWin = sms_contact_new(); 
     582  gtk_window_set_decorated (GTK_WINDOW(contactWin),FALSE); 
     583  GtkWidget* toEntry = (GtkWidget*)data; 
     584  g_signal_connect (G_OBJECT(contactWin),"contact_select_done", 
     585                    G_CALLBACK(sms_contact_select_done), toEntry); 
     586  gtk_widget_show(contactWin); 
     587} 
     588 
     589void sms_contact_select_done (GtkWidget* widget, gpointer data) 
     590{ 
     591  g_debug("sms select contact done"); 
     592  GtkWidget* toEntry = (GtkWidget*)data; 
     593  gtk_entry_set_text (GTK_ENTRY(toEntry),SMS_CONTACT_WINDOW(widget)->nameList); 
     594} 
     595 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/callbacks.h

    r1428 r1516  
    5151void on_btn_address_clicked            (GtkButton       *button, 
    5252                                        gpointer         user_data); 
    53                                          
     53 
    5454void cb_search_entry_changed (GtkEditable* editable, MessengerData* d); 
    5555void cb_search_on (MessengerData* d); 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.c

    r1452 r1516  
    1616 * Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: Alex $] 
    1717 * 
    18  */  
     18 */ 
    1919 
    2020#include "detail-area.h" 
    21 #include "callbacks.h" 
    2221#include "main.h" 
    2322 
    24 GtkWidget* detail_area_mode_edit (DetailArea *self); 
    25 GtkWidget* detail_area_new_mail (DetailArea* self); 
    2623GtkWidget* detail_area_mode_read (DetailArea* self); 
    27 GtkWidget* detail_area_mode_membership (DetailArea* self); 
    2824 
    2925G_DEFINE_TYPE (DetailArea, detail_area, GTK_TYPE_SCROLLED_WINDOW) 
     
    3127#define DETAIL_AREA_GET_PRIVATE(o)     (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_DETAIL_AREA, DetailAreaPrivate)) 
    3228 
    33 typedef struct _DetailAreaPrivate{ 
    34 } DetailAreaPrivate; 
     29typedef struct _DetailAreaPrivate 
     30  {} 
     31DetailAreaPrivate; 
    3532 
    3633/* parent class pointer */ 
     
    4138_expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) 
    4239{ 
    43          
    44         return TRUE; 
     40  return TRUE; 
    4541} 
    4642 
     
    4844detail_area_dispose (GObject *object) 
    4945{ 
    50     if (G_OBJECT_CLASS (detail_area_parent_class)->dispose) 
    51         G_OBJECT_CLASS (detail_area_parent_class)->dispose (object); 
     46  if (G_OBJECT_CLASS (detail_area_parent_class)->dispose) 
     47    G_OBJECT_CLASS (detail_area_parent_class)->dispose (object); 
    5248} 
    5349 
     
    5551detail_area_finalize (GObject *object) 
    5652{ 
    57     G_OBJECT_CLASS (detail_area_parent_class)->finalize (object); 
     53  G_OBJECT_CLASS (detail_area_parent_class)->finalize (object); 
    5854} 
    59      
     55 
    6056static void 
    6157detail_area_class_init (DetailAreaClass *klass) 
    6258{ 
    63     /* hook parent */ 
    64     GObjectClass *object_class = G_OBJECT_CLASS (klass); 
    65     parent_class = g_type_class_peek_parent(klass); 
     59  /* hook parent */ 
     60  GObjectClass *object_class = G_OBJECT_CLASS (klass); 
     61  parent_class = g_type_class_peek_parent(klass); 
    6662 
    67     /* register private data */ 
    68     g_type_class_add_private (klass, sizeof (DetailAreaPrivate)); 
     63  /* register private data */ 
     64  g_type_class_add_private (klass, sizeof (DetailAreaPrivate)); 
    6965 
    70     object_class->dispose = detail_area_dispose; 
    71     object_class->finalize = detail_area_finalize; 
    72      
     66  object_class->dispose = detail_area_dispose; 
     67  object_class->finalize = detail_area_finalize; 
     68 
    7369} 
    7470 
     
    7672detail_area_init (DetailArea *self) 
    7773{ 
    78     gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER ); 
    79      
    80     self->readAttributes = g_malloc (sizeof(ReadAttributes)); 
    81     self->editAttributes = g_malloc (sizeof(EditAttributes)); 
    82     self->notebook = GTK_NOTEBOOK( gtk_notebook_new() ); 
    83     //gtk_notebook_append_page (self->notebook,detail_area_mode_edit(self),NULL); 
    84     //gtk_notebook_append_page (self->notebook,detail_area_new_mail(self),NULL); 
    85     gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL); 
    86      
    87     //gtk_notebook_append_page (self->notebook,detail_area_mode_membership(self),NULL); 
    88     gtk_notebook_set_show_tabs (self->notebook,FALSE); 
    89     gtk_notebook_set_show_border (self->notebook,FALSE); 
    90     //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(self), GTK_WIDGET(self->notebook) ); 
    91   
     74  gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_NEVER ); 
     75 
     76  self->readAttributes = g_malloc (sizeof(ReadAttributes)); 
     77  self->editAttributes = g_malloc (sizeof(EditAttributes)); 
     78  self->notebook = GTK_NOTEBOOK( gtk_notebook_new() ); 
     79  gtk_notebook_append_page (self->notebook,detail_area_mode_read(self),NULL); 
     80  gtk_notebook_set_show_tabs (self->notebook,FALSE); 
     81  gtk_notebook_set_show_border (self->notebook,FALSE); 
    9282} 
    9383 
    9484GtkWidget* detail_area_new (void) 
    9585{ 
    96     return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL )); 
     86  return GTK_WIDGET(g_object_new(TYPE_DETAIL_AREA, NULL )); 
    9787} 
    9888 
    9989GtkWidget* detail_area_get_notebook(DetailArea* self) 
    10090{ 
    101     return GTK_WIDGET(self->notebook); 
    102 } 
    103  
    104 GtkWidget* detail_area_mode_edit (DetailArea* self) 
    105 { 
    106     /* create detail box */ 
    107     self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    108     EditAttributes* editAttributes = self->editAttributes; 
    109  
    110     /* create tool box */ 
    111     self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0));  
    112     MokoToolBox* mokobox = (MokoToolBox*)MOKO_TOOL_BOX(moko_tool_box_new()); 
    113     GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox)); 
    114     editAttributes->sendBtn = gtk_button_new_with_label("Send"); 
    115     gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->sendBtn), FALSE, FALSE, 0 ); 
    116     editAttributes->addrBtn = gtk_button_new_with_label("Address"); 
    117     gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(editAttributes->addrBtn), FALSE, FALSE, 0 ); 
    118  
    119     /* fill entry area */ 
    120     self->entryarea = MOKO_FIXED(moko_fixed_new()); 
    121     GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    122     gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 
    123     GtkWidget* entrybox = gtk_hbox_new(FALSE,0); 
    124     GtkWidget* toLabel = gtk_label_new("To:"); 
    125     gtk_widget_set_size_request (toLabel, 40, -1); 
    126     editAttributes->toEntry = gtk_entry_new(); 
    127     gtk_widget_set_size_request (editAttributes->toEntry, 300, -1); 
    128     GtkWidget* inputLabel = gtk_label_new("(120/1)"); 
    129     gtk_widget_set_size_request (inputLabel, 80, -1); 
    130     gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0); 
    131     gtk_box_pack_start (GTK_BOX(entrybox),editAttributes->toEntry,FALSE,TRUE,0); 
    132     gtk_box_pack_start (GTK_BOX(entrybox),inputLabel,FALSE,TRUE,0); 
    133     gtk_container_add (GTK_CONTAINER(alignment), entrybox); 
    134  
    135     moko_fixed_set_cargo(MOKO_FIXED(self->entryarea),GTK_WIDGET(alignment)); 
    136  
    137     /* fill textview */ 
    138     editAttributes->txtView = gtk_text_view_new(); 
    139     GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    140     gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50); 
    141     gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(editAttributes->txtView),GTK_WRAP_CHAR); 
    142     gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(editAttributes->txtView)); 
    143  
    144     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0); 
    145     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0); 
    146     gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0); 
    147  
    148     return GTK_WIDGET(self->detailbox); 
    149 } 
    150  
    151 //TODO move mail function to edit mode 
    152 GtkWidget* detail_area_new_mail (DetailArea* self) { 
    153      
    154     /* create detail box */ 
    155     self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    156  
    157     /* create tool box */ 
    158     self->toolbox = GTK_HBOX(gtk_hbox_new(FALSE,0)); 
    159     MokoToolBox* mokobox = MOKO_TOOL_BOX(moko_tool_box_new()); 
    160     GtkHBox* toolbox = moko_tool_box_get_button_box(MOKO_TOOL_BOX(mokobox)); 
    161     GtkWidget* button = gtk_button_new_with_label("Send"); 
    162     gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 
    163     button = gtk_button_new_with_label("Attach"); 
    164     gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 
    165     button = gtk_button_new_with_label("Address"); 
    166     gtk_box_pack_start( GTK_BOX(toolbox), GTK_WIDGET(button), FALSE, FALSE, 0 ); 
    167  
    168     /* fill entry area */ 
    169     self->entryarea = MOKO_FIXED(moko_fixed_new()); 
    170     GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    171     gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 
    172  
    173     GtkVBox* entrybox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    174     gtk_box_set_spacing (GTK_BOX(entrybox),2); 
    175     GtkWidget* hbox = gtk_hbox_new(FALSE,0); 
    176     GtkWidget* toLabel = gtk_label_new("To:"); 
    177     gtk_widget_set_size_request (toLabel, 110, -1); 
    178     gtk_misc_set_alignment (GTK_MISC (toLabel),0.8,0.5); 
    179     GtkWidget* toEntry = gtk_entry_new(); 
    180     gtk_widget_set_size_request (toEntry, 300, -1); 
    181     gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toLabel),FALSE,TRUE,0); 
    182     gtk_box_pack_start (GTK_BOX(hbox),GTK_WIDGET(toEntry),FALSE,TRUE,0); 
    183     gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0); 
    184  
    185     hbox = gtk_hbox_new(FALSE,0); 
    186     GtkWidget* ccLabel = gtk_label_new("CC:"); 
    187     gtk_widget_set_size_request (ccLabel, 110, -1); 
    188     gtk_misc_set_alignment (GTK_MISC (ccLabel),0.8,0.5); 
    189     GtkWidget* ccEntry = gtk_entry_new(); 
    190     gtk_widget_set_size_request (ccEntry, 300, -1); 
    191     gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 
    192     gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 
    193     gtk_box_pack_start (GTK_BOX(entrybox),GTK_WIDGET(hbox),FALSE,TRUE,0); 
    194  
    195     hbox = gtk_hbox_new(FALSE,0); 
    196     GtkWidget* bccLabel = gtk_label_new("Bcc:"); 
    197     gtk_widget_set_size_request (bccLabel, 110, -1); 
    198     gtk_misc_set_alignment (GTK_MISC (bccLabel),0.8,0.5); 
    199     GtkWidget* bccEntry = gtk_entry_new(); 
    200     gtk_widget_set_size_request (bccEntry, 300, -1); 
    201     gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 
    202     gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 
    203     gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0); 
    204  
    205     hbox = gtk_hbox_new(FALSE,0); 
    206     GtkWidget* subjectLabel = gtk_label_new("Subject:"); 
    207     gtk_widget_set_size_request (subjectLabel, 110, -1); 
    208     gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.55,0.5); 
    209     GtkWidget* subjectEntry = gtk_entry_new(); 
    210     gtk_widget_set_size_request (subjectEntry, 300, -1); 
    211     gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 
    212     gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 
    213     gtk_box_pack_start (GTK_BOX(entrybox),hbox,FALSE,TRUE,0); 
    214  
    215     gtk_container_add (GTK_CONTAINER(alignment), GTK_WIDGET(entrybox)); 
    216  
    217     moko_fixed_set_cargo(self->entryarea,GTK_WIDGET(alignment)); 
    218  
    219      /* fill textview */ 
    220      /*self->textview = GTK_TEXT_VIEW(gtk_text_view_new ()); 
    221      GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    222      gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),0,0,0,50); 
    223      gtk_text_view_set_wrap_mode (self->textview,GTK_WRAP_CHAR); 
    224      gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(self->textview)); 
    225  
    226      gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(mokobox),FALSE,TRUE,0); 
    227      gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(self->entryarea),FALSE,TRUE,0); 
    228      gtk_box_pack_start (GTK_BOX(self->detailbox),GTK_WIDGET(viewAlign),TRUE,TRUE,0);*/ 
    229  
    230     return GTK_WIDGET(self->detailbox); 
     91  return GTK_WIDGET(self->notebook); 
    23192} 
    23293 
    23394GtkWidget* detail_area_mode_read (DetailArea* self) 
    23495{ 
    235      /* create detail box */ 
    236      self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    237       
    238      ReadAttributes* readAttributes = self->readAttributes; 
     96  /* create detail box */ 
     97  self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    23998 
    240      GtkWidget* headerbox = gtk_vbox_new(FALSE,0); 
    241      GtkWidget* hbox = gtk_hbox_new(FALSE,0); 
    242      readAttributes->from_label = gtk_label_new ("Alex"); 
    243      gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5); 
    244      readAttributes->date_label = gtk_label_new ("Hello"); 
    245      gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5); 
    246       
    247      GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    248      gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 
    249      GtkWidget* label = gtk_label_new ("From:");       
    250      gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 
    251      gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 
    252      gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0); 
    253      gtk_container_add(GTK_CONTAINER(cellalign),hbox); 
    254      gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 
     99  ReadAttributes* readAttributes = self->readAttributes; 
    255100 
    256      cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    257      gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 
    258      hbox = gtk_hbox_new(FALSE,0); 
    259      label = gtk_label_new ("Date:"); 
    260      gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 
    261      gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 
    262      gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0); 
    263      gtk_container_add(GTK_CONTAINER(cellalign),hbox); 
    264      gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 
     101  GtkWidget* headerbox = gtk_vbox_new(FALSE,0); 
     102  GtkWidget* hbox = gtk_hbox_new(FALSE,0); 
     103  readAttributes->from_label = gtk_label_new ("Alex"); 
     104  gtk_misc_set_alignment (GTK_MISC (readAttributes->from_label),1,0.5); 
     105  readAttributes->date_label = gtk_label_new ("Hello"); 
     106  gtk_misc_set_alignment (GTK_MISC (readAttributes->date_label),1,0.5); 
    265107 
    266      GtkWidget* hseparator = gtk_hseparator_new(); 
    267      GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0); 
    268      gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50); 
    269      /*GtkWidget* details = gtk_label_new("this is the detail");*/ 
    270      readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n" 
    271      "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n" 
    272      "\nto make the fullscreen\n \ntrigger more interesting\n \n \n"); 
    273      gtk_widget_set_size_request (readAttributes->details,420,-1); 
    274      gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE); 
    275      gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5); 
    276      gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details); 
    277      gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0); 
    278      gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0); 
    279      gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0); 
    280       
    281      return GTK_WIDGET(self->detailbox); 
    282 } 
     108  GtkWidget* cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     109  gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 
     110  GtkWidget* label = gtk_label_new ("From:"); 
     111  gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 
     112  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 
     113  gtk_box_pack_start(GTK_BOX(hbox),readAttributes->from_label,FALSE,FALSE,0); 
     114  gtk_container_add(GTK_CONTAINER(cellalign),hbox); 
     115  gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 
    283116 
    284 GtkWidget* detail_area_mode_membership (DetailArea* self) 
    285 { 
     117  cellalign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     118  gtk_alignment_set_padding (GTK_ALIGNMENT(cellalign), 5,5,5,5); 
     119  hbox = gtk_hbox_new(FALSE,0); 
     120  label = gtk_label_new ("Date:"); 
     121  gtk_misc_set_alignment (GTK_MISC (label),1,0.5); 
     122  gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); 
     123  gtk_box_pack_start(GTK_BOX(hbox),readAttributes->date_label,FALSE,FALSE,0); 
     124  gtk_container_add(GTK_CONTAINER(cellalign),hbox); 
     125  gtk_box_pack_start(GTK_BOX(headerbox),cellalign,FALSE,FALSE,0); 
    286126 
    287     /* create detail box */ 
    288     self->detailbox = GTK_VBOX(gtk_vbox_new(FALSE,0)); 
    289     GtkWidget *title = gtk_label_new ("Message Membership"); 
    290     gtk_misc_set_alignment (GTK_MISC(title),0.4,1); 
    291     gtk_box_pack_start (GTK_BOX(self->detailbox),title,FALSE,TRUE,0); 
     127  GtkWidget* hseparator = gtk_hseparator_new(); 
     128  GtkWidget* detailAlign = gtk_alignment_new(0, 0, 0, 0); 
     129  gtk_alignment_set_padding (GTK_ALIGNMENT(detailAlign), 10, 10, 10, 50); 
     130  /*GtkWidget* details = gtk_label_new("this is the detail");*/ 
     131  readAttributes->details = gtk_label_new( "Add your widget for showing details for the selected\n" 
     132                            "\ndata entry here\n \n \n \n \n \n \n \nThis particular label\n \nis very long\n" 
     133                            "\nto make the fullscreen\n \ntrigger more interesting\n \n \n"); 
     134  gtk_widget_set_size_request (readAttributes->details,420,-1); 
     135  gtk_label_set_line_wrap (GTK_LABEL(readAttributes->details),TRUE); 
     136  gtk_misc_set_alignment (GTK_MISC (readAttributes->details),0.1,0.5); 
     137  gtk_container_add (GTK_CONTAINER(detailAlign),readAttributes->details); 
     138  gtk_box_pack_start(GTK_BOX(self->detailbox),headerbox,FALSE,TRUE,0); 
     139  gtk_box_pack_start(GTK_BOX(self->detailbox),hseparator,FALSE,TRUE,0); 
     140  gtk_box_pack_start(GTK_BOX(self->detailbox),detailAlign,FALSE,TRUE,0); 
    292141 
    293     GSList *c; 
    294     GtkWidget *rdo_btn = NULL; 
    295     GSList *rdo_btn_group; 
    296     c = self->folderlist; 
    297  
    298     for (; c; c = g_slist_next(c) ) { 
    299         gchar* folder = (gchar*) c->data; 
    300               g_debug( "find folder '%s'", folder ); 
    301               if(!g_strcasecmp(folder,"Inbox")){ 
    302                  rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 
    303                  rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 
    304                  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 
    305         } 
    306               else 
    307                  rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 
    308          
    309               g_signal_connect_swapped (G_OBJECT(rdo_btn),  
    310                                         "released", 
    311                                                     G_CALLBACK (on_mmode_rdo_btn_clicked), 
    312                                                     c->data); 
    313               gtk_box_pack_start (GTK_BOX (self->detailbox), rdo_btn, FALSE, TRUE, 0); 
    314     } 
    315  
    316     return GTK_WIDGET(self->detailbox); 
    317 } 
    318  
    319 void detail_new_sms (DetailArea* self) 
    320 { 
    321                 EditAttributes* editAttributes = self->editAttributes; 
    322                 gtk_entry_set_text (GTK_ENTRY(editAttributes->toEntry),""); 
    323                 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView)); 
    324                 gtk_text_buffer_set_text (buffer,"",0); 
    325                 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE); 
     142  return GTK_WIDGET(self->detailbox); 
    326143} 
    327144 
    328145void detail_read_message (DetailArea* self, message* msg) 
    329146{ 
    330                 ReadAttributes* readAttributes = self->readAttributes; 
    331                 if(msg != NULL) 
    332                         { 
    333                     gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name); 
    334                     gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject); 
    335                     gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder); 
    336                     g_free(msg); 
    337                   } 
    338                 else 
    339                   { 
    340                           gtk_label_set_text(GTK_LABEL(readAttributes->from_label), ""); 
    341                     gtk_label_set_text(GTK_LABEL(readAttributes->date_label), ""); 
    342                     gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message"); 
    343                   } 
    344                 gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ); 
     147  ReadAttributes* readAttributes = self->readAttributes; 
     148  if(msg != NULL) 
     149    { 
     150      gtk_label_set_text(GTK_LABEL(readAttributes->from_label), msg->name); 
     151      gtk_label_set_text(GTK_LABEL(readAttributes->date_label), msg->subject); 
     152      gtk_label_set_text(GTK_LABEL(readAttributes->details), msg->folder); 
     153      g_free(msg); 
     154    } 
     155  else 
     156    { 
     157      gtk_label_set_text(GTK_LABEL(readAttributes->from_label), ""); 
     158      gtk_label_set_text(GTK_LABEL(readAttributes->date_label), ""); 
     159      gtk_label_set_text(GTK_LABEL(readAttributes->details), "please select a message"); 
     160    } 
     161 
     162  gtk_notebook_set_current_page (self->notebook,PAGE_MODE_READ); 
    345163} 
    346164 
    347 void detail_reply_message (DetailArea* self, message* msg) 
    348 { 
    349                 EditAttributes* editAttributes = self->editAttributes; 
    350                 if(msg != NULL) 
    351                         { 
    352                   gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name); 
    353                  g_free(msg); 
    354                         } 
    355                 GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView)); 
    356                 gtk_text_buffer_set_text (buffer,"",0); 
    357                 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE); 
    358 } 
    359  
    360 void detail_forward_message (DetailArea* self, message* msg) 
    361 { 
    362                 EditAttributes* editAttributes = self->editAttributes; 
    363                 if(msg != NULL) 
    364                         { 
    365                   gtk_entry_set_text(GTK_ENTRY(editAttributes->toEntry), msg->name); 
    366                  g_free(msg); 
    367                         } 
    368           GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (editAttributes->txtView)); 
    369           gchar *fwdStr = g_strdup_printf("\n\n\n>%s",msg->content); 
    370                 gtk_text_buffer_set_text (buffer,fwdStr,strlen(fwdStr)); 
    371                 gtk_notebook_set_current_page (self->notebook,PAGE_EDIT_MODE); 
    372 } 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/detail-area.h

    r1451 r1516  
    2626#include <libmokoui/moko-tool-box.h> 
    2727#include <libmokoui/moko-fixed.h> 
    28 //#include "main.h" 
    2928#include "message.h" 
    3029 
     
    3837#define DETAIL_AREA_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_DETAIL_AREA, DetailAreaClass)) 
    3938 
    40 typedef struct _Read_Attributes{ 
     39typedef struct _Read_Attributes 
     40  { 
    4141    GtkWidget* from_label; 
    4242    GtkWidget* date_label; 
    4343    GtkWidget* details; 
    44 }ReadAttributes; 
     44  } 
     45ReadAttributes; 
    4546 
    46 typedef struct _Edit_Attributes{ 
     47typedef struct _Edit_Attributes 
     48  { 
    4749    GtkWidget* sendBtn; 
    4850    GtkWidget* addrBtn; 
    4951    GtkWidget* toEntry; 
    5052    GtkWidget* txtView; 
    51 }EditAttributes; 
     53  } 
     54EditAttributes; 
    5255 
    53 typedef struct _DetailArea{ 
     56typedef struct _DetailArea 
     57  { 
    5458    MokoDetailsWindow parent; 
    5559    GtkNotebook* notebook; 
     
    6165    ReadAttributes* readAttributes; 
    6266    EditAttributes* editAttributes; 
    63 }DetailArea; 
     67  } 
     68DetailArea; 
    6469 
    65 typedef struct _DetailAreaClass{ 
     70typedef struct _DetailAreaClass 
     71  { 
    6672    MokoDetailsWindowClass parent_class; 
    67 }DetailAreaClass; 
     73  } 
     74DetailAreaClass; 
    6875 
    6976GType detail_area_get_type(); 
     
    7178GtkWidget* detail_area_get_notebook(DetailArea* self); 
    7279 
    73 void detail_new_sms (DetailArea* self); 
    7480void detail_read_message (DetailArea* self, message* msg); 
    75 void detail_reply_message (DetailArea* self, message* msg); 
    76 void detail_forward_message (DetailArea* self, message* msg); 
    7781 
    7882G_END_DECLS 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.c

    r911 r1516  
    3434foldersdb_dispose (GObject *object) 
    3535{ 
    36    if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose) 
    37        G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object); 
     36  if (G_OBJECT_CLASS (foldersdb_parent_class)->dispose) 
     37    G_OBJECT_CLASS (foldersdb_parent_class)->dispose (object); 
    3838} 
    3939 
     
    4141foldersdb_finalize (GObject *object) 
    4242{ 
    43     G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object); 
     43  G_OBJECT_CLASS (foldersdb_parent_class)->finalize (object); 
    4444} 
    4545 
     
    4747foldersdb_class_init (FoldersDBClass *klass) 
    4848{ 
    49     g_debug( "foldersdb_class_init" ); 
    50     GObjectClass *object_class = G_OBJECT_CLASS (klass); 
     49  g_debug( "foldersdb_class_init" ); 
     50  GObjectClass *object_class = G_OBJECT_CLASS (klass); 
    5151 
    52     /* register private data */ 
    53     /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/ 
     52  /* register private data */ 
     53  /*g_type_class_add_private (klass, sizeof (FoldersDBPrivate));*/ 
    5454 
    55     /* hook virtual methods */ 
    56     /* ... */ 
     55  /* hook virtual methods */ 
     56  /* ... */ 
    5757 
    58     /* install properties */ 
    59     /* ... */ 
     58  /* install properties */ 
     59  /* ... */ 
    6060 
    61     object_class->dispose = foldersdb_dispose; 
    62     object_class->finalize = foldersdb_finalize; 
     61  object_class->dispose = foldersdb_dispose; 
     62  object_class->finalize = foldersdb_finalize; 
    6363 
    64     FILE* file = fopen( PKGDATADIR "/folderlist", "rw" ); 
    65     g_assert( file ); //FIXME error handling, if folder file is not present 
    66     char line[256]; 
    67     char *elem; 
    68     char *tok = "\n"; 
     64  FILE* file = fopen( PKGDATADIR "/folderlist", "rw" ); 
     65  g_assert( file ); //FIXME error handling, if folder file is not present 
     66  char line[256]; 
     67  char *elem; 
     68  char *tok = "\n"; 
    6969 
    70     while( fgets(line, sizeof(line), file) )  
     70  while( fgets(line, sizeof(line), file) ) 
    7171    { 
    72         elem = g_strdup(strtok(line, tok)); 
    73         klass->folders = g_slist_append(klass->folders, elem); 
     72      elem = g_strdup(strtok(line, tok)); 
     73      klass->folders = g_slist_append(klass->folders, elem); 
    7474    } 
    7575 
    76     fclose( file ); 
     76  fclose( file ); 
    7777} 
    7878 
    7979static void 
    8080foldersdb_init (FoldersDB *self) 
    81 { 
    82 } 
     81{} 
    8382 
    8483FoldersDB* 
    8584foldersdb_new (void) 
    8685{ 
    87     return g_object_new (TYPE_FOLDERSDB, NULL); 
     86  return g_object_new (TYPE_FOLDERSDB, NULL); 
    8887} 
    8988 
    9089GSList* foldersdb_get_folders(FoldersDB* self) 
    9190{ 
    92     FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self); 
    93         return klass->folders; 
     91  FoldersDBClass* klass = FOLDERSDB_GET_CLASS(self); 
     92  return klass->folders; 
    9493} 
    9594 
    9695void foldersdb_update ( GSList* folderlist ) 
    9796{ 
    98     /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/ 
    99     FILE* file = fopen( PKGDATADIR "/folderlist", "w" ); 
    100     g_assert( file ); 
    101     GSList* c; 
    102     char *elem; 
     97  /*FILE* file = g_fopen( PKGDATADIR "/folderlist", "w" );*/ 
     98  FILE* file = fopen( PKGDATADIR "/folderlist", "w" ); 
     99  g_assert( file ); 
     100  GSList* c; 
     101  char *elem; 
    103102 
    104     for( c =folderlist; c; c=g_slist_next(c)) 
    105         { 
    106             if(g_slist_next(c) != NULL) 
    107                 elem = g_strdup_printf( "%s\n", (char*)c->data); 
    108             else 
    109                 elem = g_strdup(c->data); 
    110             fputs(elem, file); 
    111         } 
    112     fclose( file ); 
     103  for( c =folderlist; c; c=g_slist_next(c)) 
     104    { 
     105      if(g_slist_next(c) != NULL) 
     106        elem = g_strdup_printf( "%s\n", (char*)c->data); 
     107      else 
     108        elem = g_strdup(c->data); 
     109      fputs(elem, file); 
     110    } 
     111  fclose( file ); 
    113112} 
    114113 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/foldersdb.h

    r911 r1516  
    1919 
    2020#ifndef __FOLDERsDB_H_ 
    21 #define __FOLDERsDB_H_  
     21#define __FOLDERsDB_H_ 
    2222 
    2323#include <glib-object.h> 
     
    3434#define FOLDERSDB_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj),     TYPE_FOLDERSDB, FoldersDBClass)) 
    3535 
    36 typedef struct { 
     36typedef struct 
     37  { 
    3738    GObject parent; 
    38 } FoldersDB; 
     39  } 
     40FoldersDB; 
    3941 
    40 typedef struct { 
     42typedef struct 
     43  { 
    4144    GObjectClass parent_class; 
    4245    GSList* folders; 
    43 } FoldersDBClass; 
     46  } 
     47FoldersDBClass; 
    4448 
    4549GType foldersdb_get_type (void); 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c

    r1452 r1516  
    2323#include <errno.h> 
    2424#include <signal.h> 
     25#include <stdlib.h> 
    2526#include <string.h> 
    26 #include <stdlib.h> 
     27#include <dbus/dbus.h> 
     28#include <dbus/dbus-glib.h> 
    2729 
    2830#include "main.h" 
     
    4042#include <gtk/gtk.h> 
    4143 
     44typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, 
     45    GtkTreeIter *iter, 
     46    gpointer data); 
     47 
    4248gboolean init_dbus (MessengerData* d) 
    4349{ 
    44     DBusError error; 
    45  
    46     /* Get a connection to the session bus */ 
    47     dbus_error_init (&error); 
    48     d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); 
    49  
    50     if (!d->bus) 
    51     { 
    52         g_warning ("Failed to connect to the D-BUS daemon: %s", error.message); 
    53         return FALSE; 
    54     } 
    55  
    56     if (dbus_error_is_set (&error)) 
    57     { 
    58         fprintf(stdout, "Connection Error (%s)\n", error.message); 
    59         dbus_error_free (&error); 
    60     } 
    61  
    62     if (NULL == d->bus) 
    63     { 
    64         fprintf(stdout, "Connection Error: bus == NULL \n"); 
    65         exit (1); 
    66     } 
    67  
    68     return TRUE; 
     50  DBusError error; 
     51 
     52  /* Get a connection to the session bus */ 
     53  dbus_error_init (&error); 
     54  d->bus = dbus_bus_get (DBUS_BUS_SYSTEM, &error); 
     55 
     56  if (!d->bus) 
     57    { 
     58      g_warning ("Failed to connect to the D-BUS daemon: %s", error.message); 
     59      return FALSE; 
     60    } 
     61 
     62  if (dbus_error_is_set (&error)) 
     63    { 
     64      fprintf(stdout, "Connection Error (%s)\n", error.message); 
     65      dbus_error_free (&error); 
     66    } 
     67 
     68  if (NULL == d->bus) 
     69    { 
     70      fprintf(stdout, "Connection Error: bus == NULL \n"); 
     71      exit (1); 
     72    } 
     73 
     74  return TRUE; 
    6975} 
    7076 
    7177int main( int argc, char** argv ) 
    7278{ 
    73     g_debug( "openmoko-messenger starting up" ); 
    74  
    75     /* Initialize GTK+ */ 
    76     gtk_init( &argc, &argv ); 
    77  
    78     MessengerData* d = g_new ( MessengerData, 1); 
    79     d->foldersdb = foldersdb_new(); 
    80     d->s_key = ""; 
    81     d->msg_num = 0; 
    82     d->app = MOKO_APPLICATION (moko_application_get_instance()); 
    83     d->currentfolder = g_strdup("Inbox"); 
    84     g_set_application_name( "Messages" );  
    85      
    86     if (init_dbus(d)) 
    87         g_debug("D-Bus initialize successfully"); 
    88  
    89     /* ui */ 
    90     setup_ui(d); 
    91  
    92     /* disable mmitem if necessary*/ 
    93     update_folder_sensitive (d, d->folderlist); 
    94                  
    95     /* Set up this connection to work in a GLib event loop */ 
    96     dbus_connection_setup_with_g_main (d->bus, NULL); 
    97  
    98     /* show everything and run main loop */ 
    99     gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE); 
    100     gtk_widget_show_all (GTK_WIDGET(d->window)); 
    101     gtk_main(); 
    102  
    103     return 0; 
     79  g_debug( "openmoko-messenger starting up" ); 
     80 
     81  /* Initialize GTK+ */ 
     82  gtk_init( &argc, &argv ); 
     83 
     84  MessengerData* d = g_new ( MessengerData, 1); 
     85  d->foldersdb = foldersdb_new(); 
     86  d->s_key = ""; 
     87  d->msg_num = 0; 
     88  d->app = MOKO_APPLICATION (moko_application_get_instance()); 
     89  d->currentfolder = g_strdup("Inbox"); 
     90  g_set_application_name( "Messages" ); 
     91 
     92  if (init_dbus(d)) 
     93    g_debug("D-Bus initialize successfully"); 
     94 
     95  /* ui */ 
     96  setup_ui(d); 
     97 
     98  /* disable mmitem if necessary*/ 
     99  update_folder_sensitive (d, d->folderlist); 
     100 
     101  /* Set up this connection to work in a GLib event loop */ 
     102  dbus_connection_setup_with_g_main (d->bus, NULL); 
     103 
     104  /* show everything and run main loop */ 
     105  gtk_window_set_decorated (GTK_WINDOW(d->window), FALSE); 
     106  gtk_widget_show_all (GTK_WIDGET(d->window)); 
     107  gtk_main(); 
     108 
     109  return 0; 
    104110 
    105111} 
     
    107113void update_folder_sensitive (MessengerData* d, GSList* folderlist) 
    108114{ 
    109     if (g_slist_length (folderlist) > 5){ 
    110         gtk_widget_set_sensitive (d->mmitem, TRUE); 
    111         gtk_widget_set_sensitive (d->fnitem, TRUE); 
    112     } 
    113     else{ 
    114         gtk_widget_set_sensitive (d->mmitem, FALSE); 
    115         gtk_widget_set_sensitive (d->fnitem, FALSE); 
     115  if (g_slist_length (folderlist) > 5) 
     116    { 
     117      gtk_widget_set_sensitive (d->mmitem, TRUE); 
     118      gtk_widget_set_sensitive (d->fnitem, TRUE); 
     119    } 
     120  else 
     121    { 
     122      gtk_widget_set_sensitive (d->mmitem, FALSE); 
     123      gtk_widget_set_sensitive (d->fnitem, FALSE); 
    116124    } 
    117125} 
     
    119127GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist) 
    120128{ 
    121     GSList *c; 
    122     GtkWidget* filtmenu; 
    123  
    124     filtmenu = gtk_menu_new(); 
    125     c = folderlist; 
    126     for (; c; c = g_slist_next(c) ){ 
    127         gchar* folder = (gchar*) c->data; 
    128         g_debug( "adding folder '%s'", folder ); 
    129         gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 
    130     } 
    131  
    132     return filtmenu; 
     129  GSList *c; 
     130  GtkWidget* filtmenu; 
     131 
     132  filtmenu = gtk_menu_new(); 
     133  c = folderlist; 
     134  for (; c; c = g_slist_next(c) ) 
     135    { 
     136      gchar* folder = (gchar*) c->data; 
     137      g_debug( "adding folder '%s'", folder ); 
     138      gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 
     139    } 
     140 
     141  return filtmenu; 
    133142} 
    134143 
    135144void setup_ui( MessengerData* d ) 
    136145{ 
    137     /* main window */ 
    138     d->window = MOKO_PANED_WINDOW(moko_paned_window_new()); 
    139     d->mmWin = NULL; 
    140                   
    141     /* application menu */ 
    142     d->menu = gtk_menu_new();  
    143     gtk_widget_show (d->menu); 
    144     d->mmitem = gtk_menu_item_new_with_label( "Message Membership" ); 
    145     d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" ); 
    146     GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" ); 
    147     GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" ); 
    148     GtkWidget* sepitem = gtk_separator_menu_item_new();  
    149     GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" ); 
    150     g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d ); 
    151     g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d ); 
    152     g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d ); 
    153     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem ); 
    154     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem ); 
    155     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem ); 
    156     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem ); 
    157     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem ); 
    158     gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem ); 
    159     moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) ); 
    160  
    161     /* filter menu */ 
    162     d->filtmenu = gtk_menu_new(); 
    163     gtk_widget_show (d->filtmenu); 
    164     d->folderlist = foldersdb_get_folders( d->foldersdb ); 
    165     d->filtmenu = reload_filter_menu( d, d->folderlist ); 
    166  
    167     moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) ); 
    168     GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window)); 
    169     g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
    170  
    171     /* connect close event */ 
    172     g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d ); 
    173  
    174     /* set navagation area */ 
    175     populate_navigation_area( d ); 
    176  
    177     /* set toolbox */ 
    178     GtkWidget* newButton; 
    179     GtkWidget* modeButton; 
    180     GtkWidget* getmailButton; 
    181     GtkWidget* deleteButton; 
    182  
    183     GtkWidget* newMenu; 
    184     GtkWidget* modeMenu; 
    185     GtkWidget* deleteMenu; 
    186      
    187     GtkWidget* image; 
    188  
    189     /* set tool bar */ 
    190     d->toolbox = moko_tool_box_new_with_search(); 
    191     gtk_widget_show (d->toolbox); 
    192     GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 
    193     gtk_widget_show (searchEntry); 
    194     g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d );  
    195     g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d );  
    196     g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d );  
    197  
    198     /* set action buttons*/ 
    199     deleteMenu = gtk_menu_new(); 
    200     GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" ); 
    201     GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" ); 
    202     g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d );  
    203     g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d );  
    204  
    205     gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) ); 
    206     gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) ); 
    207     gtk_widget_show_all (deleteMenu); 
    208     deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
    209     image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png"); 
    210     moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image); 
    211     moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu)); 
    212  
    213     getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
    214     image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png"); 
    215     moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image); 
    216  
    217     modeMenu = gtk_menu_new(); 
    218     GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" ); 
    219     GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" ); 
    220     GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" ); 
    221  
    222     gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem); 
    223     gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem); 
    224     gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem); 
    225     g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d ); 
    226     g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d ); 
    227     g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d ); 
    228     gtk_widget_show_all (modeMenu); 
    229     modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
    230     image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png"); 
    231     moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image); 
    232     moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) ); 
    233  
    234     newMenu = gtk_menu_new(); 
    235     GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ; 
    236     GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ; 
    237     GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ; 
    238  
    239     gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem); 
    240     gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem); 
    241     gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem); 
    242     gtk_widget_show_all (newMenu); 
    243     g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d ); 
    244     g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d ); 
    245     g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d ); 
    246     newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
    247     image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png"); 
    248     moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image); 
    249     moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) ); 
    250  
    251     moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) ); 
    252  
    253     /* detail area */ 
    254     populate_detail_area (d); 
    255      
    256     /* Fix default "Filter Menu" bug*/ 
    257     d->currentfolder = g_strdup("Inbox"); 
    258     GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
    259     GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
    260     gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 
    261     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
    262      
    263     /* select the first column */ 
    264     gint index = 0; 
    265     GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 
    266     GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 ); 
    267     gtk_tree_selection_select_path( tree_selection, path ); 
    268     gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE );  
    269     gtk_widget_grab_focus (d->view); 
     146  /* main window */ 
     147  d->window = MOKO_PANED_WINDOW(moko_paned_window_new()); 
     148  d->mmWin = NULL; 
     149 
     150  /* application menu */ 
     151  d->menu = gtk_menu_new(); 
     152  gtk_widget_show (d->menu); 
     153  d->mmitem = gtk_menu_item_new_with_label( "Message Membership" ); 
     154  d->fnitem = gtk_menu_item_new_with_label( "Folder Rename" ); 
     155  GtkWidget* accountitem = gtk_menu_item_new_with_label( "Account" ); 
     156  GtkWidget* helpitem = gtk_menu_item_new_with_label( "Help" ); 
     157  GtkWidget* sepitem = gtk_separator_menu_item_new(); 
     158  GtkWidget* closeitem = gtk_menu_item_new_with_label( "Close" ); 
     159  g_signal_connect( G_OBJECT(closeitem), "activate", G_CALLBACK(main_quit), d ); 
     160  g_signal_connect( G_OBJECT(d->mmitem), "activate", G_CALLBACK(cb_mmitem_activate), d ); 
     161  g_signal_connect( G_OBJECT(d->fnitem), "activate", G_CALLBACK(cb_fnitem_activate), d ); 
     162  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->mmitem ); 
     163  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), d->fnitem ); 
     164  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), accountitem ); 
     165  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), helpitem ); 
     166  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), sepitem ); 
     167  gtk_menu_shell_append( GTK_MENU_SHELL(d->menu), closeitem ); 
     168  moko_paned_window_set_application_menu( d->window, GTK_MENU(d->menu) ); 
     169 
     170  /* filter menu */ 
     171  d->filtmenu = gtk_menu_new(); 
     172  gtk_widget_show (d->filtmenu); 
     173  d->folderlist = foldersdb_get_folders( d->foldersdb ); 
     174  d->filtmenu = reload_filter_menu( d, d->folderlist ); 
     175 
     176  moko_paned_window_set_filter_menu( d->window, GTK_MENU(d->filtmenu) ); 
     177  GtkWidget* menubox = GTK_WIDGET(moko_paned_window_get_menubox(d->window)); 
     178  g_signal_connect( G_OBJECT(menubox), "filter_changed", G_CALLBACK(cb_filter_changed), d ); 
     179 
     180  /* connect close event */ 
     181  g_signal_connect( G_OBJECT(d->window), "delete_event", G_CALLBACK( main_quit ), d ); 
     182 
     183  /* set navagation area */ 
     184  populate_navigation_area( d ); 
     185 
     186  /* set toolbox */ 
     187  GtkWidget* newButton; 
     188  GtkWidget* modeButton; 
     189  GtkWidget* getmailButton; 
     190  GtkWidget* deleteButton; 
     191 
     192  GtkWidget* newMenu; 
     193  GtkWidget* modeMenu; 
     194  GtkWidget* deleteMenu; 
     195 
     196  GtkWidget* image; 
     197 
     198  /* set tool bar */ 
     199  d->toolbox = moko_tool_box_new_with_search(); 
     200  gtk_widget_show (d->toolbox); 
     201  GtkWidget* searchEntry = GTK_WIDGET (moko_tool_box_get_entry (MOKO_TOOL_BOX(d->toolbox))); 
     202  gtk_widget_show (searchEntry); 
     203  g_signal_connect( G_OBJECT(searchEntry), "changed", G_CALLBACK(cb_search_entry_changed), d ); 
     204  g_signal_connect_swapped ( G_OBJECT(d->toolbox), "searchbox_visible", G_CALLBACK(cb_search_on), d ); 
     205  g_signal_connect_swapped( G_OBJECT(d->toolbox), "searchbox_invisible", G_CALLBACK(cb_search_off), d ); 
     206 
     207  /* set action buttons*/ 
     208  deleteMenu = gtk_menu_new(); 
     209  GtkWidget* delMsgItem = gtk_image_menu_item_new_with_label( "Delete Message" ); 
     210  GtkWidget* delFolderItem = gtk_image_menu_item_new_with_label( "Delete Folder" ); 
     211  g_signal_connect( G_OBJECT(delFolderItem), "activate", G_CALLBACK(cb_delete_folder), d ); 
     212  g_signal_connect( G_OBJECT(delMsgItem), "activate", G_CALLBACK(cb_delete_message), d ); 
     213 
     214  gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delMsgItem) ); 
     215  gtk_menu_shell_append( GTK_MENU_SHELL(deleteMenu), GTK_WIDGET(delFolderItem) ); 
     216  gtk_widget_show_all (deleteMenu); 
     217  deleteButton = GTK_WIDGET (moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
     218  image = gtk_image_new_from_file (PKGDATADIR "/Delete_Message.png"); 
     219  moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(deleteButton),image); 
     220  moko_pixmap_button_set_menu (MOKO_PIXMAP_BUTTON(deleteButton), GTK_MENU(deleteMenu)); 
     221 
     222  getmailButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
     223  image = gtk_image_new_from_file (PKGDATADIR "/GetMail.png"); 
     224  moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(getmailButton),image); 
     225 
     226  modeMenu = gtk_menu_new(); 
     227  GtkWidget* modeReadItem = gtk_image_menu_item_new_with_label( "Mode Read" ); 
     228  GtkWidget* modeReplyItem = gtk_image_menu_item_new_with_label( "Mode Reply" ); 
     229  GtkWidget* modeFwdItem = gtk_image_menu_item_new_with_label( "Mode Forward" ); 
     230 
     231  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu),modeReadItem); 
     232  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeReplyItem); 
     233  gtk_menu_shell_append( GTK_MENU_SHELL(modeMenu), modeFwdItem); 
     234  g_signal_connect( G_OBJECT(modeReadItem), "activate", G_CALLBACK(cb_mode_read), d ); 
     235  g_signal_connect( G_OBJECT(modeReplyItem), "activate", G_CALLBACK(cb_mode_reply), d ); 
     236  g_signal_connect( G_OBJECT(modeFwdItem), "activate", G_CALLBACK(cb_mode_forward), d ); 
     237  gtk_widget_show_all (modeMenu); 
     238  modeButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
     239  image = gtk_image_new_from_file (PKGDATADIR "/Mode_Read.png"); 
     240  moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(modeButton),image); 
     241  moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(modeButton), GTK_MENU(modeMenu) ); 
     242 
     243  newMenu = gtk_menu_new(); 
     244  GtkWidget* newMsgItem = gtk_image_menu_item_new_with_label("New SMS") ; 
     245  GtkWidget* newFolderItem = gtk_image_menu_item_new_with_label("New Folder") ; 
     246  GtkWidget* newMailItem = gtk_image_menu_item_new_with_label("New Mail") ; 
     247 
     248  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMsgItem); 
     249  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newMailItem); 
     250  gtk_menu_shell_append( GTK_MENU_SHELL(newMenu), newFolderItem); 
     251  gtk_widget_show_all (newMenu); 
     252  g_signal_connect( G_OBJECT(newMsgItem), "activate", G_CALLBACK(cb_new_sms), d ); 
     253  g_signal_connect( G_OBJECT(newMailItem), "activate", G_CALLBACK(cb_new_mail), d ); 
     254  g_signal_connect( G_OBJECT(newFolderItem), "activate", G_CALLBACK(cb_new_folder), d ); 
     255  newButton = GTK_WIDGET(moko_tool_box_add_action_button(MOKO_TOOL_BOX(d->toolbox))); 
     256  image = gtk_image_new_from_file (PKGDATADIR "/New_Mail.png"); 
     257  moko_pixmap_button_set_center_image (MOKO_PIXMAP_BUTTON(newButton),image); 
     258  moko_pixmap_button_set_menu ( MOKO_PIXMAP_BUTTON(newButton),GTK_MENU(newMenu) ); 
     259 
     260  moko_paned_window_add_toolbox( d->window, MOKO_TOOL_BOX(d->toolbox) ); 
     261 
     262  /* detail area */ 
     263  populate_detail_area (d); 
     264 
     265  /* Fix default "Filter Menu" bug*/ 
     266  d->currentfolder = g_strdup("Inbox"); 
     267  GtkWidget* menuitem = gtk_menu_get_attach_widget (GTK_MENU(d->filtmenu)); 
     268  GtkWidget* menulabel = GTK_BIN(menuitem)->child; 
     269  gtk_label_set_text (GTK_LABEL(menulabel),"Inbox"); 
     270  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(d->filter)); 
     271 
     272  /* select the first column */ 
     273  gint index = 0; 
     274  GtkTreeSelection* tree_selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 
     275  GtkTreePath *path = gtk_tree_path_new_from_indices( index, -1 ); 
     276  gtk_tree_selection_select_path( tree_selection, path ); 
     277  gtk_tree_view_set_cursor( GTK_TREE_VIEW(d->view), path, NULL, FALSE ); 
     278  gtk_widget_grab_focus (d->view); 
     279 
     280  /* temporary setting */ 
     281  GtkSettings* settings = gtk_settings_get_default(); 
     282  g_object_set(settings, 
     283               "gtk-theme-name","openmoko-standard", 
     284               NULL); 
    270285} 
    271286 
    272287gboolean filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, MessengerData* d) 
    273288{ 
    274     gchar* folder; 
    275     gchar* from; 
    276     gchar* subject; 
    277  
    278     gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 
    279     gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1); 
    280     gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1); 
    281            
    282     if (d->searchOn){ 
    283         if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key)) 
    284             return FALSE; 
    285     }else { 
    286         gtk_menu_set_active (GTK_MENU(d->filtmenu),0); 
    287         if(g_strcasecmp(folder,d->currentfolder)) 
    288             return FALSE; 
    289     } 
    290  
    291     return TRUE; 
     289  gchar* folder; 
     290  gchar* from; 
     291  gchar* subject; 
     292 
     293  gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 
     294  gtk_tree_model_get (model, iter, COLUMN_FROM, &from, -1); 
     295  gtk_tree_model_get (model, iter, COLUMN_SUBJECT, &subject, -1); 
     296 
     297  if (d->searchOn) 
     298    { 
     299      if ((strlen(d->s_key) > 0) && !strcasestr(from, d->s_key) && !strcasestr(subject, d->s_key)) 
     300        return FALSE; 
     301    } 
     302  else 
     303    { 
     304      gtk_menu_set_active (GTK_MENU(d->filtmenu),0); 
     305      if(g_strcasecmp(folder,d->currentfolder)) 
     306        return FALSE; 
     307    } 
     308 
     309  return TRUE; 
    292310} 
    293311 
    294312void cell_data_func (GtkTreeViewColumn *col, 
    295                      GtkCellRenderer   *renderer, 
    296                      GtkTreeModel      *model, 
    297                      GtkTreeIter            *iter, 
    298                      gpointer          user_data) 
    299 { 
    300     gint status; 
    301     gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 
    302  
    303     if (status == UNREAD) 
    304         g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 
    305     else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 
     313                     GtkCellRenderer   *renderer, 
     314                     GtkTreeModel      *model, 
     315                     GtkTreeIter            *iter, 
     316                     gpointer          user_data) 
     317{ 
     318  gint status; 
     319  gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 
     320 
     321  if (status == UNREAD) 
     322    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 
     323  else g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 
    306324} 
    307325 
    308326void populate_navigation_area( MessengerData* d ) 
    309327{ 
    310     guint         i; 
    311     GdkPixbuf*    icon = NULL; 
    312     GError*       error = NULL; 
    313     GtkTreeIter   iter; 
    314      
    315     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 ); 
    316     d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL); 
    317     d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter));  
    318      
    319     for (i = 0;  i < G_N_ELEMENTS(names);  ++i) { 
    320         gtk_list_store_append(d->liststore, &iter); 
    321         switch(states[i]) { 
    322             case UNREAD   : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error);break; 
    323             case READ     : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error);break; 
    324             case REPLIED  : icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error);break; 
    325             case FORWARD  :  icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error);break; 
    326         } 
    327         gtk_list_store_set(d->liststore, &iter, 
    328                            COLUMN_ICON, icon, 
    329                            COLUMN_FROM, names[i], 
    330                            COLUMN_SUBJECT, subjects[i], 
    331                            COLUMN_CONTENT, contents[i], 
    332                            COLUMN_STATUS, states[i], 
    333                            COLUMN_FOLDER, folders[i], 
    334                            -1); 
    335     } 
    336     gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter), 
    337                                             filter_visible_function, 
    338                                             d, 
    339                                             NULL);                                                                                                                       
    340     GtkCellRenderer* ren; 
    341     GtkTreeViewColumn* column = gtk_tree_view_column_new(); 
    342     gtk_tree_view_column_set_title(column, "From"); 
    343            
    344     /* Add status picture */ 
    345     ren = gtk_cell_renderer_pixbuf_new(); 
    346     gtk_tree_view_column_pack_start(column, ren, FALSE); 
    347     gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 
    348                  
    349     /* add message from name */ 
    350     ren = gtk_cell_renderer_text_new(); 
    351     gtk_tree_view_column_pack_start(column, ren, TRUE); 
    352     gtk_tree_view_column_set_attributes(column, ren, 
    353                                         "text", COLUMN_FROM, 
    354                                         NULL); 
    355  
    356     /* Bold if UNREAD */ 
    357     gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 
    358     moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 
    359  
    360     ren = gtk_cell_renderer_text_new(); 
    361     column = gtk_tree_view_column_new(); 
    362     gtk_tree_view_column_set_title(column, "Subject"); 
    363     gtk_tree_view_column_pack_start(column, ren, TRUE); 
    364     gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 
    365     gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 
    366     moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 
    367  
    368     GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 
    369     g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d );  
    370     moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) ); 
     328  guint         i; 
     329  GdkPixbuf*    icon = NULL; 
     330  GError*       error = NULL; 
     331  GtkTreeIter   iter; 
     332 
     333  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 ); 
     334  d->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (d->liststore),NULL); 
     335  d->view = moko_tree_view_new_with_model (GTK_TREE_MODEL (d->filter)); 
     336 
     337  for (i = 0;  i < G_N_ELEMENTS(names);  ++i) 
     338    { 
     339      gtk_list_store_append(d->liststore, &iter); 
     340      switch(states[i]) 
     341        { 
     342        case UNREAD       : 
     343          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Unread.png", &error); 
     344          break; 
     345        case READ         : 
     346          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Read.png", &error); 
     347          break; 
     348        case REPLIED  : 
     349          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Reply.png", &error); 
     350          break; 
     351        case FORWARD  : 
     352          icon = gdk_pixbuf_new_from_file (PKGDATADIR "/Mode_Forward.png", &error); 
     353          break; 
     354        } 
     355      gtk_list_store_set(d->liststore, &iter, 
     356                         COLUMN_ICON, icon, 
     357                         COLUMN_FROM, names[i], 
     358                         COLUMN_SUBJECT, subjects[i], 
     359                         COLUMN_CONTENT, contents[i], 
     360                         COLUMN_STATUS, states[i], 
     361                         COLUMN_FOLDER, folders[i], 
     362                         -1); 
     363    } 
     364  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (d->filter), 
     365                                          (GtkTreeModelFilterVisibleFunc)filter_visible_function, 
     366                                          d, 
     367                                          NULL); 
     368  GtkCellRenderer* ren; 
     369  GtkTreeViewColumn* column = gtk_tree_view_column_new(); 
     370  gtk_tree_view_column_set_title(column, "From"); 
     371 
     372  /* Add status picture */ 
     373  ren = gtk_cell_renderer_pixbuf_new(); 
     374  gtk_tree_view_column_pack_start(column, ren, FALSE); 
     375  gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 
     376 
     377  /* add message from name */ 
     378  ren = gtk_cell_renderer_text_new(); 
     379  gtk_tree_view_column_pack_start(column, ren, TRUE); 
     380  gtk_tree_view_column_set_attributes(column, ren, 
     381                                      "text", COLUMN_FROM, 
     382                                      NULL); 
     383 
     384  /* Bold if UNREAD */ 
     385  gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 
     386  moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 
     387 
     388  ren = gtk_cell_renderer_text_new(); 
     389  column = gtk_tree_view_column_new(); 
     390  gtk_tree_view_column_set_title(column, "Subject"); 
     391  gtk_tree_view_column_pack_start(column, ren, TRUE); 
     392  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 
     393  gtk_tree_view_column_set_cell_data_func (column, ren, cell_data_func, d->liststore, NULL); 
     394  moko_tree_view_append_column( MOKO_TREE_VIEW(d->view), column ); 
     395 
     396  GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(d->view) ); 
     397  g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(cb_cursor_changed), d ); 
     398  moko_paned_window_set_upper_pane( d->window, GTK_WIDGET(moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(d->view))) ); 
    371399} 
    372400 
    373401void populate_detail_area( MessengerData* d ) 
    374402{ 
    375    d->details = detail_area_new(); 
    376    gtk_widget_show (d->details); 
    377    gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details))); 
    378    moko_paned_window_set_lower_pane( d->window, GTK_WIDGET(moko_details_window_put_in_box(DETAIL_AREA(d->details)))); 
     403  d->details = detail_area_new(); 
     404  gtk_widget_show (d->details); 
     405  gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(d->details), detail_area_get_notebook(DETAIL_AREA(d->details))); 
     406  moko_paned_window_set_lower_pane( MOKO_PANED_WINDOW(d->window), GTK_WIDGET(moko_details_window_put_in_box(d->details))); 
    379407} 
    380408 
    381409void main_quit(GtkMenuItem* item, MessengerData* d) 
    382410{ 
    383     foldersdb_update (d->folderlist); 
    384     send_signal_to_footer(d->bus,""); 
    385     gtk_main_quit(); 
    386 } 
    387  
     411  foldersdb_update (d->folderlist); 
     412  send_signal_to_footer(d->bus,""); 
     413  gtk_main_quit(); 
     414} 
     415 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/main.h

    r1452 r1516  
    2727#include <gtk/gtkliststore.h> 
    2828#include <gtk/gtktreemodelfilter.h> 
    29 #include <dbus/dbus-glib.h> 
    3029#include <dbus/dbus.h> 
    3130 
     
    3332#include "detail-area.h" 
    3433 
    35 typedef struct _MessengerData{ 
     34typedef struct _MessengerData 
     35  { 
    3636    MokoApplication* app; 
    3737    MokoPanedWindow* window; 
     
    5757    GtkWidget* frEntry; 
    5858    DBusConnection *bus; 
    59 }MessengerData; 
     59  } 
     60MessengerData; 
    6061 
    6162enum { 
    62     COLUMN_ICON, 
    63     COLUMN_FROM, 
    64     COLUMN_SUBJECT, 
    65     COLUMN_CONTENT, 
    66     COLUMN_STATUS, 
    67     COLUMN_FOLDER, 
    68     NUM_COLS, 
     63  COLUMN_ICON, 
     64  COLUMN_FROM, 
     65  COLUMN_SUBJECT, 
     66  COLUMN_CONTENT, 
     67  COLUMN_STATUS, 
     68  COLUMN_FOLDER, 
     69  NUM_COLS, 
    6970}; 
    7071 
    7172enum { 
    72     PAGE_EDIT_MODE, 
    73     PAGE_NEW_MAIL, 
    74     PAGE_MODE_READ, 
    75     PAGE_MODE_REPLY, 
    76     PAGE_MODE_FORWARD, 
    77     PAGE_MODE_MMSHIP, 
    78     NUM_PAGES, 
     73  PAGE_EDIT_MODE, 
     74  PAGE_NEW_MAIL, 
     75  PAGE_MODE_READ, 
     76  PAGE_MODE_REPLY, 
     77  PAGE_MODE_FORWARD, 
     78  PAGE_MODE_MMSHIP, 
     79  NUM_PAGES, 
    7980}; 
    8081 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/message.h

    r911 r1516  
    2222#define _MESSAGE_H_ 
    2323 
    24 typedef struct message{ 
     24typedef struct message 
     25  { 
    2526    gchar* name; 
    2627    gchar* subject; 
     
    2829    gchar* content; 
    2930    gint   status; 
    30 }message; 
     31  } 
     32message; 
    3133 
    3234enum { 
    33     UNREAD, 
    34     READ, 
    35     REPLIED, 
    36     FORWARD, 
    37     NUM_STATES, 
     35  UNREAD, 
     36  READ, 
     37  REPLIED, 
     38  FORWARD, 
     39  NUM_STATES, 
    3840}; 
    3941 
    40 const static gint states[] = { UNREAD, READ, UNREAD, UNREAD, FORWARD, 
    41                                UNREAD, UNREAD, REPLIED, READ, UNREAD }; 
     42const static gint states[] = 
     43  { 
     44    UNREAD, READ, UNREAD, UNREAD, FORWARD, 
     45    UNREAD, UNREAD, REPLIED, READ, UNREAD 
     46  }; 
    4247 
    43 const static gchar *names[] = { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.", 
    44                                 "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J."}; 
     48const static gchar *names[] = 
     49  { "John B.", "Jane Z.", "Carl O.", "Owen P.", "Jeremy F.", 
     50    "Michael M.", "Ute D.", "Akira T.", "Thomas F.", "Matthew J." 
     51  }; 
    4552 
    46 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"}; 
     53const static gchar *subjects[] = 
     54  { "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" 
     55  }; 
    4756 
    48 const static gchar *folders[] = { "Inbox", "Outbox", "Sent", "Inbox", "Inbox", 
    49                                   "Inbox", "Inbox", "Inbox", "Inbox", "Inbox"}; 
     57const static gchar *folders[] = 
     58  { "Inbox", "Outbox", "Sent", "Inbox", "Inbox", 
     59    "Inbox", "Inbox", "Inbox", "Inbox", "Inbox" 
     60  }; 
    5061 
    51 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"}; 
     62const static gchar *contents[] = 
     63  {"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" 
     64  }; 
    5265 
    5366#endif 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.c

    r1452 r1516  
    1 /*   
     1/* 
    22 *  sms-dialog-window.c 
    33 *   
     
    1717 *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 
    1818 */ 
    19   
     19 
    2020#include "sms-dialog-window.h" 
    2121#include "main.h" 
     
    4343 
    4444struct _SmsDialogWindowPrivate 
    45 { 
     45  { 
    4646    GtkWidget* vbox; 
    4747    GtkWidget* hbox; 
     
    5252    GtkWidget* closebutton; 
    5353    GtkWidget* txtView; 
    54     GtkWidget* toEntry; 
    55 }; 
     54  }; 
    5655 
    5756typedef struct _SmsDialogRunInfo 
    58 { 
     57  { 
    5958    SmsDialogWindow *dialog; 
    6059    gint response_id; 
    6160    GMainLoop *loop; 
    6261    gboolean destroyed; 
    63 } SmsDialogRunInfo; 
     62  } 
     63SmsDialogRunInfo; 
    6464 
    6565static void sms_dialog_window_close(SmsDialogWindow* self); 
    6666gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget, 
    67                                                  GdkEventKey     *event, 
    68                                                  SmsDialogWindow *self); 
     67    GdkEventKey     *event, 
     68    SmsDialogWindow *self); 
    6969 
    7070 
     
    7272shutdown_loop (SmsDialogRunInfo *ri) 
    7373{ 
    74     if (g_main_loop_is_running (ri->loop)) 
    75         g_main_loop_quit (ri->loop); 
     74  if (g_main_loop_is_running (ri->loop)) 
     75    g_main_loop_quit (ri->loop); 
    7676} 
    7777 
     
    7979run_unmap_handler (SmsDialogWindow* dialog, gpointer data) 
    8080{ 
    81     SmsDialogRunInfo *ri = data; 
    82  
    83     shutdown_loop (ri); 
     81  SmsDialogRunInfo *ri = data; 
     82 
     83  shutdown_loop (ri); 
    8484} 
    8585 
    8686static void 
    8787run_response_handler (SmsDialogWindow* dialog, 
    88                               gint response_id, 
    89                               gpointer data) 
    90 { 
    91     SmsDialogRunInfo *ri; 
    92  
    93     ri = data; 
    94  
    95     ri->response_id = response_id; 
    96  
    97     shutdown_loop (ri); 
     88                      gint response_id, 
     89                      gpointer data) 
     90{ 
     91  SmsDialogRunInfo *ri; 
     92 
     93  ri = data; 
     94 
     95  ri->response_id = response_id; 
     96 
     97  shutdown_loop (ri); 
    9898} 
    9999 
     
    103103                    gpointer data) 
    104104{ 
    105     SmsDialogRunInfo *ri = data; 
    106  
    107     shutdown_loop (ri); 
    108  
    109     return TRUE; /* Do not destroy */ 
    110 } 
    111  
    112 static void 
    113         run_destroy_handler (SmsDialogWindow* dialog, gpointer data) 
    114 { 
    115     SmsDialogRunInfo *ri = data; 
    116  
    117     /* shutdown_loop will be called by run_unmap_handler */ 
    118  
    119     ri->destroyed = TRUE; 
     105  SmsDialogRunInfo *ri = data; 
     106 
     107  shutdown_loop (ri); 
     108 
     109  return TRUE; /* Do not destroy */ 
     110} 
     111 
     112static void 
     113run_destroy_handler (SmsDialogWindow* dialog, gpointer data) 
     114{ 
     115  SmsDialogRunInfo *ri = data; 
     116 
     117  /* shutdown_loop will be called by run_unmap_handler */ 
     118 
     119  ri->destroyed = TRUE; 
    120120} 
    121121 
     
    124124sms_dialog_window_dispose(GObject* object) 
    125125{ 
    126     if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose) 
    127         G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object); 
     126  if (G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose) 
     127    G_OBJECT_CLASS (sms_dialog_window_parent_class)->dispose (object); 
    128128} 
    129129 
     
    131131sms_dialog_window_finalize(GObject* object) 
    132132{ 
    133     G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object); 
     133  G_OBJECT_CLASS (sms_dialog_window_parent_class)->finalize (object); 
    134134} 
    135135 
     
    137137sms_dialog_window_class_init(SmsDialogWindowClass* klass) 
    138138{ 
    139     GObjectClass* object_class = G_OBJECT_CLASS(klass); 
    140  
    141     g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate)); 
    142  
    143     object_class->dispose = sms_dialog_window_dispose; 
    144     object_class->finalize = sms_dialog_window_finalize; 
     139  GObjectClass* object_class = G_OBJECT_CLASS(klass); 
     140 
     141  g_type_class_add_private (klass, sizeof(SmsDialogWindowPrivate)); 
     142 
     143  object_class->dispose = sms_dialog_window_dispose; 
     144  object_class->finalize = sms_dialog_window_finalize; 
    145145} 
    146146 
     
    148148sms_dialog_window_new(void) 
    149149{ 
    150     return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL); 
     150  return g_object_new(SMS_TYPE_DIALOG_WINDOW, NULL); 
    151151} 
    152152 
     
    154154sms_dialog_window_init(SmsDialogWindow* self) 
    155155{ 
    156     MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 
    157     if ( parent ) 
    158     { 
    159         gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 
     156  MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 
     157  if ( parent ) 
     158    { 
     159      gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 
    160160#ifndef DEBUG_THIS_FILE 
    161         gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 
     161      gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 
    162162#endif 
    163         gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 
     163      gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 
    164164    } 
    165165} 
     
    167167void sms_dialog_window_set_title(SmsDialogWindow* self, const gchar* title) 
    168168{ 
    169     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    170     if ( !priv->titleLabel ) 
    171     { 
    172         priv->titleLabel = gtk_label_new( title ); 
    173         priv->hbox = gtk_hbox_new( FALSE, 0 ); 
    174         gtk_window_set_title( GTK_WINDOW(self), title ); 
    175         gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
    176         gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 ); 
    177         PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10"); 
    178         priv->textInLabel = gtk_label_new( "160(1)" ); 
    179         gtk_widget_modify_font (priv->textInLabel, font_desc); 
    180         gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" ); 
    181         gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0); 
    182         priv->eventbox = gtk_event_box_new(); 
    183         gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) ); 
    184         gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
    185         //FIXME get from theme 
    186         gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
    187         gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
    188         gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
    189     } 
    190     else 
    191     { 
    192         gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 
    193         gtk_window_set_title( GTK_WINDOW(self), title ); 
    194     } 
    195     if ( !priv->vbox ) 
    196     { 
    197         GtkWidget* image; 
    198         GtkWidget* smsSendBtn; 
    199         GtkWidget* emailBtn; 
    200                  
    201         priv->vbox = gtk_vbox_new( FALSE, 0 ); 
    202         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
    203          
    204         //Add toolbox 
    205         priv->hbox = gtk_hbox_new( FALSE, 0 ); 
    206         priv->toolbox = moko_tool_box_new(); 
    207         GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 
    208         priv->closebutton = moko_pixmap_button_new(); 
    209         image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 
    210         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 
    211         gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 
    212         gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280); 
    213         g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 
    214  
    215         emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
    216         gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" ); 
    217         image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 
    218         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image); 
    219          
    220         smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
    221         gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 
    222         image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 
    223         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 
    224          
    225         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 
    226         gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
    227          
    228         //Fill input entry 
    229         GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    230         gtk_alignment_set_padding (alignment, 10, 10, 50, 10); 
    231         GtkWidget* entrybox = gtk_hbox_new(FALSE,0); 
    232         GtkWidget* toLabel = gtk_label_new("To:"); 
    233         gtk_widget_set_size_request (toLabel, 40, -1); 
    234         gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5); 
    235         priv->toEntry = gtk_entry_new(); 
    236         gtk_widget_set_size_request (priv->toEntry, 320, -1); 
    237         gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0); 
    238         gtk_box_pack_start (GTK_BOX(entrybox),priv->toEntry,FALSE,TRUE,0); 
    239         gtk_container_add (GTK_CONTAINER(alignment), entrybox); 
    240         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
    241                      
    242         /* fill textview */ 
    243         priv->txtView = gtk_text_view_new(); 
    244         GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    245         gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 
    246         GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 
    247         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 
    248         GtkWidget*  viewport = gtk_viewport_new (NULL, NULL); 
    249         gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR); 
    250         gtk_container_add (GTK_CONTAINER(viewport), priv->txtView); 
    251         gtk_container_add (GTK_CONTAINER (scolwin), viewport); 
    252         gtk_container_add (GTK_CONTAINER(viewAlign),scolwin); 
    253         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 
    254         gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
    255  
    256         g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event", 
    257                            G_CALLBACK (on_sms_txtView_key_release_event), 
    258                            self); 
     169  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     170  if ( !priv->titleLabel ) 
     171    { 
     172      priv->titleLabel = gtk_label_new( title ); 
     173      priv->hbox = gtk_hbox_new( FALSE, 0 ); 
     174      gtk_window_set_title( GTK_WINDOW(self), title ); 
     175      gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
     176      gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->titleLabel), TRUE, TRUE, 0 ); 
     177      PangoFontDescription* font_desc = pango_font_description_from_string ("Bold 10"); 
     178      priv->textInLabel = gtk_label_new( "160(1)" ); 
     179      gtk_widget_modify_font (priv->textInLabel, font_desc); 
     180      gtk_widget_set_name( GTK_WIDGET(priv->textInLabel), "mokodialogwindow-title-label" ); 
     181      gtk_box_pack_start( GTK_BOX(priv->hbox), GTK_WIDGET(priv->textInLabel), FALSE, FALSE, 0); 
     182      priv->eventbox = gtk_event_box_new(); 
     183      gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) ); 
     184      gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
     185      //FIXME get from theme 
     186      gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
     187      gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
     188      gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
     189    } 
     190  else 
     191    { 
     192      gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 
     193      gtk_window_set_title( GTK_WINDOW(self), title ); 
     194    } 
     195  if ( !priv->vbox ) 
     196    { 
     197      GtkWidget* image; 
     198      GtkWidget* smsSendBtn; 
     199      GtkWidget* emailBtn; 
     200 
     201      priv->vbox = gtk_vbox_new( FALSE, 0 ); 
     202      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
     203 
     204      //Add toolbox 
     205      priv->hbox = gtk_hbox_new( FALSE, 0 ); 
     206      priv->toolbox = moko_tool_box_new(); 
     207      GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 
     208      priv->closebutton = moko_pixmap_button_new(); 
     209      image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 
     210      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 
     211      gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 
     212      gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE,280); 
     213      g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 
     214 
     215      self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
     216      gtk_widget_set_name( GTK_WIDGET(self->addressBtn ), "mokostylusbutton-white" ); 
     217      image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 
     218      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn ),image); 
     219 
     220      smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
     221      gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 
     222      image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 
     223      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 
     224 
     225      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 
     226      gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
     227 
     228      //Fill input entry 
     229      GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     230      gtk_alignment_set_padding (alignment, 10, 10, 50, 10); 
     231      GtkWidget* entrybox = gtk_hbox_new(FALSE,0); 
     232      GtkWidget* toLabel = gtk_label_new("To:"); 
     233      gtk_widget_set_size_request (toLabel, 40, -1); 
     234      gtk_misc_set_alignment (GTK_MISC (toLabel),1,0.5); 
     235      self->toEntry = gtk_entry_new(); 
     236      gtk_widget_set_size_request (self->toEntry, 320, -1); 
     237      gtk_box_pack_start (GTK_BOX(entrybox),toLabel,FALSE,TRUE,0); 
     238      gtk_box_pack_start (GTK_BOX(entrybox),self->toEntry,FALSE,TRUE,0); 
     239      gtk_container_add (GTK_CONTAINER(alignment), entrybox); 
     240      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
     241 
     242      /* fill textview */ 
     243      priv->txtView = gtk_text_view_new(); 
     244      GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     245      gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 
     246      GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 
     247      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 
     248      GtkWidget*  viewport = gtk_viewport_new (NULL, NULL); 
     249      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(priv->txtView),GTK_WRAP_CHAR); 
     250      gtk_container_add (GTK_CONTAINER(viewport), priv->txtView); 
     251      gtk_container_add (GTK_CONTAINER (scolwin), viewport); 
     252      gtk_container_add (GTK_CONTAINER(viewAlign),scolwin); 
     253      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 
     254      gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
     255 
     256      g_signal_connect ( G_OBJECT(priv->txtView), "key_release_event", 
     257                         G_CALLBACK (on_sms_txtView_key_release_event), 
     258                         self); 
    259259    } 
    260260} 
     
    262262void mail_dialog_window_set_title(SmsDialogWindow* self, const gchar* title) 
    263263{ 
    264     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    265     if ( !priv->titleLabel ) { 
    266         priv->titleLabel = gtk_label_new( title ); 
    267         gtk_window_set_title( GTK_WINDOW(self), title ); 
    268         gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
    269         priv->eventbox = gtk_event_box_new(); 
    270         gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->hbox) ); 
    271         gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
    272         //FIXME get from theme 
    273         gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
    274         gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel); 
    275         gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
    276         gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
    277     } 
    278     else{ 
    279         gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 
    280         gtk_window_set_title( GTK_WINDOW(self), title ); 
    281     } 
    282     if ( !priv->vbox ){ 
    283         GtkWidget* image; 
    284         GtkWidget* smsSendBtn; 
    285         GtkWidget* emailBtn; 
    286         GtkWidget* attachBtn; 
    287                  
    288         priv->vbox = gtk_vbox_new( FALSE, 0 ); 
    289         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
    290          
    291         //Add toolbox 
    292         priv->hbox = gtk_hbox_new( FALSE, 0 ); 
    293         priv->toolbox = moko_tool_box_new(); 
    294         GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 
    295         priv->closebutton = moko_pixmap_button_new(); 
    296         image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 
    297         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 
    298         gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 
    299         gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200); 
    300         g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 
    301  
    302         attachBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
    303         gtk_widget_set_name( GTK_WIDGET(attachBtn), "mokostylusbutton-white" ); 
    304         image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 
    305         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(attachBtn),image); 
    306          
    307         emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
    308         gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" ); 
    309         image = gtk_image_new_from_file (PKGDATADIR "/Attached.png"); 
    310         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image); 
    311          
    312         smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
    313         gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 
    314         image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 
    315         moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 
    316          
    317         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 
    318         gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
    319          
    320         //Fill input entry 
    321         GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    322         gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
    323         GtkWidget* hbox = gtk_hbox_new(FALSE,0); 
    324         PangoFontDescription* font_desc; 
    325         font_desc = pango_font_description_from_string ("Bold 12"); 
    326         GtkWidget* toLabel = gtk_label_new("To:"); 
    327         gtk_widget_modify_font (toLabel, font_desc); 
    328         gtk_widget_set_size_request (toLabel, 110, -1); 
    329         gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5); 
    330         priv->toEntry = gtk_entry_new(); 
    331         gtk_widget_set_size_request (priv->toEntry, 320, -1); 
    332         gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0); 
    333         gtk_box_pack_start (GTK_BOX(hbox),priv->toEntry,FALSE,TRUE,0); 
    334         gtk_container_add (GTK_CONTAINER(alignment), hbox); 
    335         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
    336  
    337         alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    338         gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
    339         hbox = gtk_hbox_new(FALSE,0); 
    340         GtkWidget* ccLabel = gtk_label_new("CC:"); 
    341         font_desc = pango_font_description_from_string ("Bold 12"); 
    342         gtk_widget_set_size_request (ccLabel, 110, -1); 
    343         gtk_widget_modify_font (ccLabel, font_desc); 
    344         gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5); 
    345         GtkWidget* ccEntry = gtk_entry_new(); 
    346         gtk_widget_set_size_request (ccEntry, 320, -1); 
    347         gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 
    348         gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 
    349         gtk_container_add (GTK_CONTAINER(alignment), hbox); 
    350         gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
    351          
    352         alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    353         gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
    354         hbox = gtk_hbox_new(FALSE,0); 
    355         GtkWidget* bccLabel = gtk_label_new("Bcc:"); 
    356         font_desc = pango_font_description_from_string ("Bold 12"); 
    357         gtk_widget_set_size_request (bccLabel, 110, -1); 
    358         gtk_widget_modify_font (bccLabel, font_desc); 
    359         gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5); 
    360         GtkWidget* bccEntry = gtk_entry_new(); 
    361         gtk_widget_set_size_request (bccEntry, 320, -1); 
    362         gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 
    363         gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 
    364         gtk_container_add (GTK_CONTAINER(alignment), hbox); 
    365         gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
    366  
    367         alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    368         gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
    369         hbox = gtk_hbox_new(FALSE,0); 
    370         GtkWidget* subjectLabel = gtk_label_new("Subject:"); 
    371         font_desc = pango_font_description_from_string ("Bold 12"); 
    372         gtk_widget_modify_font (subjectLabel, font_desc); 
    373         gtk_widget_set_size_request (subjectLabel, 110, -1); 
    374         gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5); 
    375         GtkWidget* subjectEntry = gtk_entry_new(); 
    376         gtk_widget_set_size_request (subjectEntry, 320, -1); 
    377         gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 
    378         gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 
    379         gtk_container_add (GTK_CONTAINER(alignment), hbox); 
    380         gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
    381  
    382         /* fill textview */ 
    383         GtkWidget* txtView = gtk_text_view_new(); 
    384         GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    385         gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 
    386         GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 
    387         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 
    388         GtkWidget*  viewport = gtk_viewport_new (NULL, NULL); 
    389         gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR); 
    390         gtk_container_add (GTK_CONTAINER(viewport), txtView); 
    391         gtk_container_add (GTK_CONTAINER (scolwin), viewport); 
    392         gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin)); 
    393         gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 
    394         gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
     264  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     265  if ( !priv->titleLabel ) 
     266    { 
     267      priv->titleLabel = gtk_label_new( title ); 
     268      gtk_window_set_title( GTK_WINDOW(self), title ); 
     269      gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
     270      priv->eventbox = gtk_event_box_new(); 
     271      gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
     272      //FIXME get from theme 
     273      gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
     274      gtk_container_add (GTK_CONTAINER(priv->eventbox), priv->titleLabel); 
     275      gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
     276      gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
     277    } 
     278  else 
     279    { 
     280      gtk_label_set_text( GTK_LABEL(priv->titleLabel), title ); 
     281      gtk_window_set_title( GTK_WINDOW(self), title ); 
     282    } 
     283  if ( !priv->vbox ) 
     284    { 
     285      GtkWidget* image; 
     286      GtkWidget* smsSendBtn; 
     287      GtkWidget* emailBtn; 
     288 
     289      priv->vbox = gtk_vbox_new( FALSE, 0 ); 
     290      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
     291 
     292      //Add toolbox 
     293      priv->hbox = gtk_hbox_new( FALSE, 0 ); 
     294      priv->toolbox = moko_tool_box_new(); 
     295      GtkWidget* btnBox = moko_tool_box_get_button_box (MOKO_TOOL_BOX(priv->toolbox)); 
     296      priv->closebutton = moko_pixmap_button_new(); 
     297      image = gtk_image_new_from_file (PKGDATADIR "/Cancel.png"); 
     298      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(priv->closebutton),image); 
     299      gtk_widget_set_name( GTK_WIDGET(priv->closebutton), "mokostylusbutton-black" ); 
     300      gtk_box_pack_end (GTK_BOX(btnBox),priv->closebutton,FALSE,FALSE, 200); 
     301      g_signal_connect_swapped( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_dialog_window_close), self ); 
     302 
     303      self->addressBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
     304      gtk_widget_set_name( GTK_WIDGET(self->addressBtn), "mokostylusbutton-white" ); 
     305      image = gtk_image_new_from_file (PKGDATADIR "/Address.png"); 
     306      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(self->addressBtn),image); 
     307 
     308      emailBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
     309      gtk_widget_set_name( GTK_WIDGET(emailBtn), "mokostylusbutton-white" ); 
     310      image = gtk_image_new_from_file (PKGDATADIR "/Attached.png"); 
     311      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(emailBtn),image); 
     312 
     313      smsSendBtn = moko_tool_box_add_action_button (MOKO_TOOL_BOX(priv->toolbox)); 
     314      gtk_widget_set_name( GTK_WIDGET(smsSendBtn), "mokostylusbutton-white" ); 
     315      image = gtk_image_new_from_file (PKGDATADIR "/Send.png"); 
     316      moko_pixmap_button_set_center_image ( MOKO_PIXMAP_BUTTON(smsSendBtn),image); 
     317 
     318      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->toolbox), FALSE, FALSE, 0 ); 
     319      gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
     320 
     321      //Fill input entry 
     322      GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     323      gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
     324      GtkWidget* hbox = gtk_hbox_new(FALSE,0); 
     325      PangoFontDescription* font_desc; 
     326      font_desc = pango_font_description_from_string ("Bold 12"); 
     327      GtkWidget* toLabel = gtk_label_new("To:"); 
     328      gtk_widget_modify_font (toLabel, font_desc); 
     329      gtk_widget_set_size_request (toLabel, 110, -1); 
     330      gtk_misc_set_alignment (GTK_MISC (toLabel),0.9,0.5); 
     331      self->toEntry = gtk_entry_new(); 
     332      gtk_widget_set_size_request (self->toEntry, 320, -1); 
     333      gtk_box_pack_start (GTK_BOX(hbox),toLabel,FALSE,TRUE,0); 
     334      gtk_box_pack_start (GTK_BOX(hbox),self->toEntry,FALSE,TRUE,0); 
     335      gtk_container_add (GTK_CONTAINER(alignment), hbox); 
     336      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
     337 
     338      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     339      gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
     340      hbox = gtk_hbox_new(FALSE,0); 
     341      GtkWidget* ccLabel = gtk_label_new("CC:"); 
     342      font_desc = pango_font_description_from_string ("Bold 12"); 
     343      gtk_widget_set_size_request (ccLabel, 110, -1); 
     344      gtk_widget_modify_font (ccLabel, font_desc); 
     345      gtk_misc_set_alignment (GTK_MISC (ccLabel),0.9,0.5); 
     346      GtkWidget* ccEntry = gtk_entry_new(); 
     347      gtk_widget_set_size_request (ccEntry, 320, -1); 
     348      gtk_box_pack_start (GTK_BOX(hbox),ccLabel,FALSE,TRUE,0); 
     349      gtk_box_pack_start (GTK_BOX(hbox),ccEntry,FALSE,TRUE,0); 
     350      gtk_container_add (GTK_CONTAINER(alignment), hbox); 
     351      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
     352 
     353      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     354      gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
     355      hbox = gtk_hbox_new(FALSE,0); 
     356      GtkWidget* bccLabel = gtk_label_new("Bcc:"); 
     357      font_desc = pango_font_description_from_string ("Bold 12"); 
     358      gtk_widget_set_size_request (bccLabel, 110, -1); 
     359      gtk_widget_modify_font (bccLabel, font_desc); 
     360      gtk_misc_set_alignment (GTK_MISC (bccLabel),0.9,0.5); 
     361      GtkWidget* bccEntry = gtk_entry_new(); 
     362      gtk_widget_set_size_request (bccEntry, 320, -1); 
     363      gtk_box_pack_start (GTK_BOX(hbox),bccLabel,FALSE,TRUE,0); 
     364      gtk_box_pack_start (GTK_BOX(hbox),bccEntry,FALSE,TRUE,0); 
     365      gtk_container_add (GTK_CONTAINER(alignment), hbox); 
     366      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
     367 
     368      alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     369      gtk_alignment_set_padding (alignment, 5, 5, 10, 10); 
     370      hbox = gtk_hbox_new(FALSE,0); 
     371      GtkWidget* subjectLabel = gtk_label_new("Subject:"); 
     372      font_desc = pango_font_description_from_string ("Bold 12"); 
     373      gtk_widget_modify_font (subjectLabel, font_desc); 
     374      gtk_widget_set_size_request (subjectLabel, 110, -1); 
     375      gtk_misc_set_alignment (GTK_MISC (subjectLabel),0.9,0.5); 
     376      GtkWidget* subjectEntry = gtk_entry_new(); 
     377      gtk_widget_set_size_request (subjectEntry, 320, -1); 
     378      gtk_box_pack_start (GTK_BOX(hbox),subjectLabel,FALSE,TRUE,0); 
     379      gtk_box_pack_start (GTK_BOX(hbox),subjectEntry,FALSE,TRUE,0); 
     380      gtk_container_add (GTK_CONTAINER(alignment), hbox); 
     381      gtk_box_pack_start (GTK_BOX(priv->vbox),GTK_WIDGET(alignment),FALSE,TRUE,0); 
     382 
     383      /* fill textview */ 
     384      GtkWidget* txtView = gtk_text_view_new(); 
     385      GtkWidget* viewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     386      gtk_alignment_set_padding (GTK_ALIGNMENT(viewAlign),10,10,30,30); 
     387      GtkWidget* scolwin = gtk_scrolled_window_new (NULL, NULL); 
     388      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scolwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); 
     389      GtkWidget*  viewport = gtk_viewport_new (NULL, NULL); 
     390      gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(txtView),GTK_WRAP_CHAR); 
     391      gtk_container_add (GTK_CONTAINER(viewport), txtView); 
     392      gtk_container_add (GTK_CONTAINER (scolwin), viewport); 
     393      gtk_container_add (GTK_CONTAINER(viewAlign),GTK_WIDGET(scolwin)); 
     394      gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(viewAlign), TRUE, TRUE, 0 ); 
     395      gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
    395396    } 
    396397} 
     
    398399void sms_dialog_window_set_contents(SmsDialogWindow* self, GtkWidget* contents) 
    399400{ 
    400      SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    401      g_return_if_fail( priv->vbox ); 
    402      gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 ); 
     401  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     402  g_return_if_fail( priv->vbox ); 
     403  gtk_box_pack_start( GTK_BOX(priv->vbox), contents, TRUE, TRUE, 0 ); 
    403404} 
    404405 
    405406static void sms_dialog_window_close(SmsDialogWindow* self) 
    406407{ 
    407      /* Synthesize delete_event to close dialog. */ 
    408  
    409      GtkWidget *widget = GTK_WIDGET(self); 
    410      GdkEvent *event; 
    411  
    412      event = gdk_event_new( GDK_DELETE ); 
    413  
    414      event->any.window = g_object_ref(widget->window); 
    415      event->any.send_event = TRUE; 
    416  
    417      gtk_main_do_event( event ); 
    418      gdk_event_free( event ); 
    419 } 
    420  
    421 guint sms_dialog_window_run(SmsDialogWindow* dialog) 
    422 { 
    423     SmsDialogRunInfo ri = { NULL, GTK_RESPONSE_NONE, NULL, FALSE }; 
    424     gboolean was_modal; 
    425     gulong response_handler; 
    426     gulong unmap_handler; 
    427     gulong destroy_handler; 
    428     gulong delete_handler; 
    429  
    430     g_return_val_if_fail (SMS_IS_DIALOG_WINDOW(dialog), -1); 
    431  
    432     g_object_ref (dialog); 
    433  
    434 #ifndef DEBUG_THIS_FILE 
    435     was_modal = GTK_WINDOW (dialog)->modal; 
    436     if (!was_modal) 
    437         gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); 
    438 #endif 
    439  
    440     if (!GTK_WIDGET_VISIBLE (dialog)) 
    441         gtk_widget_show (GTK_WIDGET (dialog)); 
    442  
    443     response_handler = 
    444             g_signal_connect (dialog, 
    445                               "response", 
    446                               G_CALLBACK (run_response_handler), 
    447                               &ri); 
    448  
    449     unmap_handler = 
    450             g_signal_connect (dialog, 
    451                               "unmap", 
    452                               G_CALLBACK (run_unmap_handler), 
    453                               &ri); 
    454  
    455     delete_handler = 
    456             g_signal_connect (dialog, 
    457                               "delete-event", 
    458                               G_CALLBACK (run_delete_handler), 
    459                               &ri); 
    460  
    461     destroy_handler = 
    462             g_signal_connect (dialog, 
    463                               "destroy", 
    464                               G_CALLBACK (run_destroy_handler), 
    465                               &ri); 
    466  
    467     ri.loop = g_main_loop_new (NULL, FALSE); 
    468  
    469     GDK_THREADS_LEAVE (); 
    470     g_main_loop_run (ri.loop); 
    471     GDK_THREADS_ENTER (); 
    472  
    473     g_main_loop_unref (ri.loop); 
    474     ri.loop = NULL; 
    475  
    476     if (!ri.destroyed) 
    477     { 
    478         if (!was_modal) 
    479             gtk_window_set_modal (GTK_WINDOW(dialog), FALSE); 
    480  
    481         g_signal_handler_disconnect (dialog, response_handler); 
    482         g_signal_handler_disconnect (dialog, unmap_handler); 
    483         g_signal_handler_disconnect (dialog, delete_handler); 
    484         g_signal_handler_disconnect (dialog, destroy_handler); 
    485     } 
    486  
    487     g_object_unref (dialog); 
    488  
    489     return ri.response_id; 
     408  /* Synthesize delete_event to close dialog. */ 
     409 
     410  GtkWidget *widget = GTK_WIDGET(self); 
     411  GdkEvent *event; 
     412 
     413  event = gdk_event_new( GDK_DELETE ); 
     414 
     415  event->any.window = g_object_ref(widget->window); 
     416  event->any.send_event = TRUE; 
     417 
     418  gtk_main_do_event( event ); 
     419  gdk_event_free( event ); 
    490420} 
    491421 
    492422void sms_dialog_reply_message(SmsDialogWindow* self, message* msg) 
    493423{ 
    494     g_assert (msg != NULL); 
    495     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    496     gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name); 
    497     gtk_widget_grab_focus (priv->txtView); 
     424  g_assert (msg != NULL); 
     425  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     426  gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name); 
     427  gtk_widget_grab_focus (priv->txtView); 
    498428} 
    499429 
    500430void sms_dialog_forward_message(SmsDialogWindow* self, message* msg) 
    501431{ 
    502     g_assert (msg != NULL); 
    503     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    504     gtk_entry_set_text (GTK_ENTRY(priv->toEntry), msg->name); 
    505     g_assert (priv->txtView != NULL); 
    506     GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 
    507     gchar* text = g_strdup_printf("\n\n\n>%s",msg->content); 
    508     gtk_text_buffer_set_text (buffer, text, strlen(text)); 
    509     gtk_widget_grab_focus (priv->txtView); 
     432  g_assert (msg != NULL); 
     433  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     434  gtk_entry_set_text (GTK_ENTRY(self->toEntry), msg->name); 
     435  g_assert (priv->txtView != NULL); 
     436  GtkTextBuffer* buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 
     437  gchar* text = g_strdup_printf("\n\n\n>%s",msg->content); 
     438  gtk_text_buffer_set_text (buffer, text, strlen(text)); 
     439  gtk_widget_grab_focus (priv->txtView); 
    510440} 
    511441 
    512442gboolean on_sms_txtView_key_release_event       (GtkWidget       *widget, 
    513443                                                 GdkEventKey     *event, 
    514                                                  SmsDialogWindow *self) 
    515 { 
    516     SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
    517     GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 
    518     gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160; 
    519     gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1; 
    520     gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m)); 
    521     return FALSE; 
    522 } 
    523  
     444                                                 SmsDialogWindow *self) 
     445{ 
     446  SmsDialogWindowPrivate* priv = SMS_DIALOG_WINDOW_GET_PRIVATE(self); 
     447  GtkTextBuffer * buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->txtView)); 
     448  gint n = 160 - gtk_text_buffer_get_char_count(buffer)%160; 
     449  gint m = gtk_text_buffer_get_char_count(buffer)/160 + 1; 
     450  gtk_label_set_text(GTK_LABEL(priv->textInLabel),g_strdup_printf("%d(%d)",n,m)); 
     451  return FALSE; 
     452} 
     453 
     454 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-dialog-window.h

    r911 r1516  
    1 /*   
     1/* 
    22 *  sms-dialog-window.h 
    33 *   
     
    1717 *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 
    1818 */ 
    19   
     19 
    2020#ifndef _SMS_DIALOG_WINDOW_H_ 
    2121#define _SMS_DIALOG_WINDOW_H_ 
     
    3636#define SMS_DIALOG_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),   SMS_TYPE_DIALOG_WINDOW, SmsDialogWindowClass)) 
    3737 
    38 typedef struct { 
    39     MokoWindow parent; 
    40 } SmsDialogWindow; 
     38typedef struct 
     39{  
     40  MokoWindow parent; 
     41  GtkWidget* addressBtn; 
     42  GtkWidget* toEntry; 
     43} 
     44SmsDialogWindow; 
    4145 
    42 typedef struct { 
    43     MokoWindowClass parent_class; 
    44 } SmsDialogWindowClass; 
     46typedef struct 
     47{ 
     48  MokoWindowClass parent_class; 
     49} 
     50SmsDialogWindowClass; 
    4551 
    4652GType sms_dialog_window_get_type(); 
     
    5258void sms_dialog_reply_message(SmsDialogWindow* self, message* msg); 
    5359void sms_dialog_forward_message(SmsDialogWindow* self, message* msg); 
    54 guint sms_dialog_window_run(SmsDialogWindow* self); 
    5560 
    5661G_END_DECLS 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.c

    r1452 r1516  
    1 /*   
     1/* 
    22 *  sms-membership-window.c 
    33 *   
     
    1717 *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 
    1818 */ 
    19   
     19 
    2020#include "sms-membership-window.h" 
    2121#include <libmokoui/moko-pixmap-button.h> 
     
    3737 
    3838typedef struct _SmsMembershipWindowPrivate SmsMembershipWindowPrivate; 
     39typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, 
     40    GtkTreeIter *iter, 
     41    gpointer data); 
    3942 
    4043struct _SmsMembershipWindowPrivate 
    41 { 
     44  { 
    4245    GtkWidget* vbox; 
    4346    GtkWidget* hbox; 
     
    5760    GtkListStore* liststore; 
    5861    GSList* rdoBtnList; 
    59 }; 
     62  }; 
    6063 
    6164typedef struct _SmsMembershipRunInfo 
    62 { 
     65  { 
    6366    SmsMembershipWindow *dialog; 
    6467    gint response_id; 
    6568    GMainLoop *loop; 
    6669    gboolean destroyed; 
    67 } SmsMembershipRunInfo; 
     70  } 
     71SmsMembershipRunInfo; 
    6872 
    6973static void sms_membership_window_close(SmsMembershipWindow* self); 
     
    7983sms_membership_window_dispose(GObject* object) 
    8084{ 
    81     if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose) 
    82         G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object); 
     85  if (G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose) 
     86    G_OBJECT_CLASS (sms_membership_window_parent_class)->dispose (object); 
    8387} 
    8488 
     
    8690sms_membership_window_finalize(GObject* object) 
    8791{ 
    88     G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object); 
     92  G_OBJECT_CLASS (sms_membership_window_parent_class)->finalize (object); 
    8993} 
    9094 
     
    9296sms_membership_window_class_init(SmsMembershipWindowClass* klass) 
    9397{ 
    94     GObjectClass* object_class = G_OBJECT_CLASS(klass); 
    95  
    96     g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate)); 
    97  
    98     object_class->dispose = sms_membership_window_dispose; 
    99     object_class->finalize = sms_membership_window_finalize; 
     98  GObjectClass* object_class = G_OBJECT_CLASS(klass); 
     99 
     100  g_type_class_add_private (klass, sizeof(SmsMembershipWindowPrivate)); 
     101 
     102  object_class->dispose = sms_membership_window_dispose; 
     103  object_class->finalize = sms_membership_window_finalize; 
    100104} 
    101105 
     
    103107sms_membership_window_new(void) 
    104108{ 
    105     return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL)); 
     109  return GTK_WIDGET(g_object_new(SMS_TYPE_MEMBERSHIP_WINDOW, NULL)); 
    106110} 
    107111 
    108112static void sms_membership_window_close(SmsMembershipWindow* self) 
    109113{ 
    110     GtkWidget *widget = GTK_WIDGET(self); 
    111     GdkEvent *event; 
    112  
    113     event = gdk_event_new( GDK_DELETE ); 
    114  
    115     event->any.window = g_object_ref(widget->window); 
    116     event->any.send_event = TRUE; 
    117  
    118     gtk_main_do_event( event ); 
    119     gdk_event_free( event ); 
     114  GtkWidget *widget = GTK_WIDGET(self); 
     115  GdkEvent *event; 
     116 
     117  event = gdk_event_new( GDK_DELETE ); 
     118 
     119  event->any.window = g_object_ref(widget->window); 
     120  event->any.send_event = TRUE; 
     121 
     122  gtk_main_do_event( event ); 
     123  gdk_event_free( event ); 
    120124} 
    121125 
    122126gboolean membership_filter_changed(GtkWidget* widget, gchar* text, SmsMembershipWindow* self) 
    123127{ 
    124     g_debug("changed to %s folder",text); 
    125     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
    126     self->currentfolder = g_strdup(text); 
    127     gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 
    128      
    129     return FALSE; 
    130 } 
    131  
    132 void sms_membership_window_show (SmsMembershipWindow* self){ 
    133         GtkWidget *widget = GTK_WIDGET(self); 
    134         gtk_widget_show (widget); 
     128  g_debug("changed to %s folder",text); 
     129  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     130  self->currentfolder = g_strdup(text); 
     131  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 
     132 
     133  return FALSE; 
     134} 
     135 
     136void sms_membership_window_show (SmsMembershipWindow* self) 
     137{ 
     138  GtkWidget *widget = GTK_WIDGET(self); 
     139  gtk_widget_show (widget); 
    135140} 
    136141 
     
    138143sms_membership_window_init(SmsMembershipWindow* self) 
    139144{ 
    140     MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 
    141     if ( parent ) 
    142     { 
    143         gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 
     145  MokoWindow* parent = (MokoWindow*)moko_application_get_main_window( moko_application_get_instance() ); 
     146  if ( parent ) 
     147    { 
     148      gtk_window_set_transient_for( GTK_WINDOW(self), GTK_WINDOW(parent) ); 
    144149#ifndef DEBUG_THIS_FILE 
    145         gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 
     150      gtk_window_set_modal( GTK_WINDOW(self), TRUE ); 
    146151#endif 
    147         gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 
    148     } 
    149      
    150     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
    151     self->currentfolder = g_strdup("Inbox"); 
    152     //Set title 
    153     priv->liststore = NULL; 
    154     priv->vbox = gtk_vbox_new( FALSE, 0 ); 
    155      
    156     priv->menubox = moko_menu_box_new(); 
    157     gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 ); 
    158      
    159     priv->titleLabel = gtk_label_new( "Message Membership" ); 
    160     gtk_window_set_title( GTK_WINDOW(self), "Message Membership" ); 
    161     gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
    162     priv->eventbox = gtk_event_box_new(); 
    163     gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) ); 
    164     gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
    165  
    166     //FIXME get from theme 
    167     gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
    168     gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
    169     gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
    170     gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
    171     priv->folderbox = gtk_vbox_new( FALSE, 0 ); 
    172  
    173     //Set folder list 
    174     GtkWidget* closebox = gtk_hbox_new( FALSE, 0 ); 
    175     PangoFontDescription* font_desc; 
    176                 font_desc = pango_font_description_from_string ("bold 12"); 
    177     priv->fromLabel = gtk_label_new( "AlexTang" ); 
    178     gtk_widget_modify_font (priv->fromLabel, font_desc); 
    179     gtk_widget_set_size_request (priv->fromLabel, 250, -1); 
    180     gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5); 
    181     priv->subjectLabel = gtk_label_new( "Subject" ); 
    182     gtk_widget_set_size_request (priv->subjectLabel, 250, -1); 
    183     gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5); 
    184      
    185     //set header box: two labels and a closebutton 
    186     GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 ); 
    187     gtk_box_set_spacing (GTK_BOX(headerbox),5); 
    188     priv->closebutton = gtk_button_new_with_label ("Close"); 
    189     gtk_widget_set_size_request (priv->closebutton, -1, 38); 
    190     GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    191     gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 
    192     gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton); 
    193     GtkWidget* hsep = gtk_hseparator_new(); 
    194     gtk_widget_set_size_request (hsep, -1, 3); 
    195  
    196     //set folder box alignment fbAlign 
    197     GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    198     gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30); 
    199     gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) ); 
    200            
    201     gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 ); 
    202     gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 ); 
    203     gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 ); 
    204     gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
    205     gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 ); 
    206     gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 ); 
    207     gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 ); 
    208      
    209     gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
    210     gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
    211     g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self ); 
    212     g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self ); 
    213      
     152      gtk_window_set_destroy_with_parent( GTK_WINDOW(self), TRUE ); 
     153    } 
     154 
     155  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     156  self->currentfolder = g_strdup("Inbox"); 
     157  //Set title 
     158  priv->liststore = NULL; 
     159  priv->vbox = gtk_vbox_new( FALSE, 0 ); 
     160 
     161  priv->menubox = moko_menu_box_new(); 
     162  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->menubox), FALSE, FALSE, 0 ); 
     163 
     164  priv->titleLabel = gtk_label_new( "Message Membership" ); 
     165  gtk_window_set_title( GTK_WINDOW(self), "Message Membership" ); 
     166  gtk_widget_set_name( GTK_WIDGET(priv->titleLabel), "mokodialogwindow-title-label" ); 
     167  priv->eventbox = gtk_event_box_new(); 
     168  gtk_container_add( GTK_CONTAINER(priv->eventbox), GTK_WIDGET(priv->titleLabel) ); 
     169  gtk_widget_set_name( GTK_WIDGET(priv->eventbox), "mokodialogwindow-title-labelbox" ); 
     170 
     171  //FIXME get from theme 
     172  gtk_misc_set_padding( GTK_MISC(priv->titleLabel), 0, 6 ); 
     173  gtk_widget_show( GTK_WIDGET(priv->titleLabel) ); 
     174  gtk_widget_show( GTK_WIDGET(priv->eventbox) ); 
     175  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(priv->eventbox), FALSE, FALSE, 0 ); 
     176  priv->folderbox = gtk_vbox_new( FALSE, 0 ); 
     177 
     178  //Set folder list 
     179  GtkWidget* closebox = gtk_hbox_new( FALSE, 0 ); 
     180  PangoFontDescription* font_desc; 
     181  font_desc = pango_font_description_from_string ("bold 12"); 
     182  priv->fromLabel = gtk_label_new( "AlexTang" ); 
     183  gtk_widget_modify_font (priv->fromLabel, font_desc); 
     184  gtk_widget_set_size_request (priv->fromLabel, 250, -1); 
     185  gtk_misc_set_alignment (GTK_MISC(priv->fromLabel), 0, 0.5); 
     186  priv->subjectLabel = gtk_label_new( "Subject" ); 
     187  gtk_widget_set_size_request (priv->subjectLabel, 250, -1); 
     188  gtk_misc_set_alignment (GTK_MISC(priv->subjectLabel), 0, 0.5); 
     189 
     190  //set header box: two labels and a closebutton 
     191  GtkWidget* headerbox = gtk_vbox_new( FALSE, 0 ); 
     192  gtk_box_set_spacing (GTK_BOX(headerbox),5); 
     193  priv->closebutton = gtk_button_new_with_label ("Close"); 
     194  gtk_widget_set_size_request (priv->closebutton, -1, 38); 
     195  GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     196  gtk_alignment_set_padding (alignment, 5, 5, 5, 5); 
     197  gtk_container_add (GTK_CONTAINER(alignment), priv->closebutton); 
     198  GtkWidget* hsep = gtk_hseparator_new(); 
     199  gtk_widget_set_size_request (hsep, -1, 3); 
     200 
     201  //set folder box alignment fbAlign 
     202  GtkAlignment* fbAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
     203  gtk_alignment_set_padding (fbAlign, 5, 5, 30, 30); 
     204  gtk_container_add( GTK_CONTAINER(fbAlign), GTK_WIDGET(priv->folderbox) ); 
     205 
     206  gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->fromLabel), TRUE, TRUE, 0 ); 
     207  gtk_box_pack_start( GTK_BOX(headerbox), GTK_WIDGET(priv->subjectLabel), TRUE, TRUE, 0 ); 
     208  gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(headerbox), TRUE, FALSE, 0 ); 
     209  gtk_box_pack_start( GTK_BOX(closebox), GTK_WIDGET(alignment), FALSE, FALSE, 0 ); 
     210  gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(closebox), FALSE, FALSE, 0 ); 
     211  gtk_box_pack_start( GTK_BOX(priv->folderbox), GTK_WIDGET(hsep), FALSE, FALSE, 0 ); 
     212  gtk_box_pack_start( GTK_BOX(priv->vbox), GTK_WIDGET(fbAlign), FALSE, FALSE, 0 ); 
     213 
     214  gtk_widget_show_all( GTK_WIDGET(priv->vbox) ); 
     215  gtk_container_add( GTK_CONTAINER(self), GTK_WIDGET(priv->vbox) ); 
     216  g_signal_connect_swapped ( G_OBJECT(priv->closebutton), "clicked", G_CALLBACK(sms_membership_window_close), self ); 
     217  g_signal_connect( G_OBJECT(priv->menubox), "filter_changed", G_CALLBACK(membership_filter_changed), self ); 
     218 
    214219} 
    215220 
    216221void membeship_rdo_btn_clicked ( GtkButton* button, SmsMembershipWindow* self) 
    217222{ 
    218     GtkTreeModel* model; 
    219     GtkTreeIter iter; 
    220     GtkTreeIter childiter; 
    221     GtkTreeSelection* selection; 
    222     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
    223            
    224     selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 
    225     gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 
    226     if (has_selection){ 
    227         gchar* folder; 
    228         gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1); 
    229         g_debug ("folder is %s",folder); 
    230         self->currentfolder = g_strdup(folder); 
    231         gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter); 
    232         gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1); 
    233         gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 
     223  GtkTreeModel* model; 
     224  GtkTreeIter iter; 
     225  GtkTreeIter childiter; 
     226  GtkTreeSelection* selection; 
     227  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     228 
     229  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 
     230  gboolean has_selection = gtk_tree_selection_get_selected (selection, &model,&iter); 
     231  if (has_selection) 
     232    { 
     233      gchar* folder; 
     234      gtk_tree_model_get (model, &iter, COLUMN_FOLDER, &folder, -1); 
     235      g_debug ("folder is %s",folder); 
     236      self->currentfolder = g_strdup(folder); 
     237      gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(priv->filter),&childiter,&iter); 
     238      gtk_list_store_set(priv->liststore, &childiter, COLUMN_FOLDER, gtk_button_get_label(button), -1); 
     239      gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER(priv->filter)); 
    234240    } 
    235241} 
     
    237243void sms_membership_window_set_menubox(SmsMembershipWindow* self, GSList* folderlist) 
    238244{ 
    239     GtkWidget* appmenu; 
    240     GtkWidget* filtmenu; 
    241      
    242     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self);    
    243      
    244     /* application menu */ 
    245     appmenu = NULL; 
    246     /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" )); 
    247     GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" )); 
    248     GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" )); 
    249     GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" )); 
    250     GtkWidget* sepitem = gtk_separator_menu_item_new();  
    251     GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" )); 
    252     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) ); 
    253     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) ); 
    254     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) ); 
    255     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) ); 
    256     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) ); 
    257     gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/ 
    258      
    259     GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ; 
    260     GtkWidget *rdo_btn = NULL; 
    261     GSList *rdo_btn_group; 
    262     GSList* c = folderlist; 
    263      
    264     filtmenu = gtk_menu_new(); 
    265     for (; c; c = g_slist_next(c) ){ 
    266         //add folder to filter menu 
    267         gchar* folder = (gchar*) c->data; 
    268         g_debug( "adding folder '%s'", folder ); 
    269         gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 
    270          
    271         //add folder to folder list 
    272         if(!g_strcasecmp(folder,"Inbox")){ 
    273             rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 
    274             rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 
    275             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 
     245  GtkWidget* appmenu; 
     246  GtkWidget* filtmenu; 
     247 
     248  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     249 
     250  /* application menu */ 
     251  appmenu = NULL; 
     252  /*GtkMenuItem* mmitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Message Membership" )); 
     253  GtkMenuItem* fnitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Folder Rename" )); 
     254  GtkMenuItem* accountitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Account" )); 
     255  GtkMenuItem* helpitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Help" )); 
     256  GtkWidget* sepitem = gtk_separator_menu_item_new();  
     257  GtkMenuItem* closeitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label( "Close" )); 
     258  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(mmitem) ); 
     259  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(fnitem) ); 
     260  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(accountitem) ); 
     261  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(helpitem) ); 
     262  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(sepitem) ); 
     263  gtk_menu_shell_append( GTK_MENU_SHELL(appmenu), GTK_WIDGET(closeitem) );*/ 
     264 
     265  GtkWidget* rdobtnbox = gtk_vbox_new(FALSE, 0) ; 
     266  GtkWidget *rdo_btn = NULL; 
     267  GSList *rdo_btn_group; 
     268  GSList* c = folderlist; 
     269 
     270  filtmenu = gtk_menu_new(); 
     271  for (; c; c = g_slist_next(c) ) 
     272    { 
     273      //add folder to filter menu 
     274      gchar* folder = (gchar*) c->data; 
     275      g_debug( "adding folder '%s'", folder ); 
     276      gtk_menu_shell_append( GTK_MENU_SHELL( filtmenu ), gtk_menu_item_new_with_label( folder ) ); 
     277 
     278      //add folder to folder list 
     279      if(!g_strcasecmp(folder,"Inbox")) 
     280        { 
     281          rdo_btn = gtk_radio_button_new_with_label (NULL, folder); 
     282          rdo_btn_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (rdo_btn)); 
     283          gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdo_btn), TRUE); 
    276284        } 
    277         else 
    278             rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 
    279         priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn); 
    280         g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self); 
    281         gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0); 
    282     } 
    283  
    284     //set radio button box alignment 
    285     if (!GTK_IS_ALIGNMENT(priv->radioAlign)){ 
    286         g_debug("Should be the first fime"); 
    287         priv->radioAlign = GTK_ALIGNMENT(gtk_alignment_new (0.5, 0.5, 1, 1)); 
    288         gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5); 
    289         priv->radioBtnBox = rdobtnbox; 
    290         gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
    291         gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0); 
    292         moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) ); 
    293     } 
    294     else{ 
    295         gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
    296         priv->radioBtnBox = rdobtnbox; 
    297         gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
    298     } 
    299     moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) ); 
    300     gtk_widget_show (priv->menubox); 
    301     gtk_widget_show_all (priv->vbox); 
     285      else 
     286        rdo_btn = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (rdo_btn), folder); 
     287      priv->rdoBtnList = g_slist_append (priv->rdoBtnList,rdo_btn); 
     288      g_signal_connect (G_OBJECT(rdo_btn), "released", G_CALLBACK (membeship_rdo_btn_clicked), self); 
     289      gtk_box_pack_start (GTK_BOX (rdobtnbox), rdo_btn, FALSE, TRUE, 0); 
     290    } 
     291 
     292  //set radio button box alignment 
     293  if (!GTK_IS_ALIGNMENT(priv->radioAlign)) 
     294    { 
     295      g_debug("Should be the first fime"); 
     296      priv->radioAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     297      gtk_alignment_set_padding (GTK_ALIGNMENT(priv->radioAlign), 5, 5, 30, 5); 
     298      priv->radioBtnBox = rdobtnbox; 
     299      gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
     300      gtk_box_pack_start (GTK_BOX (priv->folderbox), GTK_WIDGET(priv->radioAlign), FALSE, FALSE, 0); 
     301      moko_menu_box_set_application_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(appmenu) ); 
     302    } 
     303  else 
     304    { 
     305      gtk_container_remove( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
     306      priv->radioBtnBox = rdobtnbox; 
     307      gtk_container_add( GTK_CONTAINER(priv->radioAlign), GTK_WIDGET(priv->radioBtnBox) ); 
     308    } 
     309  moko_menu_box_set_filter_menu( MOKO_MENU_BOX(priv->menubox), GTK_MENU(filtmenu) ); 
     310  gtk_widget_show (priv->menubox); 
     311  gtk_widget_show_all (priv->vbox); 
    302312} 
    303313 
    304314void 
    305315membership_cell_data_func (GtkTreeViewColumn *col, 
    306                            GtkCellRenderer   *renderer, 
    307                            GtkTreeModel      *model, 
    308                            GtkTreeIter       *iter, 
    309                            gpointer          user_data) 
    310 { 
    311     gint status; 
    312          
    313     gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 
    314     if (status == UNREAD) 
    315         g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 
    316     else 
    317         g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 
    318 } 
    319  
    320 void membership_cursor_changed(GtkTreeSelection    *selection,  
     316                           GtkCellRenderer   *renderer, 
     317                           GtkTreeModel      *model, 
     318                           GtkTreeIter       *iter, 
     319                           gpointer          user_data) 
     320{ 
     321  gint status; 
     322 
     323  gtk_tree_model_get(model, iter, COLUMN_STATUS, &status, -1); 
     324  if (status == UNREAD) 
     325    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", TRUE, NULL); 
     326  else 
     327    g_object_set(renderer, "weight", PANGO_WEIGHT_BOLD, "weight-set", FALSE, NULL); 
     328} 
     329 
     330void membership_cursor_changed(GtkTreeSelection    *selection, 
    321331                               SmsMembershipWindow *self) 
    322332{ 
    323     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
    324     GtkTreeModel* model; 
    325     GtkTreeIter iter; 
    326     message* msg; 
    327      
    328     if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { 
    329         msg = g_malloc(sizeof(message)); 
    330         gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
    331         gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
    332         gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
    333         gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 
    334          
    335         gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name); 
    336         gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject); 
    337         g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList)); 
    338          
    339         GSList* c; 
    340         GtkWidget *elem; 
    341         for( c =priv->rdoBtnList; c; c=g_slist_next(c)) { 
    342             elem = c->data; 
    343             if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem)))){ 
    344                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE); 
    345                 break; 
    346             } 
    347         } 
     333  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     334  GtkTreeModel* model; 
     335  GtkTreeIter iter; 
     336  message* msg; 
     337 
     338  if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) 
     339    { 
     340      msg = g_malloc(sizeof(message)); 
     341      gtk_tree_model_get( model, &iter, COLUMN_FROM, &msg->name, -1 ); 
     342      gtk_tree_model_get( model, &iter, COLUMN_SUBJECT, &msg->subject, -1 ); 
     343      gtk_tree_model_get( model, &iter, COLUMN_FOLDER, &msg->folder, -1 ); 
     344      gtk_tree_model_get( model, &iter, COLUMN_STATUS, &msg->status, -1); 
     345 
     346      gtk_label_set_text (GTK_LABEL(priv->fromLabel), msg->name); 
     347      gtk_label_set_text (GTK_LABEL(priv->subjectLabel), msg->subject); 
     348      g_debug ("radio list length: %d",g_slist_length(priv->rdoBtnList)); 
     349 
     350      GSList* c; 
     351      GtkWidget *elem; 
     352      for( c =priv->rdoBtnList; c; c=g_slist_next(c)) 
     353        { 
     354          elem = c->data; 
     355          if (!g_strcasecmp (msg->folder,gtk_button_get_label(GTK_BUTTON(elem)))) 
     356            { 
     357              gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(elem), TRUE); 
     358              break; 
     359            } 
     360        } 
    348361    } 
    349362} 
     
    351364gboolean membership_filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, SmsMembershipWindow* self) 
    352365{ 
    353     gchar* folder; 
    354     gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 
    355  
    356     if(!g_strcasecmp(folder,self->currentfolder)) 
    357         return TRUE; 
    358     else 
    359         return FALSE; 
    360 } 
    361  
    362 void sms_membership_window_set_messages (SmsMembershipWindow* self,  
    363                                          GtkListStore* liststore) 
    364 { 
    365     GtkCellRenderer* ren; 
    366     GtkTreeViewColumn* column = gtk_tree_view_column_new(); 
    367     gtk_tree_view_column_set_title(column, "From"); 
    368  
    369  
    370     SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
    371     priv->liststore = liststore; 
    372     priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL); 
    373     priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter));  
    374     gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter), 
    375                                             membership_filter_visible_function, 
    376                                             self, 
    377                                             NULL); 
    378     /* Add status picture */ 
    379     ren = gtk_cell_renderer_pixbuf_new(); 
    380     gtk_tree_view_column_pack_start(column, ren, FALSE); 
    381     gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 
    382      
    383     /* add message from name */ 
    384     ren = gtk_cell_renderer_text_new(); 
    385     gtk_tree_view_column_pack_start(column, ren, TRUE); 
    386     gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL); 
    387      
    388     /* Bold if UNREAD */ 
    389     gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 
    390     moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 
    391  
    392     ren = gtk_cell_renderer_text_new(); 
    393     column = gtk_tree_view_column_new(); 
    394     gtk_tree_view_column_set_title(column, "Subject"); 
    395     gtk_tree_view_column_pack_start(column, ren, TRUE); 
    396     gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 
    397     gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 
    398     moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 
    399      
    400     if (!GTK_IS_ALIGNMENT(priv->msgViewAlign)){ 
    401         GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
    402         gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10); 
    403         priv->msgViewAlign = treeViewAlign; 
    404         priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 
    405         gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
    406         gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0); 
    407     } 
    408     else{ 
    409         gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
    410         priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 
    411         gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
    412     } 
    413     gtk_widget_show_all (priv->vbox); 
    414            
    415     GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 
    416     g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self); 
    417 } 
    418  
     366  gchar* folder; 
     367  gtk_tree_model_get (model, iter, COLUMN_FOLDER, &folder, -1); 
     368 
     369  if(!g_strcasecmp(folder,self->currentfolder)) 
     370    return TRUE; 
     371  else 
     372    return FALSE; 
     373} 
     374 
     375void sms_membership_window_set_messages (SmsMembershipWindow* self, 
     376    GtkListStore* liststore) 
     377{ 
     378  GtkCellRenderer* ren; 
     379  GtkTreeViewColumn* column = gtk_tree_view_column_new(); 
     380  gtk_tree_view_column_set_title(column, "From"); 
     381 
     382 
     383  SmsMembershipWindowPrivate* priv = SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(self); 
     384  priv->liststore = liststore; 
     385  priv->filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->liststore),NULL); 
     386  priv->view = moko_tree_view_new_with_model( GTK_TREE_MODEL (priv->filter)); 
     387  gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (priv->filter), 
     388                                          (GtkTreeModelFilterVisibleFunc)membership_filter_visible_function, 
     389                                          self, 
     390                                          NULL); 
     391  /* Add status picture */ 
     392  ren = gtk_cell_renderer_pixbuf_new(); 
     393  gtk_tree_view_column_pack_start(column, ren, FALSE); 
     394  gtk_tree_view_column_set_attributes(column, ren, "pixbuf", COLUMN_ICON, NULL); 
     395 
     396  /* add message from name */ 
     397  ren = gtk_cell_renderer_text_new(); 
     398  gtk_tree_view_column_pack_start(column, ren, TRUE); 
     399  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_FROM, NULL); 
     400 
     401  /* Bold if UNREAD */ 
     402  gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 
     403  moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 
     404 
     405  ren = gtk_cell_renderer_text_new(); 
     406  column = gtk_tree_view_column_new(); 
     407  gtk_tree_view_column_set_title(column, "Subject"); 
     408  gtk_tree_view_column_pack_start(column, ren, TRUE); 
     409  gtk_tree_view_column_set_attributes(column, ren, "text", COLUMN_SUBJECT, NULL); 
     410  gtk_tree_view_column_set_cell_data_func (column, ren, membership_cell_data_func, priv->liststore, NULL); 
     411  moko_tree_view_append_column( MOKO_TREE_VIEW(priv->view), column ); 
     412 
     413  if (!GTK_IS_ALIGNMENT(priv->msgViewAlign)) 
     414    { 
     415      GtkWidget* treeViewAlign = gtk_alignment_new (0.5, 0.5, 1, 1); 
     416      gtk_alignment_set_padding (GTK_ALIGNMENT(treeViewAlign),10,10,10,10); 
     417      priv->msgViewAlign = treeViewAlign; 
     418      priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 
     419      gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
     420      gtk_box_pack_start (GTK_BOX (priv->vbox), GTK_WIDGET(priv->msgViewAlign), TRUE, TRUE, 0); 
     421    } 
     422  else 
     423    { 
     424      gtk_container_remove (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
     425      priv->msgViewWin = moko_tree_view_put_into_scrolled_window(MOKO_TREE_VIEW(priv->view)); 
     426      gtk_container_add (GTK_CONTAINER(priv->msgViewAlign),priv->msgViewWin); 
     427    } 
     428  gtk_widget_show_all (priv->vbox); 
     429 
     430  GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->view)); 
     431  g_signal_connect( G_OBJECT(selection), "changed", G_CALLBACK(membership_cursor_changed), self); 
     432} 
     433 
  • trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-membership-window.h

    r1452 r1516  
    1 /*   
     1/* 
    22 *  sms-membership-window.h 
    33 *   
     
    1717 *  Current Version: $Rev$ ($Date: 2006/10/05 17:38:14 $) [$Author: alex $] 
    1818 */ 
    19   
     19 
    2020#ifndef _SMS_MEMBERSHIP_WINDOW_H_ 
    2121#define _SMS_MEMBERSHIP_WINDOW_H_ 
     
    4242#define SMS_MEMBERSHIP_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),   SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowClass)) 
    4343 
    44 typedef struct { 
     44typedef struct 
     45  { 
    4546    MokoWindow parent; 
    4647    gchar* currentfolder; 
    47 } SmsMembershipWindow; 
     48  } 
     49SmsMembershipWindow; 
    4850 
    49 typedef struct { 
     51typedef struct 
     52  { 
    5053    MokoWindowClass parent_class; 
    51 } SmsMembershipWindowClass; 
     54  } 
     55SmsMembershipWindowClass; 
    5256 
    5357GType sms_membership_window_get_type(); 
Note: See TracChangeset for help on using the changeset viewer.