X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=e0e4bffe04f4611ddc17b0ac5bb3882cd1aee84a;hb=5ae42e29904ef64c4385d848e49c28841a94ba36;hp=0a4d0487ee9feeaf718657595a96a3a9e21d5332;hpb=743e873cec314890274da455f2755ac715265e7f;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 0a4d048..e0e4bff 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -35,13 +35,15 @@ #include #include #include +#include + #include "modest-ui-actions.h" #include "modest-tny-platform-factory.h" #include -#include "modest-account-view-window.h" #include +#include #include "modest-account-mgr-helpers.h" #include "modest-mail-operation.h" @@ -53,7 +55,7 @@ typedef struct _GetMsgAsyncHelper { - ModestMainWindow *main_window; + ModestWindow *window; TnyIterator *iter; GFunc func; gpointer user_data; @@ -68,7 +70,7 @@ typedef enum _ReplyForwardAction { typedef struct _ReplyForwardHelper { guint reply_forward_type; ReplyForwardAction action; - gchar *account; + gchar *account_name; } ReplyForwardHelper; @@ -76,10 +78,8 @@ static void reply_forward_func (gpointer data, gpointer user_data); static void read_msg_func (gpointer data, gpointer user_data); static void get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data); - static void reply_forward (GtkWidget *widget, ReplyForwardAction action, - ModestMainWindow *main_window); - + ModestWindow *win); static gchar* ask_for_folder_name (GtkWindow *parent_window, const gchar *title); @@ -109,25 +109,48 @@ modest_ui_actions_on_about (GtkWidget *widget, ModestWindow *win) gtk_widget_destroy(about); } + +static TnyList * +get_selected_headers (ModestWindow *win) +{ + if (MODEST_IS_MAIN_WINDOW(win)) { + GtkWidget *header_view; + + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + return modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); + + } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) { + /* for MsgViewWindows, we simply return a list with one element */ + TnyMsg *msg; + TnyHeader *header; + TnyList *list = NULL; + + msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW(win)); + if (msg) { + header = tny_msg_get_header (msg); + list = tny_simple_list_new (); + tny_list_prepend (list, G_OBJECT(header)); + g_object_unref (G_OBJECT(header)); + } + return list; + + } else + return NULL; +} + void -modest_ui_actions_on_delete (GtkWidget *widget, ModestMainWindow *main_window) +modest_ui_actions_on_delete (GtkWidget *widget, ModestWindow *win) { TnyList *header_list; TnyIterator *iter; - GtkTreeModel *model; - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - if (!main_window->header_view) - return; - - header_list = modest_header_view_get_selected_headers (main_window->header_view); + g_return_if_fail (MODEST_IS_WINDOW(win)); + + header_list = get_selected_headers (win); if (header_list) { iter = tny_list_create_iterator (header_list); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (main_window->header_view)); - if (GTK_IS_TREE_MODEL_SORT (model)) - model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model)); do { TnyHeader *header; ModestMailOperation *mail_op; @@ -139,18 +162,15 @@ modest_ui_actions_on_delete (GtkWidget *widget, ModestMainWindow *main_window) /* TODO: add confirmation dialog */ - /* Move to trash */ - modest_mail_operation_remove_msg (mail_op, header, TRUE); + /* Move to trash. TODO: Still not supported */ + modest_mail_operation_remove_msg (mail_op, header, FALSE); - /* Remove from tree model */ - if (modest_mail_operation_get_status (mail_op) == - MODEST_MAIL_OPERATION_STATUS_SUCCESS) - tny_list_remove (TNY_LIST (model), G_OBJECT (header)); - else { - /* TODO: error handling management */ + if (modest_mail_operation_get_status (mail_op) != + MODEST_MAIL_OPERATION_STATUS_SUCCESS) { const GError *error; error = modest_mail_operation_get_error (mail_op); - g_warning (error->message); + if (error) + g_warning (error->message); } g_object_unref (G_OBJECT (mail_op)); @@ -186,40 +206,73 @@ void modest_ui_actions_on_new_msg (GtkWidget *widget, ModestWindow *win) { ModestWindow *msg_win; - TnyMsg *msg; - gchar *account; - gchar *from_str; + TnyMsg *msg = NULL; + TnyFolder *folder = NULL; + gchar *account_name = NULL; + gchar *from_str = NULL; + GError *err = NULL; + TnyAccount *account; + + account_name = g_strdup(modest_window_get_active_account (win)); + if (!account_name) + account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + + account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + account_name, + TNY_ACCOUNT_TYPE_STORE); + if (!account) { + g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name); + goto cleanup; + } - account = g_strdup(modest_window_get_active_account (win)); - if (!account) - account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + from_str = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), account_name); + + msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); + if (!msg) { + g_printerr ("modest: failed to create new msg\n"); + goto cleanup; + } - from_str = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), - account); + folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); + if (!folder) { + g_printerr ("modest: failed to find Drafts folder\n"); + goto cleanup; + } - msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); - msg_win = modest_msg_edit_window_new (msg, account); + tny_folder_add_msg (folder, msg, &err); + if (err) { + g_printerr ("modest: error adding msg to Drafts folder: %s", + err->message); + g_error_free (err); + goto cleanup; + } + + msg_win = modest_msg_edit_window_new (msg, account_name); if (win) gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (win)); - g_free (account); - g_free (from_str); - g_object_unref (G_OBJECT(msg)); - gtk_widget_show_all (GTK_WIDGET (msg_win)); + +cleanup: + g_free (account_name); + g_free (from_str); + if (account) + g_object_unref (G_OBJECT(account)); + if (msg) + g_object_unref (G_OBJECT(msg)); + if (folder) + g_object_unref (G_OBJECT(folder)); } void modest_ui_actions_on_open (GtkWidget *widget, ModestWindow *win) { - /* FIXME */ - + modest_runtime_not_implemented (GTK_WINDOW(win)); /* FIXME */ } - static void reply_forward_func (gpointer data, gpointer user_data) { @@ -229,19 +282,21 @@ reply_forward_func (gpointer data, gpointer user_data) ModestWindow *msg_win; ModestEditType edit_type; gchar *from; + GError *err = NULL; + TnyFolder *folder = NULL; + TnyAccount *account = NULL; msg = TNY_MSG (data); helper = (GetMsgAsyncHelper *) user_data; rf_helper = (ReplyForwardHelper *) helper->user_data; from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), - rf_helper->account); + rf_helper->account_name); /* Create reply mail */ switch (rf_helper->action) { case ACTION_REPLY: new_msg = - modest_mail_operation_create_reply_mail (msg, - from, + modest_mail_operation_create_reply_mail (msg, from, rf_helper->reply_forward_type, MODEST_MAIL_OPERATION_REPLY_MODE_SENDER); break; @@ -258,31 +313,56 @@ reply_forward_func (gpointer data, gpointer user_data) break; default: g_return_if_reached (); + return; } if (!new_msg) { - g_warning ("Unable to create a message"); + g_printerr ("modest: failed to create message\n"); goto cleanup; } - + + account = modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + rf_helper->account_name, + TNY_ACCOUNT_TYPE_STORE); + if (!account) { + g_printerr ("modest: failed to get tnyaccount for '%s'\n", rf_helper->account_name); + goto cleanup; + } + + folder = modest_tny_account_get_special_folder (account, TNY_FOLDER_TYPE_DRAFTS); + if (!folder) { + g_printerr ("modest: failed to find Drafts folder\n"); + goto cleanup; + } + + tny_folder_add_msg (folder, msg, &err); + if (err) { + g_printerr ("modest: error adding msg to Drafts folder: %s", + err->message); + g_error_free (err); + goto cleanup; + } + /* Show edit window */ - msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account); + msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name); gtk_widget_show_all (GTK_WIDGET (msg_win)); - - /* Clean */ - g_object_unref (G_OBJECT (new_msg)); - cleanup: - g_free (rf_helper->account); +cleanup: + if (new_msg) + g_object_unref (G_OBJECT (new_msg)); + if (folder) + g_object_unref (G_OBJECT (folder)); + if (account) + g_object_unref (G_OBJECT (account)); + + g_free (rf_helper->account_name); g_slice_free (ReplyForwardHelper, rf_helper); } - /* * Common code for the reply and forward actions */ static void -reply_forward (GtkWidget *widget, ReplyForwardAction action, - ModestMainWindow *main_window) +reply_forward (GtkWidget *widget, ReplyForwardAction action, ModestWindow *win) { TnyList *header_list; guint reply_forward_type; @@ -290,11 +370,10 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, TnyFolder *folder; GetMsgAsyncHelper *helper; ReplyForwardHelper *rf_helper; + + g_return_if_fail (MODEST_IS_WINDOW(win)); - if (!main_window->header_view) - return; - - header_list = modest_header_view_get_selected_headers (main_window->header_view); + header_list = get_selected_headers (win); if (!header_list) return; @@ -305,89 +384,132 @@ reply_forward (GtkWidget *widget, ReplyForwardAction action, same folder and that we reply all of them from the same account. In fact the interface currently only allows single selection */ - + /* Fill helpers */ rf_helper = g_slice_new0 (ReplyForwardHelper); rf_helper->reply_forward_type = reply_forward_type; rf_helper->action = action; - rf_helper->account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());; + + rf_helper->account_name = g_strdup (modest_window_get_active_account (win)); + if (!rf_helper->account_name) + rf_helper->account_name = + modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); helper = g_slice_new0 (GetMsgAsyncHelper); - helper->main_window = main_window; + helper->window = win; helper->func = reply_forward_func; helper->iter = tny_list_create_iterator (header_list); helper->user_data = rf_helper; - - header = TNY_HEADER (tny_iterator_get_current (helper->iter)); - folder = tny_header_get_folder (header); - - /* The callback will call it per each header */ - tny_folder_get_msg_async (folder, header, get_msg_cb, helper); - - /* Clean */ - g_object_unref (G_OBJECT (header)); - g_object_unref (G_OBJECT (folder)); + + if (MODEST_IS_MSG_VIEW_WINDOW(win)) { + TnyMsg *msg; + msg = modest_msg_view_window_get_message(MODEST_MSG_VIEW_WINDOW(win)); + if (!msg) { + g_printerr ("modest: no message found\n"); + return; + } else + reply_forward_func (msg, helper); + } else { + header = TNY_HEADER (tny_iterator_get_current (helper->iter)); + folder = tny_header_get_folder (header); + if (folder) { + /* The callback will call it per each header */ + tny_folder_get_msg_async (folder, header, get_msg_cb, helper); + g_object_unref (G_OBJECT (folder)); + } else + g_printerr ("modest: no folder for header\n"); + + /* Clean */ + g_object_unref (G_OBJECT (header)); + } } + void -modest_ui_actions_on_reply (GtkWidget *widget, ModestMainWindow *main_window) +modest_ui_actions_on_reply (GtkWidget *widget, ModestWindow *win) { - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + g_return_if_fail (MODEST_IS_WINDOW(win)); - reply_forward (widget, ACTION_REPLY, main_window); + reply_forward (widget, ACTION_REPLY, win); } void -modest_ui_actions_on_forward (GtkWidget *widget, ModestMainWindow *main_window) +modest_ui_actions_on_forward (GtkWidget *widget, ModestWindow *win) { - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + g_return_if_fail (MODEST_IS_WINDOW(win)); - reply_forward (widget, ACTION_FORWARD, main_window); + reply_forward (widget, ACTION_FORWARD, win); } void -modest_ui_actions_on_reply_all (GtkWidget *widget,ModestMainWindow *main_window) +modest_ui_actions_on_reply_all (GtkWidget *widget,ModestWindow *win) { - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + g_return_if_fail (MODEST_IS_WINDOW(win)); - reply_forward (widget, ACTION_REPLY_TO_ALL, main_window); + reply_forward (widget, ACTION_REPLY_TO_ALL, win); } void modest_ui_actions_on_next (GtkWidget *widget, ModestMainWindow *main_window) { + GtkWidget *header_view; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - if (main_window->header_view) - modest_header_view_select_next (main_window->header_view); + header_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) + return; + + modest_header_view_select_next (MODEST_HEADER_VIEW(header_view)); } void modest_ui_actions_on_prev (GtkWidget *widget, ModestMainWindow *main_window) { + GtkWidget *header_view; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - if (main_window->header_view) - modest_header_view_select_prev (main_window->header_view); + header_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) + return; + + modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view)); } void modest_ui_actions_on_send_receive (GtkWidget *widget, ModestWindow *win) { - TnyDevice *device; - TnyAccountStore *account_store; + gchar *account_name; + TnyAccount *tny_account; + ModestTnySendQueue *send_queue; - /* Get device. Do not ask the platform factory for it, because - it returns always a new one */ - account_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); - device = tny_account_store_get_device (account_store); - - tny_device_force_online (device); + account_name = + g_strdup(modest_window_get_active_account(MODEST_WINDOW(win))); + if (!account_name) + account_name = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); + if (!account_name) { + g_printerr ("modest: cannot get account\n"); + return; + } - /* FIXME: refresh the folders */ + tny_account = + modest_tny_account_store_get_tny_account_by_account (modest_runtime_get_account_store(), + account_name, + TNY_ACCOUNT_TYPE_TRANSPORT); + if (!tny_account) { + g_printerr ("modest: cannot get tny transport account\n"); + return; + } + + send_queue = modest_tny_send_queue_new (TNY_CAMEL_TRANSPORT_ACCOUNT(tny_account)); + modest_tny_send_queue_flush (send_queue); + + g_object_unref (G_OBJECT(send_queue)); + g_object_unref (G_OBJECT(tny_account)); } @@ -396,25 +518,30 @@ void modest_ui_actions_toggle_view (GtkWidget *widget, ModestMainWindow *main_window) { ModestConf *conf; + GtkWidget *header_view; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - if (!main_window->header_view) + + header_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) return; + conf = modest_runtime_get_conf (); /* what is saved/restored is depending on the style; thus; we save with * old style, then update the style, and restore for this new style*/ - modest_widget_memory_save (conf, G_OBJECT(main_window->header_view), "header-view"); + modest_widget_memory_save (conf, G_OBJECT(header_view), "header-view"); - if (modest_header_view_get_style (main_window->header_view) == MODEST_HEADER_VIEW_STYLE_DETAILS) - modest_header_view_set_style (main_window->header_view, + if (modest_header_view_get_style + (MODEST_HEADER_VIEW(header_view)) == MODEST_HEADER_VIEW_STYLE_DETAILS) + modest_header_view_set_style (MODEST_HEADER_VIEW(header_view), MODEST_HEADER_VIEW_STYLE_TWOLINES); else - modest_header_view_set_style (main_window->header_view, + modest_header_view_set_style (MODEST_HEADER_VIEW(header_view), MODEST_HEADER_VIEW_STYLE_DETAILS); - modest_widget_memory_restore (conf, G_OBJECT(main_window->header_view), + modest_widget_memory_restore (conf, G_OBJECT(header_view), "header-view"); } @@ -430,11 +557,14 @@ read_msg_func (gpointer data, gpointer user_data) TnyHeader *header; GetMsgAsyncHelper *helper; TnyHeaderFlags header_flags; - + GtkWidget *msg_preview; + msg = TNY_MSG (data); helper = (GetMsgAsyncHelper *) user_data; - if (!helper->main_window->msg_preview) + msg_preview = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (helper->window), + MODEST_WIDGET_TYPE_MSG_PREVIEW); + if (!msg_preview) return; /* mark message as seen; _set_flags crashes, bug in tinymail? */ @@ -444,8 +574,7 @@ read_msg_func (gpointer data, gpointer user_data) g_object_unref (G_OBJECT (header)); /* Set message on msg view */ - modest_msg_view_set_message (helper->main_window->msg_preview, - msg); + modest_msg_view_set_message (MODEST_MSG_VIEW(msg_preview), msg); } /* @@ -465,12 +594,9 @@ get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data) helper = (GetMsgAsyncHelper *) user_data; if ((*err && ((*err)->code == TNY_FOLDER_ERROR_GET_MSG)) || !msg) { - ModestHeaderView *header_view = - helper->main_window->header_view; - if (header_view) - modest_ui_actions_on_item_not_found (header_view, - MODEST_ITEM_TYPE_MESSAGE, - MODEST_WINDOW(helper->main_window)); + modest_ui_actions_on_item_not_found (NULL, + MODEST_ITEM_TYPE_MESSAGE, + helper->window); return; } @@ -496,21 +622,25 @@ get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data) } void -modest_ui_actions_on_header_selected (ModestHeaderView *folder_view, TnyHeader *header, +modest_ui_actions_on_header_selected (ModestHeaderView *folder_view, + TnyHeader *header, ModestMainWindow *main_window) { + GtkWidget *msg_preview; TnyFolder *folder; GetMsgAsyncHelper *helper; TnyList *list; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - if (!main_window->msg_preview) + + msg_preview = modest_main_window_get_child_widget(main_window, + MODEST_WIDGET_TYPE_MSG_PREVIEW); + if (!msg_preview) return; /* when there's no header, clear the msgview */ if (!header) { - modest_msg_view_set_message (main_window->msg_preview, NULL); + modest_msg_view_set_message (MODEST_MSG_VIEW(msg_preview), NULL); return; } @@ -522,7 +652,7 @@ modest_ui_actions_on_header_selected (ModestHeaderView *folder_view, TnyHead /* Fill helper data */ helper = g_slice_new0 (GetMsgAsyncHelper); - helper->main_window = main_window; + helper->window = MODEST_WINDOW (main_window); helper->iter = tny_list_create_iterator (list); helper->func = read_msg_func; @@ -538,7 +668,7 @@ modest_ui_actions_on_header_selected (ModestHeaderView *folder_view, TnyHead void modest_ui_actions_on_header_activated (ModestHeaderView *folder_view, TnyHeader *header, - ModestMainWindow *main_window) + ModestMainWindow *main_window) { ModestWindow *win; TnyFolder *folder = NULL; @@ -579,13 +709,9 @@ cleanup: if (folder) g_object_unref (G_OBJECT (folder)); if (msg) - g_object_unref (G_OBJECT (folder)); + g_object_unref (G_OBJECT (msg)); } - - - - void modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, TnyFolder *folder, @@ -595,7 +721,8 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, // GtkLabel *folder_info_label; gchar *txt; ModestConf *conf; - + GtkWidget *header_view; + /* folder_info_label = */ /* GTK_LABEL (modest_widget_factory_get_folder_info_label */ /* (modest_runtime_get_widget_factory())); */ @@ -606,17 +733,18 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, /* } */ g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - if (!main_window->header_view) - return; + header_view = modest_main_window_get_child_widget(main_window, + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) + return; + conf = modest_runtime_get_conf (); if (!selected) { /* the folder was unselected; save it's settings */ - modest_widget_memory_save (conf, G_OBJECT (main_window->header_view), - "header-view"); + modest_widget_memory_save (conf, G_OBJECT (header_view), "header-view"); gtk_window_set_title (GTK_WINDOW(main_window), "Modest"); - modest_header_view_set_folder (main_window->header_view, NULL); + modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL); } else { /* the folder was selected */ if (folder) { /* folder may be NULL */ guint num, unread; @@ -636,8 +764,8 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, //gtk_label_set_label (GTK_LABEL(folder_info_label), txt); g_free (txt); } - modest_header_view_set_folder (main_window->header_view, folder); - modest_widget_memory_restore (conf, G_OBJECT(main_window->header_view), + modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), folder); + modest_widget_memory_restore (conf, G_OBJECT(header_view), "header-view"); } } @@ -672,16 +800,21 @@ statusbar_push (ModestMainWindow *main_window, guint context_id, const gchar *ms if (!msg) return; - if (main_window->progress_bar) { - gtk_widget_show (main_window->progress_bar); - g_timeout_add (3000, (GSourceFunc)progress_bar_clean, - main_window->progress_bar); + GtkWidget *progress_bar, *status_bar; + + progress_bar = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_PROGRESS_BAR); + status_bar = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_STATUS_BAR); + if (progress_bar) { + gtk_widget_show (progress_bar); + g_timeout_add (3000, (GSourceFunc)progress_bar_clean, progress_bar); } - if (main_window->status_bar) { - gtk_widget_show (main_window->status_bar); - gtk_statusbar_push (GTK_STATUSBAR(main_window->status_bar), 0, msg); - g_timeout_add (1500, (GSourceFunc)statusbar_clean, main_window->status_bar); + if (status_bar) { + gtk_widget_show (status_bar); + gtk_statusbar_push (GTK_STATUSBAR(status_bar), 0, msg); + g_timeout_add (2500, (GSourceFunc)statusbar_clean, status_bar); } } @@ -694,19 +827,12 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp GtkWidget *dialog; gchar *txt, *item; gboolean online; - TnyDevice *device; - TnyAccountStore *account_store; item = (type == MODEST_ITEM_TYPE_FOLDER) ? "folder" : "message"; - /* Get device. Do not ask the platform factory for it, because - it returns always a new one */ - account_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); - device = tny_account_store_get_device (account_store); - if (g_main_depth > 0) gdk_threads_enter (); - online = tny_device_is_online (device); + online = tny_device_is_online (modest_runtime_get_device()); if (online) { /* already online -- the item is simply not there... */ @@ -718,7 +844,6 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp item); gtk_dialog_run (GTK_DIALOG(dialog)); } else { - dialog = gtk_dialog_new_with_buttons (_("Connection requested"), GTK_WINDOW (win), GTK_DIALOG_MODAL, @@ -727,7 +852,6 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); - txt = g_strdup_printf (_("This %s is not available in offline mode.\n" "Do you want to get online?"), item); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), @@ -737,7 +861,7 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300); if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - tny_device_force_online (device); + tny_device_force_online (modest_runtime_get_device()); } } gtk_widget_destroy (dialog); @@ -753,20 +877,23 @@ modest_ui_actions_on_header_status_update (ModestHeaderView *header_view, gint total, ModestMainWindow *main_window) { char* txt; + GtkWidget *progress_bar; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - if (!main_window->progress_bar) - return; + progress_bar = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_PROGRESS_BAR); + if (!progress_bar) + return; + if (total != 0) - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(main_window->progress_bar), + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar), (gdouble)num/(gdouble)total); else - gtk_progress_bar_pulse (GTK_PROGRESS_BAR(main_window->progress_bar)); + gtk_progress_bar_pulse (GTK_PROGRESS_BAR(progress_bar)); txt = g_strdup_printf (_("Downloading %d of %d"), num, total); - gtk_progress_bar_set_text (GTK_PROGRESS_BAR(main_window->progress_bar), txt); + gtk_progress_bar_set_text (GTK_PROGRESS_BAR(progress_bar), txt); g_free (txt); statusbar_push (main_window, 0, msg); @@ -777,7 +904,7 @@ void modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link, ModestWindow *win) { - g_warning (__FUNCTION__); + g_message (__FUNCTION__); } @@ -785,14 +912,14 @@ void modest_ui_actions_on_msg_link_clicked (ModestMsgView *msgview, const gchar* link, ModestWindow *win) { - g_warning (__FUNCTION__); + g_message (__FUNCTION__); } void modest_ui_actions_on_msg_attachment_clicked (ModestMsgView *msgview, int index, ModestWindow *win) { - g_warning (__FUNCTION__); + g_message (__FUNCTION__); } @@ -896,18 +1023,21 @@ ask_for_folder_name (GtkWindow *parent_window, return folder_name; } - + void modest_ui_actions_on_new_folder (GtkWidget *widget, ModestMainWindow *main_window) { TnyFolder *parent_folder; - - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + GtkWidget *folder_view; - if (!main_window->folder_view) + g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + + folder_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (!folder_view) return; - parent_folder = modest_folder_view_get_selected (main_window->folder_view); + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (parent_folder) { gchar *folder_name; @@ -924,12 +1054,12 @@ modest_ui_actions_on_new_folder (GtkWidget *widget, ModestMainWindow *main_windo TNY_FOLDER_STORE (parent_folder), (const gchar *) folder_name); if (new_folder) { - /* TODO: tinymail should do this. - Update view */ - modest_folder_view_add_subfolder (main_window->folder_view, new_folder); - - /* Free new folder */ g_object_unref (new_folder); + } else { + const GError *error; + error = modest_mail_operation_get_error (mail_op); + if (error) + g_warning ("Error adding a subfolder: %s\n", error->message); } g_object_unref (mail_op); } @@ -942,17 +1072,19 @@ modest_ui_actions_on_rename_folder (GtkWidget *widget, ModestMainWindow *main_window) { TnyFolder *folder; - + GtkWidget *folder_view; + g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - if (!main_window->folder_view) + folder_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (!folder_view) return; - folder = modest_folder_view_get_selected (main_window->folder_view); - + folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (folder) { gchar *folder_name; - folder_name = ask_for_folder_name (GTK_WINDOW (main_window), _("Please enter a new name for the folder")); @@ -966,12 +1098,9 @@ modest_ui_actions_on_rename_folder (GtkWidget *widget, (const gchar *) folder_name); error = modest_mail_operation_get_error (mail_op); - if (!error) - /* TODO: tinymail should do this. - Update view */ - modest_folder_view_rename (main_window->folder_view); - - /* TODO: else ? notify error ? */ + if (error) + /* TODO: notify error ? */ + g_warning ("Could not rename a folder: %s\n", error->message); g_object_unref (mail_op); } @@ -984,14 +1113,25 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) { TnyFolder *folder; ModestMailOperation *mail_op; + GtkWidget *folder_view; + const GError *error; - if (!main_window->folder_view) - return; + g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - folder = modest_folder_view_get_selected (main_window->folder_view); + folder_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (!folder_view) + return; + folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + mail_op = modest_mail_operation_new (); modest_mail_operation_remove_folder (mail_op, folder, move_to_trash); + + error = modest_mail_operation_get_error (mail_op); + if (error) + g_warning ("%s\n", error->message); + g_object_unref (mail_op); } @@ -1013,32 +1153,56 @@ modest_ui_actions_on_move_folder_to_trash_folder (GtkWidget *widget, ModestMainW } void -modest_ui_actions_on_accounts_reloaded (TnyAccountStore *store, gpointer user_data) +modest_ui_actions_on_password_requested (TnyAccountStore *account_store, + const gchar* account_name, + gchar **password, + gboolean *cancel, + gboolean *remember, + ModestMainWindow *main_window) { - /* FIXME */ - /* ModestFolderView *folder_view; */ + gchar *txt; + GtkWidget *dialog, *entry, *remember_pass_check; + + dialog = gtk_dialog_new_with_buttons (_("Password requested"), + NULL, + GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + NULL); + gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(main_window)); -/* folder_view = modest_widget_factory_get_folder_view (modest_runtime_get_widget_factory()); */ -/* modest_folder_view_update_model (folder_view, store); */ -} + txt = g_strdup_printf (_("Please enter your password for %s"), account_name); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt), + FALSE, FALSE, 0); + g_free (txt); -void -modest_ui_actions_on_folder_moved (ModestFolderView *folder_view, TnyFolder *folder, - TnyFolderStore *parent, gboolean *done, - gpointer user_data) -{ - ModestMailOperation *mail_op; - const GError *error; + entry = gtk_entry_new_with_max_length (40); + gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE); + gtk_entry_set_invisible_char (GTK_ENTRY(entry), 0x2022); /* bullet unichar */ + + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, + TRUE, FALSE, 0); - *done = TRUE; + remember_pass_check = gtk_check_button_new_with_label (_("Remember password")); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check, + TRUE, FALSE, 0); - /* Try to move the folder */ - mail_op = modest_mail_operation_new (); - modest_mail_operation_move_folder (mail_op, folder, parent); + gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); + + if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { + *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry))); + *cancel = FALSE; + } else { + *password = NULL; + *cancel = TRUE; + } - error = modest_mail_operation_get_error (mail_op); - if (error) - *done = FALSE; + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (remember_pass_check))) + *remember = TRUE; + else + *remember = FALSE; - g_object_unref (G_OBJECT (mail_op)); + gtk_widget_destroy (dialog); }