X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgtk-glade%2Fmodest-ui.c;h=3e7f9e4d3d884c0f019a320ee5513247bebbd3d5;hb=8852855998585a12d217705e0034312fe3de5d06;hp=375e9ce512ad0ccf31ca67dc5fa76145afb3e1ec;hpb=4530e2347fb546e10ebe2785fcc9e28ba49f59e7;p=modest diff --git a/src/gtk-glade/modest-ui.c b/src/gtk-glade/modest-ui.c index 375e9ce..3e7f9e4 100644 --- a/src/gtk-glade/modest-ui.c +++ b/src/gtk-glade/modest-ui.c @@ -7,45 +7,50 @@ #include #include -/* TODO: put in auto* */ -#include - #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ +/* TODO: put in auto* */ +#include +#include + #include "../modest-ui.h" #include "../modest-window-mgr.h" #include "../modest-account-mgr.h" +#include "../modest-account-mgr.h" +#include "../modest-identity-mgr.h" #include "../modest-tny-account-store.h" #include "../modest-tny-folder-tree-view.h" #include "../modest-tny-header-tree-view.h" #include "../modest-tny-msg-view.h" #include "../modest-tny-transport-actions.h" +#include "../modest-tny-store-actions.h" +#include "../modest-text-utils.h" +#include "../modest-tny-msg-actions.h" -#define MODEST_GLADE PREFIX "/share/modest/glade/modest.glade" -#define MODEST_GLADE_MAIN_WIN "main" -#define MODEST_GLADE_EDIT_WIN "new_mail" +#include "../modest-editor-window.h" +#include "modest-ui-glade.h" +#include "modest-ui-wizard.h" /* 'private'/'protected' functions */ static void modest_ui_class_init (ModestUIClass *klass); static void modest_ui_init (ModestUI *obj); static void modest_ui_finalize (GObject *obj); -static void modest_ui_window_destroy (GtkWidget *win, gpointer data); +static void modest_ui_window_destroy (GtkWidget *win, GdkEvent *event, gpointer data); static void modest_ui_last_window_closed (GObject *obj, gpointer data); -static GtkWidget* modest_main_window_toolbar (void); static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, TnyAccountStoreIface *account_store); static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder); +//static void on_account_settings1_activate (GtkMenuItem *, +// gpointer); -void on_account_settings1_activate (GtkMenuItem *, - gpointer); static void on_password_requested (ModestTnyAccountStore *account_store, const gchar *account_name, gpointer user_data); @@ -59,10 +64,35 @@ static void on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui); static void on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui); +static void on_forward_clicked (GtkWidget *widget, ModestUI *modest_ui); + +static void on_delete_clicked (GtkWidget *widget, ModestUI *modest_ui); + +#if 1 +static void on_send_button_clicked (GtkWidget *widget, ModestEditorWindow *modest_editwin); +#else static void on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui); +#endif + +static void on_sendreceive_button_clicked (GtkWidget *widget, ModestUI *modest_ui); static void register_toolbar_callbacks (ModestUI *modest_ui); +typedef enum { + QUOTED_SEND_REPLY, + QUOTED_SEND_REPLY_ALL, + QUOTED_SEND_FORWARD +} quoted_send_type; + +static void quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype); + + +typedef struct { + ModestUI *modest_ui; + ModestEditorWindow *edit_win; + GladeXML *glade_xml; +} EditWinData; + /* list my signals */ enum { @@ -71,23 +101,6 @@ enum { LAST_SIGNAL }; - -typedef struct _ModestUIPrivate ModestUIPrivate; -struct _ModestUIPrivate { - - ModestConf *modest_conf; - ModestAccountMgr *modest_acc_mgr; - ModestWindowMgr *modest_window_mgr; - TnyAccountStoreIface *account_store; - - GtkWindow *main_window; - GladeXML *glade_xml; - - -}; -#define MODEST_UI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ - MODEST_TYPE_UI, \ - ModestUIPrivate)) /* globals */ static GObjectClass *parent_class = NULL; @@ -117,6 +130,7 @@ modest_ui_get_type (void) return my_type; } + static void modest_ui_class_init (ModestUIClass *klass) { @@ -136,18 +150,21 @@ modest_ui_class_init (ModestUIClass *klass) /* etc. */ } + static void modest_ui_init (ModestUI *obj) { ModestUIPrivate *priv = MODEST_UI_GET_PRIVATE(obj); priv->modest_acc_mgr = NULL; + priv->modest_id_mgr = NULL; priv->modest_conf = NULL; priv->modest_window_mgr = NULL; priv->glade_xml = NULL; } + static void modest_ui_finalize (GObject *obj) { @@ -157,6 +174,10 @@ modest_ui_finalize (GObject *obj) g_object_unref (priv->modest_acc_mgr); priv->modest_acc_mgr = NULL; + if (priv->modest_id_mgr) + g_object_unref (priv->modest_id_mgr); + priv->modest_id_mgr = NULL; + if (priv->modest_conf) g_object_unref (priv->modest_conf); priv->modest_conf = NULL; @@ -166,12 +187,14 @@ modest_ui_finalize (GObject *obj) priv->modest_window_mgr = NULL; } + GObject* modest_ui_new (ModestConf *modest_conf) { GObject *obj; ModestUIPrivate *priv; ModestAccountMgr *modest_acc_mgr; + ModestIdentityMgr *modest_id_mgr; TnyAccountStoreIface *account_store_iface; g_return_val_if_fail (modest_conf, NULL); @@ -187,6 +210,14 @@ modest_ui_new (ModestConf *modest_conf) return NULL; } + modest_id_mgr = + MODEST_IDENTITY_MGR(modest_identity_mgr_new (modest_conf)); + if (!modest_id_mgr) { + g_warning ("could not create ModestIdentityMgr instance"); + g_object_unref (obj); + return NULL; + } + account_store_iface = TNY_ACCOUNT_STORE_IFACE(modest_tny_account_store_new (modest_acc_mgr)); if (!account_store_iface) { @@ -196,9 +227,9 @@ modest_ui_new (ModestConf *modest_conf) g_signal_connect (account_store_iface, "password_requested", G_CALLBACK(on_password_requested), NULL); + glade_init (); - priv->glade_xml = glade_xml_new (MODEST_GLADE, - NULL,NULL); + priv->glade_xml = glade_xml_new (MODEST_GLADE, NULL,NULL); if (!priv->glade_xml) { g_warning ("failed to do glade stuff"); g_object_unref (obj); @@ -210,6 +241,7 @@ modest_ui_new (ModestConf *modest_conf) */ priv->modest_acc_mgr = modest_acc_mgr; + priv->modest_id_mgr = modest_id_mgr; g_object_ref (priv->modest_conf = modest_conf); priv->account_store = account_store_iface; @@ -226,11 +258,13 @@ gboolean modest_ui_show_main_window (ModestUI *modest_ui) { GtkWidget *win; - int height, width; + gint height, width; ModestUIPrivate *priv; GtkWidget *folder_view, *header_view; GtkWidget *message_view; - GtkWidget *account_settings_item; + GtkWidget *account_settings_item; + GtkWidget *new_account_item; + GtkWidget *delete_item; GtkWidget *folder_view_holder, *header_view_holder, @@ -270,7 +304,7 @@ modest_ui_show_main_window (ModestUI *modest_ui) g_signal_connect (G_OBJECT(folder_view), "folder_selected", G_CALLBACK(on_folder_clicked), modest_ui); - message_view = GTK_WIDGET(modest_tny_msg_view_new (NULL)); + message_view = GTK_WIDGET(modest_tny_msg_view_new (NULL, priv->modest_conf)); if (!message_view) { g_warning ("failed to create message view"); return FALSE; @@ -280,26 +314,50 @@ modest_ui_show_main_window (ModestUI *modest_ui) g_signal_connect (header_view, "message_selected", G_CALLBACK(on_message_clicked), - modest_ui); + modest_ui); - account_settings_item = glade_xml_get_widget (priv->glade_xml, "account_settings1"); + account_settings_item = glade_xml_get_widget (priv->glade_xml, "AccountSettingsMenuItem"); if (!account_settings_item) { g_warning ("The account settings item isn't available!\n"); + return FALSE; + } + /* + g_signal_connect (account_settings_item, "activate", + G_CALLBACK(on_account_settings1_activate), + modest_ui); + */ + + new_account_item = glade_xml_get_widget (priv->glade_xml, "NewAccountWizardMenuItem"); + if (!new_account_item) + { + g_warning ("The new account item isn't available!\n"); + return FALSE; + } + + g_signal_connect (new_account_item, "activate", + G_CALLBACK(new_wizard_account), + modest_ui); + + delete_item = glade_xml_get_widget (priv->glade_xml, "delete1"); + if (!delete_item) + { + g_warning ("The delete item isn't available!\n"); return FALSE; } - g_signal_connect (account_settings_item, "activate", - G_CALLBACK(on_account_settings1_activate), + g_signal_connect (delete_item, "activate", G_CALLBACK(on_delete_clicked), modest_ui); register_toolbar_callbacks (modest_ui); modest_window_mgr_register (priv->modest_window_mgr, G_OBJECT(win), MODEST_MAIN_WINDOW, 0); - g_signal_connect (win, "destroy", G_CALLBACK(modest_ui_window_destroy), + g_signal_connect (win, "destroy-event", G_CALLBACK(modest_ui_window_destroy), modest_ui); - gtk_widget_set_usize (GTK_WIDGET(win), height, width); + g_signal_connect (win, "delete-event", G_CALLBACK(modest_ui_window_destroy), + modest_ui); + gtk_widget_set_usize (GTK_WIDGET(win), width, height); gtk_window_set_title (GTK_WINDOW(win), PACKAGE_STRING); gtk_widget_show_all (win); @@ -323,24 +381,223 @@ register_toolbar_callbacks (ModestUI *modest_ui) G_CALLBACK(on_new_mail_clicked), modest_ui); button = glade_xml_get_widget (priv->glade_xml, "toolb_reply"); - if (button) + if (button) { g_signal_connect (button, "clicked", G_CALLBACK(on_reply_clicked), modest_ui); -} + gtk_widget_set_sensitive(button, FALSE); + } + + button = glade_xml_get_widget (priv->glade_xml, "toolb_reply_all"); + if (button) { + //g_signal_connect (button, "clicked", + // G_CALLBACK(on_reply_all_clicked), modest_ui); + gtk_widget_set_sensitive(button, FALSE); + } + + button = glade_xml_get_widget (priv->glade_xml, "toolb_forward"); + if (button) { + g_signal_connect (button, "clicked", + G_CALLBACK(on_forward_clicked), modest_ui); + gtk_widget_set_sensitive(button, FALSE); + } + + button = glade_xml_get_widget (priv->glade_xml, "toolb_move_to"); + if (button) { + //g_signal_connect (button, "clicked", + // G_CALLBACK(on_move_to_clicked), modest_ui); + gtk_widget_set_sensitive(button, FALSE); + } + button = glade_xml_get_widget (priv->glade_xml, "toolb_delete"); + if (button) { + g_signal_connect (button, "clicked", + G_CALLBACK(on_delete_clicked), modest_ui); + gtk_widget_set_sensitive(button, FALSE); + } + button = glade_xml_get_widget (priv->glade_xml, "toolb_send_receive"); + if (button) { + g_signal_connect (button, "clicked", + G_CALLBACK(on_sendreceive_button_clicked), modest_ui); + gtk_widget_set_sensitive(button, TRUE); + } +} +#if 0 static void -hide_edit_window (GtkWidget *win, gpointer data) +hide_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) { + ModestUIPrivate *priv; + + priv = MODEST_UI_GET_PRIVATE(data); gtk_widget_hide (win); + modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(win)); +} +#endif + + +static gboolean close_edit_confirm_dialog(ModestEditorWindow *edit_win) +{ + GtkWidget *mdialog; + gint res; + + mdialog = gtk_message_dialog_new(GTK_WINDOW(edit_win), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + _("Message was modified.\nDiscard Changes?")); + gtk_widget_show_all (mdialog); + + res=gtk_dialog_run(GTK_DIALOG(mdialog)); + gtk_widget_destroy (mdialog); + if (res == GTK_RESPONSE_YES) + return TRUE; + else + return FALSE; +} + +static void +close_edit_window (GtkWidget *win, GdkEvent *event, gpointer data) +{ + ModestEditorWindow *edit_win; + ModestUIPrivate *priv; + EditWinData *win_data; + + edit_win = (ModestEditorWindow *)data; + win_data = modest_editor_window_get_data(edit_win); + priv = MODEST_UI_GET_PRIVATE(win_data->modest_ui); + + // g_message("window was %s modified", modest_editor_window_get_modified(edit_win) ? "" : "not"); + + if (modest_editor_window_get_modified(edit_win)) { + if (close_edit_confirm_dialog(edit_win)) { + gtk_widget_hide (GTK_WIDGET(edit_win)); + modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(edit_win)); + gtk_widget_destroy(GTK_WIDGET(edit_win)); + // g_message("closing window"); + } /* else { + g_message("not closing window"); + }*/ + } } +GtkContainer +*modest_ui_new_editor_window (ModestUI *modest_ui, gpointer *user_data) +{ + GtkWidget *top_container; + + GladeXML *glade_xml; + EditWinData *win_data; + + glade_xml = glade_xml_new(MODEST_GLADE, "new_mail_top_container", NULL); + if (!glade_xml) + return NULL; + + win_data = g_malloc(sizeof(EditWinData)); + win_data->modest_ui = modest_ui; + win_data->glade_xml = glade_xml; + *user_data = win_data; + + top_container = glade_xml_get_widget(glade_xml, "new_mail_top_container"); + if (!top_container) { + g_object_unref(G_OBJECT(glade_xml)); + return NULL; + } + + return GTK_CONTAINER(top_container); +} + + +gboolean +modest_ui_editor_window_set_to_header(const gchar *to, gpointer window_data) +{ + GladeXML *glade_xml; + GtkWidget *w; + EditWinData *win_data; + + win_data = (EditWinData *)window_data; + glade_xml = win_data->glade_xml; + w = glade_xml_get_widget(glade_xml, "to_entry"); + gtk_entry_set_text(GTK_ENTRY(w), to); + + return TRUE; +} + + +gboolean +modest_ui_editor_window_set_cc_header(const gchar *cc, gpointer window_data) +{ + GladeXML *glade_xml; + // GtkWidget *w; + EditWinData *win_data; + + win_data = (EditWinData *)window_data; + glade_xml = win_data->glade_xml; +/* + w = glade_xml_get_widget(glade_xml, "cc_entry"); + gtk_entry_set_text(GTK_ENTRY(w), cc); +*/ + return TRUE; +} + + +gboolean +modest_ui_editor_window_set_bcc_header(const gchar *bcc, gpointer window_data) +{ + GladeXML *glade_xml; + // GtkWidget *w; + EditWinData *win_data; + + win_data = (EditWinData *)window_data; + glade_xml = win_data->glade_xml; +/* + w = glade_xml_get_widget(glade_xml, "bcc_entry"); + gtk_entry_set_text(GTK_ENTRY(w), bcc); +*/ + return TRUE; +} + + +gboolean +modest_ui_editor_window_set_subject_header(const gchar *subject, gpointer window_data) +{ + GladeXML *glade_xml; + GtkWidget *w; + EditWinData *win_data; + + win_data = (EditWinData *)window_data; + glade_xml = win_data->glade_xml; + + w = glade_xml_get_widget(glade_xml, "subject_entry"); + gtk_entry_set_text(GTK_ENTRY(w), subject); + + return TRUE; +} gboolean -modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, +modest_ui_editor_window_set_body(const gchar *body, gpointer window_data) +{ + GladeXML *glade_xml; + GtkWidget *body_view; + GtkTextBuffer *buf; + EditWinData *win_data; + + win_data = (EditWinData *)window_data; + glade_xml = win_data->glade_xml; + + body_view = glade_xml_get_widget(glade_xml, "body_view"); + buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(body_view)); + + gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buf), body, -1); + + return TRUE; +} + +#if 0 +gboolean +modest_ui_new_edit_window (ModestUI *modest_ui, const gchar* to, const gchar* cc, const gchar* bcc, const gchar* subject, const gchar *body, const GSList* att) @@ -363,8 +620,13 @@ modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, return FALSE; } - modest_window_mgr_register (priv->modest_window_mgr, - G_OBJECT(win), MODEST_EDIT_WINDOW, 0); + /* FIXME: this also assumes that there can be only one edit window! */ + if (!modest_window_mgr_find_by_type(priv->modest_window_mgr, MODEST_EDIT_WINDOW)) { + /* there already is one edit win, maybe we should preserver its contents */ + modest_window_mgr_register (priv->modest_window_mgr, + G_OBJECT(win), MODEST_EDIT_WINDOW, 0); + } + to_entry = glade_xml_get_widget (priv->glade_xml, "to_entry"); subject_entry = glade_xml_get_widget (priv->glade_xml, "subject_entry"); body_view = glade_xml_get_widget (priv->glade_xml, "body_view"); @@ -373,10 +635,15 @@ modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, gtk_entry_set_text(GTK_ENTRY(to_entry), to); buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(body_view)); - gtk_text_buffer_set_text(buf, body, -1); - - g_signal_connect (win, "destroy", G_CALLBACK(hide_edit_window), - NULL); + if (body) { + gtk_text_buffer_set_text(buf, body, -1); + } else { + gtk_text_buffer_set_text(buf, "", -1); + } + g_signal_connect (win, "destroy-event", G_CALLBACK(hide_edit_window), + modest_ui); + g_signal_connect (win, "delete-event", G_CALLBACK(hide_edit_window), + modest_ui); gtk_widget_set_usize (GTK_WIDGET(win), height, width); gtk_window_set_title (GTK_WINDOW(win), @@ -391,31 +658,36 @@ modest_ui_show_edit_window (ModestUI *modest_ui, const gchar* to, return TRUE; } - +#endif static void -modest_ui_window_destroy (GtkWidget *win, gpointer data) +modest_ui_window_destroy (GtkWidget *win, GdkEvent *event, gpointer data) { ModestUIPrivate *priv; g_return_if_fail (data); - - priv = MODEST_UI_GET_PRIVATE((ModestUI*)data); + g_return_if_fail(MODEST_IS_UI(data)); + priv = MODEST_UI_GET_PRIVATE((ModestUI *)data); + g_return_if_fail(priv); if (!modest_window_mgr_unregister (priv->modest_window_mgr, G_OBJECT(win))) g_warning ("modest window mgr: failed to unregister %p", G_OBJECT(win)); + else + gtk_widget_hide(win); } static void modest_ui_last_window_closed (GObject *obj, gpointer data) { + /* FIXME: Other cleanups todo? Finalize Tinymail? */ gtk_main_quit (); } + void -on_account_selector_selection_changed(GtkWidget *widget, - gpointer user_data) +on_account_selector_selection_changed (GtkWidget *widget, + gpointer user_data) { GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); GtkTreeIter iter; @@ -435,9 +707,12 @@ on_account_selector_selection_changed(GtkWidget *widget, } g_message("Value: '%s'\n", account_name); + + free(account_name); } -void +#if 0 +static void on_account_settings1_activate (GtkMenuItem *menuitem, gpointer user_data) { @@ -452,6 +727,8 @@ on_account_settings1_activate (GtkMenuItem *menuitem, GtkWidget *account_selector; GtkCellRenderer *renderer; + + g_return_if_fail(MODEST_IS_UI(user_data)); priv = MODEST_UI_GET_PRIVATE(MODEST_UI(user_data)); glade_xml = glade_xml_new(MODEST_GLADE, "mailbox_setup_advanced", NULL); @@ -497,6 +774,7 @@ on_account_settings1_activate (GtkMenuItem *menuitem, g_object_unref(glade_xml); } +#endif static void @@ -505,7 +783,10 @@ on_folder_clicked (ModestTnyFolderTreeView *folder_tree, gpointer data) { GtkWidget *win; + GtkWidget *button; + GtkWidget *paned; ModestTnyHeaderTreeView *tree_view; + ModestTnyMsgView *msg_view; ModestUIPrivate *priv; GtkWidget *scrollview; @@ -523,19 +804,42 @@ on_folder_clicked (ModestTnyFolderTreeView *folder_tree, modest_tny_header_tree_view_set_folder (tree_view, folder); -} + button = glade_xml_get_widget (priv->glade_xml, "toolb_reply"); + if (button) { + gtk_widget_set_sensitive(button, FALSE); + } + button = glade_xml_get_widget (priv->glade_xml, "toolb_forward"); + if (button) { + gtk_widget_set_sensitive(button, FALSE); + } -static void on_message_clicked (ModestTnyFolderTreeView *folder_tree, + button = glade_xml_get_widget (priv->glade_xml, "toolb_delete"); + if (button) { + gtk_widget_set_sensitive(button, FALSE); + } + + paned = glade_xml_get_widget (priv->glade_xml,"mail_paned"); + g_return_if_fail (paned); + + msg_view = MODEST_TNY_MSG_VIEW(gtk_paned_get_child2 (GTK_PANED(paned))); + g_return_if_fail (msg_view); + + modest_tny_msg_view_set_message (msg_view, NULL); +} + + +static void +on_message_clicked (ModestTnyFolderTreeView *folder_tree, TnyMsgIface *message, gpointer data) { GtkWidget *paned; + GtkWidget *button; ModestTnyMsgView *msg_view; ModestUIPrivate *priv; - g_return_if_fail (message); g_return_if_fail (data); priv = MODEST_UI_GET_PRIVATE(data); @@ -544,8 +848,21 @@ static void on_message_clicked (ModestTnyFolderTreeView *folder_tree, modest_tny_msg_view_set_message (msg_view, message); + button = glade_xml_get_widget (priv->glade_xml, "toolb_reply"); + if (button) { + gtk_widget_set_sensitive(button, TRUE); + } + button = glade_xml_get_widget (priv->glade_xml, "toolb_forward"); + if (button) { + gtk_widget_set_sensitive(button, TRUE); + } + button = glade_xml_get_widget (priv->glade_xml, "toolb_delete"); + if (button) { + gtk_widget_set_sensitive(button, TRUE); + } } + static void on_password_requested (ModestTnyAccountStore *account_store, const gchar *account_name, gpointer user_data) @@ -598,16 +915,25 @@ on_password_requested (ModestTnyAccountStore *account_store, } - - - - static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder) { + int i; + GSList *columns = NULL; GtkWidget *header_tree; + ModestTnyHeaderTreeViewColumn cols[] = { + MODEST_TNY_HEADER_TREE_VIEW_COLUMN_MSGTYPE, + MODEST_TNY_HEADER_TREE_VIEW_COLUMN_ATTACH, + MODEST_TNY_HEADER_TREE_VIEW_COLUMN_COMPACT_HEADER + }; + + for (i = 0 ; i != sizeof(cols)/sizeof(ModestTnyHeaderTreeViewColumn); ++i) + columns = g_slist_append (columns, GINT_TO_POINTER(cols[i])); + + header_tree = GTK_WIDGET(modest_tny_header_tree_view_new(folder, columns, + MODEST_TNY_HEADER_TREE_VIEW_STYLE_NORMAL)); + g_slist_free (columns); - header_tree = GTK_WIDGET(modest_tny_header_tree_view_new(folder)); if (!header_tree) { g_warning ("could not create header tree"); return NULL; @@ -617,13 +943,10 @@ modest_main_window_header_tree (TnyMsgFolderIface *folder) } - static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, TnyAccountStoreIface *account_store) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); GtkWidget *folder_tree; folder_tree = GTK_WIDGET(modest_tny_folder_tree_view_new (account_store)); @@ -632,303 +955,148 @@ modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr, return NULL; } - column = gtk_tree_view_column_new_with_attributes(_("All Mail Folders"), - renderer,"text", - TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); - - column = gtk_tree_view_column_new_with_attributes(_("Unread"), - renderer, "text", - TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); + return folder_tree; +} +static void on_editor_entry_changed(GtkEditable *editable, + gpointer user_data) +{ + GtkWidget *edit_win; + EditWinData *windata; - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(folder_tree), TRUE); - gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(folder_tree), TRUE); + edit_win = (GtkWidget *)user_data; + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); - return folder_tree; + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), TRUE); } +static void on_editor_buffer_changed (GtkTextBuffer *textbuffer, + gpointer user_data) +{ + GtkWidget *edit_win; + EditWinData *windata; + + edit_win = (GtkWidget *)user_data; + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); + + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), TRUE); +} static void on_new_mail_clicked (GtkWidget *widget, ModestUI *modest_ui) { + GtkWidget *edit_win; + GladeXML *glade_xml; + GtkWidget *btn, *w; + GtkTextBuffer *buf; + EditWinData *windata; + ModestUIPrivate *priv; + gint height, width; + g_return_if_fail (modest_ui); - modest_ui_show_edit_window (modest_ui, "", "", "", "", "", NULL); + //modest_ui_new_edit_window (modest_ui, "", "", "", "", "", NULL); + + edit_win = modest_editor_window_new(modest_ui); + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); + g_return_if_fail(windata); + + windata->edit_win = MODEST_EDITOR_WINDOW(edit_win); + glade_xml = windata->glade_xml; + btn = glade_xml_get_widget (glade_xml, "toolb_send"); + g_signal_connect (btn, "clicked", G_CALLBACK(on_send_button_clicked), + edit_win); + + w = glade_xml_get_widget (glade_xml, "to_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "subject_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "body_view"); + buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(w)); + g_signal_connect(buf, "changed", G_CALLBACK(on_editor_buffer_changed), edit_win); + + g_signal_connect (edit_win, "destroy-event", G_CALLBACK(close_edit_window), + edit_win); + g_signal_connect (edit_win, "delete-event", G_CALLBACK(close_edit_window), + edit_win); + + priv = MODEST_UI_GET_PRIVATE(windata->modest_ui); + height = modest_conf_get_int (priv->modest_conf, + MODEST_CONF_EDIT_WINDOW_HEIGHT, NULL); + width = modest_conf_get_int (priv->modest_conf, + MODEST_CONF_EDIT_WINDOW_WIDTH, NULL); + + // g_message("new editor win@%dx%d", width, height); + + gtk_widget_set_usize (GTK_WIDGET(edit_win), width, height); + gtk_window_set_title (GTK_WINDOW(edit_win), _("Untitled")); + modest_window_mgr_register(priv->modest_window_mgr, G_OBJECT(edit_win), MODEST_EDIT_WINDOW, 0); + gtk_widget_show(edit_win); } -static gchar* -modest_ui_quote_msg(const TnyMsgIface *src, const gchar *from, time_t sent_date) + +static void +new_editor_with_presets (ModestUI *modest_ui, const gchar *to_header, + const gchar *cc_header, const gchar *bcc_header, + const gchar *subject_header, const gchar *body) { - GList *parts; - TnyMsgMimePartIface *part; - TnyStreamIface* stream; - TnyTextBufferStream *dest; - TnyMsgMimePartIface *body = NULL; + GtkWidget *edit_win; + GladeXML *glade_xml; + GtkWidget *btn, *w; GtkTextBuffer *buf; - GtkTextIter begin, end, iter1, iter2, iter3; - gchar *txt, *line; - gint tmp; - gint indent; - gboolean break_line; -<<<<<<< .mine - gchar sent_str[101]; - gchar from_cut[82]; - gchar reply_head[202]; - -======= - ->>>>>>> .r91 - buf = gtk_text_buffer_new(NULL); - dest = tny_text_buffer_stream_new(buf); - parts = (GList*) tny_msg_iface_get_parts (src); - - while (parts) { - /* TODO: maybe we'd like to quote more than one part? - * cleanup, fix leaks - */ - TnyMsgMimePartIface *part = - TNY_MSG_MIME_PART_IFACE(parts->data); - if (tny_msg_mime_part_iface_content_type_is (part, "text/plain")) { - body = part; - break; - } - parts = parts->next; - } - if (!body) { - return ""; - } - buf = gtk_text_buffer_new (NULL); - stream = TNY_STREAM_IFACE(tny_text_buffer_stream_new (buf)); - - tny_stream_iface_reset (stream); - tny_msg_mime_part_iface_decode_to_stream (body, stream); - tny_stream_iface_reset (stream); - - /* format sent_date */ - strftime(sent_str, 100, "%c", localtime(&sent_date)); - strncpy(from_cut, from, 80); - sprintf(reply_head, "On %s, %s wrote:\n", sent_str, from_cut); - - gtk_text_buffer_get_iter_at_line(buf, &iter1, 0); - gtk_text_buffer_insert(buf, &iter1, reply_head, -1); - gtk_text_buffer_get_iter_at_line(buf, &iter1, 1); - while (TRUE) { - /* at each beginning of this while, iter1 must be at the beginning of - the (next) line to quote */ - - iter2 = iter1; -<<<<<<< .mine - if (gtk_text_iter_get_chars_in_line(&iter1) > 1) { - /* check whether line is already quoted */ - iter2 = iter1; - gtk_text_iter_forward_char (&iter2); - txt = gtk_text_buffer_get_text (buf, &iter1, &iter2, FALSE); - } else { - txt = ""; - } -======= - gtk_text_iter_forward_to_line_end(&iter2); - txt = gtk_text_buffer_get_text (buf, &iter1, &iter2, FALSE); - printf("%s\n", txt); - /* check whether line is already quoted */ - iter2 = iter1; - - gtk_text_iter_forward_word_end(&iter2); - txt = gtk_text_buffer_get_text (buf, &iter1, &iter2, FALSE); - ->>>>>>> .r91 - /* insert quotation mark */ - tmp = gtk_text_iter_get_offset(&iter1); - gtk_text_buffer_insert(buf, &iter1, "> ", -1); - - /* still at the beginning of the line */ - gtk_text_buffer_get_iter_at_offset(buf, &iter1, tmp); - iter2 = iter1; - - if (strcmp(txt, ">") != 0) { - - /* line was not already quoted */ - - /* now check whether the line must be broken: */ - if (gtk_text_iter_get_chars_in_line(&iter2) >= 79) { - - gtk_text_iter_set_line_offset(&iter2, 79); - - /* move iter1 behind quote mark at the beginnig of the line */ - gtk_text_iter_forward_word_end(&iter1); - - /* save iter2 position */ - iter3 = iter2; - - /* move iter2 back one word (from breakpoint in line) */ - gtk_text_iter_backward_word_start(&iter2); - - /* check for one-word line (up to iter2) */ - if (!gtk_text_iter_compare(&iter1, &iter2) < 0) { - gtk_text_iter_forward_word_end(&iter2); /* BUG? */ - } - - /* insert linebreak */ - tmp = gtk_text_iter_get_offset(&iter2); -<<<<<<< .mine - gtk_text_buffer_insert(buf, &iter2, "\n", -1); -======= - gtk_text_buffer_insert(buf, &iter2, "\n#", -1); - ->>>>>>> .r91 - gtk_text_buffer_get_iter_at_offset(buf, &iter1, tmp); - - /* move to the beginning of the "new" line */ - gtk_text_iter_forward_line(&iter1); - - /* try to kill 1 space */ - iter2 = iter1; - gtk_text_iter_forward_char(&iter2); - txt = gtk_text_buffer_get_text(buf, &iter1, &iter2, FALSE); - if (strcmp(txt, " ") == 0) { - tmp = gtk_text_iter_get_offset(&iter1); - gtk_text_buffer_delete(buf, &iter1, &iter2); - gtk_text_buffer_get_iter_at_offset(buf, &iter1, tmp); - } - - /* check whether there is a next line to merge */ - iter3 = iter1; - if (!gtk_text_iter_forward_line(&iter3)) { - continue; - } -<<<<<<< .mine - /* iter3 is now at the beginning of the next line.*/ - -======= - ->>>>>>> .r91 - /* check for empty line */ - if (gtk_text_iter_get_chars_in_line(&iter3) < 2) { - continue; - } - - /* check for quote */ - iter2 = iter3; - gtk_text_iter_forward_char (&iter2); - txt = gtk_text_buffer_get_text(buf, &iter3, &iter2, FALSE); - if (strcmp(txt, ">") == 0) { - /* iter1 is still at the beginning of the newly broken - * so we don't have to cleanup */ - continue; - } -<<<<<<< .mine - -======= - - /* now merge in the next line */ ->>>>>>> .r91 - if (!gtk_text_iter_forward_to_line_end(&iter1)) { - /* no further lines to merge */ - continue; - } - - /* "mark" newline */ - iter2 = iter1; - gtk_text_iter_forward_char(&iter2); -<<<<<<< .mine - - /* do the merge */ -======= - ->>>>>>> .r91 - tmp = gtk_text_iter_get_offset(&iter1); -<<<<<<< .mine -======= - - /* do the merge */ ->>>>>>> .r91 - gtk_text_buffer_delete (buf, &iter1, &iter2); - gtk_text_buffer_get_iter_at_offset (buf, &iter1, tmp); - - /* insert space */ - gtk_text_buffer_insert(buf, &iter1, " ", -1); - gtk_text_buffer_get_iter_at_offset (buf, &iter1, tmp); - - /* move to beginning of line and continue */ - gtk_text_iter_set_line_offset(&iter1, 0); -<<<<<<< .mine - continue; - -======= - ->>>>>>> .r91 - } else { - /* line doesn't have to be broken, we're done. */ - if (!gtk_text_iter_forward_line(&iter1)) { - break; - } - continue; - } - } else { - /* line was already quoted */ - if (!gtk_text_iter_forward_line(&iter1)) { - break; - } - continue; - } - } + EditWinData *windata; + ModestUIPrivate *priv; + gint height, width; - gtk_text_buffer_get_bounds (buf, &begin, &end); - txt = gtk_text_buffer_get_text (buf, &begin, &end, FALSE); + g_return_if_fail (modest_ui); - return txt; -} + edit_win = modest_editor_window_new(modest_ui); + windata = (EditWinData *)modest_editor_window_get_data(MODEST_EDITOR_WINDOW(edit_win)); + g_return_if_fail(windata); -static void -modest_ui_reply_to_msg (ModestUI *modest_ui, TnyMsgHeaderIface *header, - ModestTnyMsgView *msg_view) { - const gchar *subject, *from, *quoted; - time_t sent_date; - const TnyMsgIface *msg; - const TnyMsgFolderIface *folder; - gchar *re_sub; - - quoted = ""; - if (header) { - folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(header)); - if (!folder) { - g_warning ("cannot find folder"); - return; - } + glade_xml = windata->glade_xml; + btn = glade_xml_get_widget (glade_xml, "toolb_send"); + g_signal_connect (btn, "clicked", G_CALLBACK(on_send_button_clicked), + edit_win); + + w = glade_xml_get_widget (glade_xml, "to_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "subject_entry"); + g_signal_connect(w, "changed", G_CALLBACK(on_editor_entry_changed), edit_win); + w = glade_xml_get_widget (glade_xml, "body_view"); + buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(w)); + g_signal_connect(buf, "changed", G_CALLBACK(on_editor_buffer_changed), edit_win); + + g_signal_connect (edit_win, "destroy-event", G_CALLBACK(close_edit_window), + edit_win); + g_signal_connect (edit_win, "delete-event", G_CALLBACK(close_edit_window), + edit_win); + + priv = MODEST_UI_GET_PRIVATE(windata->modest_ui); + height = modest_conf_get_int (priv->modest_conf, + MODEST_CONF_EDIT_WINDOW_HEIGHT, NULL); + width = modest_conf_get_int (priv->modest_conf, + MODEST_CONF_EDIT_WINDOW_WIDTH, NULL); - msg = tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE(folder), header); - if (!msg) { - g_warning ("cannot find msg"); - return; - } - subject = tny_msg_header_iface_get_subject(header); - /* TODO: checks, free */ - re_sub = malloc(strlen(subject) + 5); - strcpy (re_sub, "Re: "); - strcat (re_sub, subject); - /* FIXME: honor replyto, cc */ - from = tny_msg_header_iface_get_from(header); - sent_date = tny_msg_header_iface_get_date_sent(header); - quoted = modest_ui_quote_msg(msg, from, sent_date); + // g_message("new editor win@%dx%d", width, height); - } else { - printf("no header\n"); - return; - } + gtk_widget_set_usize (GTK_WIDGET(edit_win), width, height); + gtk_window_set_title (GTK_WINDOW(edit_win), _("Untitled")); + modest_window_mgr_register(priv->modest_window_mgr, G_OBJECT(edit_win), MODEST_EDIT_WINDOW, 0); + + modest_editor_window_set_to_header(MODEST_EDITOR_WINDOW(edit_win), to_header); + modest_editor_window_set_cc_header(MODEST_EDITOR_WINDOW(edit_win), cc_header); + modest_editor_window_set_bcc_header(MODEST_EDITOR_WINDOW(edit_win), bcc_header); + modest_editor_window_set_subject_header(MODEST_EDITOR_WINDOW(edit_win), subject_header); + modest_editor_window_set_body(MODEST_EDITOR_WINDOW(edit_win), body); + + modest_editor_window_set_modified(MODEST_EDITOR_WINDOW(edit_win), FALSE); - modest_ui_show_edit_window (modest_ui, from, "FIXME:cc", /* bcc */ "", re_sub, quoted, NULL); + gtk_widget_show(edit_win); } -/* WIP, testing az */ static void -on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui) -{ +quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype) { GtkTreeSelection *sel; GtkWidget *paned; GtkTreeModel *model; @@ -941,6 +1109,14 @@ on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui) ModestTnyMsgView *msg_view; ModestUIPrivate *priv; + const TnyMsgIface *msg; + const TnyMsgFolderIface *folder; + GString *re_sub; + const gchar *subject, *from; + gchar *unquoted, *quoted; + time_t sent_date; + gint line_limit = 76; + g_return_if_fail (modest_ui); priv = MODEST_UI_GET_PRIVATE(modest_ui); @@ -960,42 +1136,102 @@ on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui) sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view)); g_return_if_fail (sel); - if (!gtk_tree_selection_get_selected (sel, &model, &iter)) - /* no message was selected. TODO: disable reply button in this case */ + if (!gtk_tree_selection_get_selected (sel, &model, &iter)) { + g_warning("nothing to reply to"); return; + } gtk_tree_model_get (model, &iter, TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1); - modest_ui_reply_to_msg (modest_ui, header, msg_view); + if (!header) { + g_warning("no header"); + return; + } + + folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(header)); + if (!folder) { + g_warning ("cannot find folder"); + return; + } + + msg = tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE(folder), header); + if (!msg) { + g_warning ("cannot find msg"); + return; + } + + subject = tny_msg_header_iface_get_subject(header); + re_sub = g_string_new(subject); + /* FIXME: honor replyto, cc */ + from = tny_msg_header_iface_get_from(header); + sent_date = tny_msg_header_iface_get_date_sent(header); + + unquoted = modest_tny_msg_view_get_selected_text(msg_view); + quoted = modest_tny_msg_actions_quote(msg, from, sent_date, line_limit, unquoted); + + switch (qstype) { + case QUOTED_SEND_REPLY: + g_string_prepend(re_sub, _("Re: ")); + new_editor_with_presets(modest_ui, from, /* cc */ "", /* bcc */ "", re_sub->str, quoted); + break; + case QUOTED_SEND_FORWARD: + g_string_prepend(re_sub, _("Fwd: ")); + new_editor_with_presets(modest_ui, /* from */ "", /* cc */ "", /* bcc */ "", re_sub->str, quoted); + break; + default: + break; + } + g_free(quoted); + g_free(unquoted); + g_string_free(re_sub, TRUE); +} + + +static void +on_reply_clicked (GtkWidget *widget, ModestUI *modest_ui) +{ + quoted_send_msg (modest_ui, QUOTED_SEND_REPLY); } +static void +on_forward_clicked (GtkWidget *widget, ModestUI *modest_ui) +{ + quoted_send_msg (modest_ui, QUOTED_SEND_FORWARD); +} + -/* FIXME: truly evil --> we cannot really assume that - * there is only one edit window open... - */ static void -on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui) +on_send_button_clicked (GtkWidget *widget, ModestEditorWindow *modest_editwin) { ModestTnyTransportActions *actions; + ModestUI *modest_ui; ModestUIPrivate *priv; GtkWidget *to_entry, *subject_entry, *body_view; - const gchar *to, *subject; + const gchar *to, *subject, *email_from; gchar *body; GtkTextIter start, end; GtkTextBuffer *buf; - TnyAccountStoreIface *account_store; + /* TnyAccountStoreIface *account_store; const GList *transport_accounts; TnyTransportAccountIface *transport_account; + ModestConf *conf; */ + ModestIdentityMgr *id_mgr; + EditWinData *win_data; + + + win_data = modest_editor_window_get_data(modest_editwin); + modest_ui = win_data->modest_ui; g_return_if_fail (modest_ui); actions = MODEST_TNY_TRANSPORT_ACTIONS (modest_tny_transport_actions_new ()); - priv = MODEST_UI_GET_PRIVATE(modest_ui); + priv = MODEST_UI_GET_PRIVATE(modest_ui); +#if 0 account_store = priv->account_store; transport_accounts = tny_account_store_iface_get_transport_accounts (account_store); @@ -1005,10 +1241,10 @@ on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui) } else /* take the first one! */ transport_account = TNY_TRANSPORT_ACCOUNT_IFACE(transport_accounts->data); - - to_entry = glade_xml_get_widget (priv->glade_xml, "to_entry"); - subject_entry = glade_xml_get_widget (priv->glade_xml, "subject_entry"); - body_view = glade_xml_get_widget (priv->glade_xml, "body_view"); +#endif + to_entry = glade_xml_get_widget (win_data->glade_xml, "to_entry"); + subject_entry = glade_xml_get_widget (win_data->glade_xml, "subject_entry"); + body_view = glade_xml_get_widget (win_data->glade_xml, "body_view"); to = gtk_entry_get_text (GTK_ENTRY(to_entry)); subject = gtk_entry_get_text (GTK_ENTRY(subject_entry)); @@ -1017,18 +1253,119 @@ on_send_button_clicked (GtkWidget *widget, ModestUI *modest_ui) gtk_text_buffer_get_bounds (buf, &start, &end); body = gtk_text_buffer_get_text (buf, &start, &end, FALSE); - g_message ("sending %s ==> %s", subject, to); + id_mgr = priv->modest_id_mgr; + email_from = modest_identity_mgr_get_identity_string(id_mgr, + MODEST_IDENTITY_DEFAULT_IDENTITY, + MODEST_IDENTITY_EMAIL, NULL); + + g_message("sending \"%s\" %s ==> %s", subject, email_from, to); +/* modest_tny_transport_actions_send_message (actions, transport_account, - "dirk-jan.binnema@nokia.com", + email_from, to, "", "", subject, body); +*/ g_free (body); g_object_unref (G_OBJECT(actions)); - gtk_entry_set_text (GTK_ENTRY(to_entry), ""); - gtk_entry_set_text (GTK_ENTRY(subject_entry), ""); - gtk_text_buffer_set_text (buf, "", 0); + gtk_widget_hide (GTK_WIDGET(modest_editwin)); + modest_window_mgr_unregister(priv->modest_window_mgr, G_OBJECT(modest_editwin)); + if (GTK_IS_WIDGET(modest_editwin)) { + gtk_widget_destroy(GTK_WIDGET(modest_editwin)); + } else + g_warning("editor window has vanished!"); +} + + +static void +on_delete_clicked (GtkWidget *widget, ModestUI *modest_ui) +{ + GtkTreeSelection *sel; + GtkWidget *paned; + GtkTreeModel *model; + GtkTreeIter iter; + GtkScrolledWindow *scroll; + GtkTreeModel *mymodel; + + ModestTnyHeaderTreeView *header_view; + ModestTnyMsgView *msg_view; + ModestUIPrivate *priv; + + g_return_if_fail (modest_ui); + + priv = MODEST_UI_GET_PRIVATE(modest_ui); + + paned = glade_xml_get_widget (priv->glade_xml,"mail_paned"); + g_return_if_fail (paned); + + scroll = GTK_SCROLLED_WINDOW(gtk_paned_get_child1 (GTK_PANED(paned))); + g_return_if_fail (scroll); + + msg_view = MODEST_TNY_MSG_VIEW(gtk_paned_get_child2 (GTK_PANED(paned))); + g_return_if_fail (msg_view); + + header_view = MODEST_TNY_HEADER_TREE_VIEW(gtk_bin_get_child (GTK_BIN(scroll))); + g_return_if_fail (header_view); + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(header_view)); + g_return_if_fail (sel); + + /* get all selected mails */ + if (G_LIKELY (gtk_tree_selection_get_selected (sel, &model, &iter))) + { + TnyMsgHeaderIface *header; + + gtk_tree_model_get (model, &iter, TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN, + &header, -1); + + if (G_LIKELY (header)) + { + TnyMsgFolderIface *folder; + // const TnyMsgIface *msg; + + if (GTK_IS_TREE_MODEL_SORT (model)) + { + mymodel = gtk_tree_model_sort_get_model + (GTK_TREE_MODEL_SORT (model)); + } else + mymodel = model; + + folder = (TnyMsgFolderIface*)tny_msg_header_iface_get_folder (header); + + /* this will make the message as deleted */ + /* tny_msg_folder_iface_expunge (folder); will finally delete messages */ + if (TNY_IS_MSG_FOLDER (folder)) + tny_msg_folder_iface_remove_message (folder, header); + gtk_widget_queue_draw (GTK_WIDGET (header_view)); + } + } +} + +static void +on_sendreceive_button_clicked (GtkWidget *widget, ModestUI *modest_ui) +{ + ModestUIPrivate *priv; + ModestTnyStoreActions *store_actions; + TnyAccountStoreIface *account_store; + const GList *store_accounts; + const GList *iter; + + g_return_if_fail (modest_ui); + + store_actions = MODEST_TNY_STORE_ACTIONS (modest_tny_store_actions_new ()); + priv = MODEST_UI_GET_PRIVATE(modest_ui); + + account_store = priv->account_store; + store_accounts = + tny_account_store_iface_get_store_accounts (account_store); + + for (iter = store_accounts; iter; iter = iter->next) + modest_tny_store_actions_update_folders (store_actions, + TNY_STORE_ACCOUNT_IFACE (iter->data)); + + /* TODO, lock, refresh display */ + + g_object_unref (store_actions); - gtk_widget_hide (glade_xml_get_widget (priv->glade_xml, "new_mail")); }