* Fixes NB#110316, hide "Move" & "Delete" menu options if there are no messages
[modest] / src / modest-ui-actions.c
index 9bb5a1f..0fae3f9 100644 (file)
@@ -109,6 +109,7 @@ typedef struct _ReplyForwardHelper {
        guint reply_forward_type;
        ReplyForwardAction action;
        gchar *account_name;
+       gchar *mailbox;
        GtkWidget *parent_window;
        TnyHeader *header;
 } ReplyForwardHelper;
@@ -792,6 +793,7 @@ modest_ui_actions_compose_msg(ModestWindow *win,
        TnyAccount *account = NULL;
        TnyFolder *folder = NULL;
        gchar *from_str = NULL, *signature = NULL, *body = NULL;
+       gchar *recipient = NULL;
        gboolean use_signature = FALSE;
        ModestWindow *msg_win = NULL;
        ModestAccountMgr *mgr = modest_runtime_get_account_mgr();
@@ -803,7 +805,8 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                goto cleanup;
 
 #ifdef MODEST_TOOLKIT_HILDON2
-       account_name = g_strdup (modest_window_get_active_account(win));
+       if (win)
+               account_name = g_strdup (modest_window_get_active_account(win));
 #endif
        if (!account_name) {
                account_name = modest_account_mgr_get_default_account(mgr);
@@ -813,7 +816,10 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                goto cleanup;
        }
 
-       mailbox = modest_window_get_active_mailbox (win);
+       if (win)
+               mailbox = modest_window_get_active_mailbox (win);
+       else
+               mailbox = NULL;
        account = modest_tny_account_store_get_server_account (store, account_name, TNY_ACCOUNT_TYPE_STORE);
        if (!account) {
                g_printerr ("modest: failed to get tnyaccount for '%s'\n", account_name);
@@ -830,7 +836,9 @@ modest_ui_actions_compose_msg(ModestWindow *win,
                goto cleanup;
        }
 
-       signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature);
+       recipient = modest_text_utils_get_email_address (from_str);
+       signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature);
+       g_free (recipient);
        if (body_str != NULL) {
                body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
        } else {
@@ -1009,7 +1017,6 @@ get_header_view_from_window (ModestWindow *window)
 static gchar *
 get_info_from_header (TnyHeader *header, gboolean *is_draft, gboolean *can_open)
 {
-       /* TODO: should also retrieve the mailbox from header */
        TnyFolder *folder;
        gchar *account = NULL;
        TnyFolderType folder_type = TNY_FOLDER_TYPE_UNKNOWN;
@@ -1140,14 +1147,16 @@ open_msg_cb (ModestMailOperation *mail_op,
                        g_free (mailbox);
        } else {
                gchar *uid = modest_tny_folder_get_header_unique_id (header);
+               const gchar *mailbox = NULL;
+
+               if (parent_win && MODEST_IS_WINDOW (parent_win))
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_win));
 
                if (helper->rowref && helper->model) {
-                       /* TODO: use mailbox */
-                       win = modest_msg_view_window_new_with_header_model (msg, account, NULL, (const gchar*) uid,
+                       win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid,
                                                                            helper->model, helper->rowref);
                } else {
-                       /* TODO: use mailbox */
-                       win = modest_msg_view_window_new_for_attachment (msg, account, NULL, (const gchar*) uid);
+                       win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid);
                }
                g_free (uid);
        }
@@ -1443,9 +1452,10 @@ open_msg_performer(gboolean canceled,
                header_view = get_header_view_from_window (MODEST_WINDOW (parent_window));
                uid = modest_tny_folder_get_header_unique_id (helper->header);
                if (header_view) {
-                       /* TODO: use mailbox */
+                       const gchar *mailbox = NULL;
+                       mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (parent_window));
                        window = modest_msg_view_window_new_from_header_view 
-                               (MODEST_HEADER_VIEW (header_view), account_name, NULL, uid, helper->rowref);
+                               (MODEST_HEADER_VIEW (header_view), account_name, mailbox, uid, helper->rowref);
                        if (window != NULL) {
                                if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
                                                                        window, NULL)) {
@@ -1654,6 +1664,7 @@ create_reply_forward_helper (ReplyForwardAction action,
 {
        ReplyForwardHelper *rf_helper = NULL;
        const gchar *active_acc = modest_window_get_active_account (win);
+       const gchar *active_mailbox = modest_window_get_active_mailbox (win);
 
        rf_helper = g_slice_new0 (ReplyForwardHelper);
        rf_helper->reply_forward_type = reply_forward_type;
@@ -1663,6 +1674,7 @@ create_reply_forward_helper (ReplyForwardAction action,
        rf_helper->account_name = (active_acc) ?
                g_strdup (active_acc) :
                modest_account_mgr_get_default_account (modest_runtime_get_account_mgr());
+       rf_helper->mailbox = g_strdup (active_mailbox);
 
        /* Note that window could be destroyed just AFTER calling
           register_window so we must ensure that this pointer does
@@ -1681,6 +1693,7 @@ free_reply_forward_helper (gpointer data)
 
        helper = (ReplyForwardHelper *) data;
        g_free (helper->account_name);
+       g_free (helper->mailbox);
        if (helper->header)
                g_object_unref (helper->header);
        if (helper->parent_window)
@@ -1706,6 +1719,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        ModestWindowMgr *mgr = NULL;
        gchar *signature = NULL;
        gboolean use_signature;
+       gchar *recipient;
 
        /* If there was any error. The mail operation could be NULL,
           this means that we already have the message downloaded and
@@ -1715,10 +1729,12 @@ reply_forward_cb (ModestMailOperation *mail_op,
                goto cleanup;
 
        from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(),
-                                                  rf_helper->account_name, NULL);
-       signature = modest_account_mgr_get_signature (modest_runtime_get_account_mgr(), 
-                                                     rf_helper->account_name, 
-                                                     &use_signature);
+                                                  rf_helper->account_name, rf_helper->mailbox);
+       recipient = modest_text_utils_get_email_address (from);
+       signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), 
+                                                                    recipient, 
+                                                                    &use_signature);
+       g_free (recipient);
 
        /* Create reply mail */
        switch (rf_helper->action) {
@@ -1767,8 +1783,7 @@ reply_forward_cb (ModestMailOperation *mail_op,
        }
 
        /* Create and register the windows */
-       /* TODO: fetch mailbox */
-       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, NULL, FALSE);
+       msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name, rf_helper->mailbox, FALSE);
        mgr = modest_runtime_get_window_mgr ();
        modest_window_mgr_register_window (mgr, msg_win, (ModestWindow *) rf_helper->parent_window);
 
@@ -2563,7 +2578,7 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
                     gpointer user_data)
 {
        ModestMainWindow *win = NULL;
-       GtkWidget *folder_view;
+       GtkWidget *folder_view, *header_view;
        const GError *error;
 
        g_return_if_fail (TNY_IS_FOLDER (folder));
@@ -2582,6 +2597,8 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
 
        folder_view =
                modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+       header_view =
+               modest_main_window_get_child_widget(win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
 
        if (folder_view) {
                TnyFolderStore *current_folder;
@@ -2596,10 +2613,10 @@ folder_refreshed_cb (ModestMailOperation *mail_op,
        }
 
        /* Check if folder is empty and set headers view contents style */
-       if (tny_folder_get_all_count (folder) == 0)
+       if ((tny_folder_get_all_count (folder) == 0) ||
+           modest_header_view_is_empty (MODEST_HEADER_VIEW (header_view)))
                modest_main_window_set_contents_style (win,
                                                       MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
-
 }
 
 void
@@ -3449,8 +3466,10 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
        if (!error)
                g_return_if_reached ();
 
-       if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
-           error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) {
+       if (is_memory_full_error ((GError *) error, mail_op)) {
+               message = _KR("cerm_device_memory_full");
+       } else if (error->domain == MODEST_MAIL_OPERATION_ERROR &&
+                  error->code == MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS) {
                message = _CS("ckdg_ib_folder_already_exists");
        } else if (error->domain == TNY_ERROR_DOMAIN &&
                   error->code == TNY_SERVICE_ERROR_STATE) {
@@ -5034,7 +5053,9 @@ create_move_to_dialog (GtkWindow *win,
        g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view);
 
        /* Hide special folders */
+#ifndef MODEST_TOOLKIT_HILDON2
        modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
+#endif
        if (list_to_move)
                modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move);
 #ifndef MODEST_TOOLKIT_HILDON2