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

Add contact window to choose contacts.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.