- Timestamp:
- 03/27/07 10:34:31 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/target/OM-2007/applications/openmoko-messages/src/main.c
r1452 r1516 23 23 #include <errno.h> 24 24 #include <signal.h> 25 #include <stdlib.h> 25 26 #include <string.h> 26 #include <stdlib.h> 27 #include <dbus/dbus.h> 28 #include <dbus/dbus-glib.h> 27 29 28 30 #include "main.h" … … 40 42 #include <gtk/gtk.h> 41 43 44 typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model, 45 GtkTreeIter *iter, 46 gpointer data); 47 42 48 gboolean init_dbus (MessengerData* d) 43 49 { 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; 69 75 } 70 76 71 77 int main( int argc, char** argv ) 72 78 { 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; 104 110 105 111 } … … 107 113 void update_folder_sensitive (MessengerData* d, GSList* folderlist) 108 114 { 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); 116 124 } 117 125 } … … 119 127 GtkWidget* reload_filter_menu (MessengerData* d, GSList* folderlist) 120 128 { 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; 133 142 } 134 143 135 144 void setup_ui( MessengerData* d ) 136 145 { 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); 270 285 } 271 286 272 287 gboolean filter_visible_function (GtkTreeModel* model, GtkTreeIter* iter, MessengerData* d) 273 288 { 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; 292 310 } 293 311 294 312 void 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); 306 324 } 307 325 308 326 void populate_navigation_area( MessengerData* d ) 309 327 { 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))) ); 371 399 } 372 400 373 401 void populate_detail_area( MessengerData* d ) 374 402 { 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))); 379 407 } 380 408 381 409 void main_quit(GtkMenuItem* item, MessengerData* d) 382 410 { 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.
