Added bug 90185 to changelog
[modest] / src / modest-ui-actions.c
index e3511e8..b0a7961 100644 (file)
@@ -529,11 +529,11 @@ modest_ui_actions_on_delete_message (GtkAction *action, ModestWindow *win)
                        }
 
                        /* Free */
-                       if (next_row_reference != NULL) 
+                       if (gtk_tree_row_reference_valid (next_row_reference)) 
                                gtk_tree_row_reference_free (next_row_reference);
                        if (next_path != NULL) 
                                gtk_tree_path_free (next_path);                         
-                       if (prev_row_reference != NULL) 
+                       if (gtk_tree_row_reference_valid (prev_row_reference)) 
                                gtk_tree_row_reference_free (prev_row_reference);
                        if (prev_path != NULL) 
                                gtk_tree_path_free (prev_path);
@@ -737,9 +737,9 @@ modest_ui_actions_compose_msg(ModestWindow *win,
 
        signature = modest_account_mgr_get_signature (mgr, account_name, &use_signature);
        if (body_str != NULL) {
-               body = use_signature ? g_strconcat(body_str, "\n", signature, NULL) : g_strdup(body_str);
+               body = use_signature ? g_strconcat(body_str, "\n--\n", signature, NULL) : g_strdup(body_str);
        } else {
-               body = use_signature ? g_strconcat("\n", signature, NULL) : g_strdup("");
+               body = use_signature ? g_strconcat("\n--\n", signature, NULL) : g_strdup("");
        }
 
        msg = modest_tny_msg_new (to_str, from_str, cc_str, bcc_str, subject_str, body, NULL, NULL);
@@ -821,6 +821,19 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                        g_object_unref (source);
                }
 
+               if (error && ((error->code == TNY_SERVICE_ERROR_NO_SUCH_MESSAGE) ||
+                             error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE)) {
+                       gchar *subject, *msg;
+                       subject = tny_header_dup_subject (header);
+                       if (!subject)
+                               subject = g_strdup (_("mail_va_no_subject"));
+                       msg = g_strdup_printf (_("emev_ni_ui_imap_message_not_available_in_server"),
+                                              subject);
+                       modest_platform_run_information_dialog (NULL, msg, FALSE);
+                       g_free (msg);
+                       g_free (subject);
+               }
+
                /* Remove the header from the preregistered uids */
                modest_window_mgr_unregister_header (modest_runtime_get_window_mgr (),  
                                                     header);
@@ -1007,6 +1020,11 @@ is_memory_full_error (GError *error)
        gnome_vfs_uri_unref (cache_dir_uri);
 
        if ((error->code == TNY_SYSTEM_ERROR_MEMORY ||
+            /* When asking for a mail and no space left on device
+               tinymail returns this error */
+            error->code == TNY_SERVICE_ERROR_MESSAGE_NOT_AVAILABLE ||
+            /* When the folder summary could not be read or
+               written */
             error->code == TNY_IO_ERROR_WRITE ||
             error->code == TNY_IO_ERROR_READ) && 
            !enough_free_space) {
@@ -2497,7 +2515,7 @@ modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link,
                                     ModestWindow *win)
 {
        /* g_message ("%s %s", __FUNCTION__, link); */
-}      
+}
 
 
 void
@@ -2517,7 +2535,7 @@ modest_ui_actions_on_msg_link_contextual (ModestMsgView *msgview, const gchar* l
 void
 modest_ui_actions_on_msg_attachment_clicked (ModestMsgView *msgview, TnyMimePart *mime_part,
                                             ModestWindow *win)
-{              
+{
        /* we check for low-mem; in that case, show a warning, and don't allow
         * viewing attachments
         */
@@ -2563,37 +2581,31 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op,
        g_object_unref(edit_window);
 }
 
-gboolean
-modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edit_window)
+static gboolean
+enough_space_for_message (ModestMsgEditWindow *edit_window,
+                         MsgData *data)
 {
-       TnyTransportAccount *transport_account;
-       ModestMailOperation *mail_operation;
-       MsgData *data;
-       gchar *account_name, *from;
-       ModestAccountMgr *account_mgr;
-/*     char *info_text; */
-       gboolean had_error = FALSE;
+       TnyAccountStore *acc_store;
        guint64 available_disk, expected_size;
        gint parts_count;
        guint64 parts_size;
-       ModestMainWindow *win;
-
-       g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
-       
-       data = modest_msg_edit_window_get_msg_data (edit_window);
 
        /* Check size */
-       available_disk = modest_folder_available_space (NULL);
+       acc_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store());
+       available_disk = modest_utils_get_available_space (NULL);
        modest_msg_edit_window_get_parts_size (edit_window, &parts_count, &parts_size);
        expected_size = modest_tny_msg_estimate_size (data->plain_body,
-                                                data->html_body,
-                                                parts_count,
-                                                parts_size);
+                                                     data->html_body,
+                                                     parts_count,
+                                                     parts_size);
 
-       if ((available_disk != -1) && expected_size > available_disk) {
-               modest_msg_edit_window_free_msg_data (edit_window, data);
+       /* Double check: memory full condition or message too big */
+       if (available_disk < MIN_FREE_SPACE || 
+           expected_size > available_disk) {
 
-               modest_platform_information_banner (NULL, NULL, dgettext("ke-recv", "cerm_device_memory_full"));
+               modest_platform_information_banner (NULL, NULL, 
+                                                   dgettext("ke-recv", 
+                                                            "cerm_device_memory_full"));
                return FALSE;
        }
 
@@ -2603,13 +2615,9 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
         * MODEST_MAX_LOW_MEMORY_MESSAGE_SIZE (see modest-defs.h) this
         * should still allow for sending anything critical...
         */
-       if (expected_size > MODEST_MAX_LOW_MEMORY_MESSAGE_SIZE) {
-
-               if (modest_platform_check_memory_low (MODEST_WINDOW(edit_window), TRUE)) {
-                       modest_msg_edit_window_free_msg_data (edit_window, data);
-                       return FALSE;
-               }
-       }
+       if ((expected_size > MODEST_MAX_LOW_MEMORY_MESSAGE_SIZE) &&
+           modest_platform_check_memory_low (MODEST_WINDOW(edit_window), TRUE))
+               return FALSE;
 
        /*
         * djcb: we also make sure that the attachments are smaller than the max size
@@ -2622,6 +2630,29 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                        GTK_WINDOW(edit_window),
                        dgettext("ke-recv","memr_ib_operation_disabled"),
                        TRUE);
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+gboolean
+modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edit_window)
+{
+       TnyTransportAccount *transport_account;
+       ModestMailOperation *mail_operation;
+       MsgData *data;
+       gchar *account_name, *from;
+       ModestAccountMgr *account_mgr;
+       gboolean had_error = FALSE;
+       ModestMainWindow *win;
+
+       g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), FALSE);
+       
+       data = modest_msg_edit_window_get_msg_data (edit_window);
+
+       /* Check size */
+       if (!enough_space_for_message (edit_window, data)) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
                return FALSE;
        }
@@ -2644,7 +2675,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
 
        transport_account =
                TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
-                                     (modest_runtime_get_account_store(),
+                                     (modest_runtime_get_account_store (),
                                       account_name,
                                       TNY_ACCOUNT_TYPE_TRANSPORT));
        if (!transport_account) {
@@ -2742,62 +2773,27 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
 {
        TnyTransportAccount *transport_account = NULL;
        gboolean had_error = FALSE;
-       guint64 available_disk, expected_size;
-       gint parts_count;
-       guint64 parts_size;
+       MsgData *data;
+       ModestAccountMgr *account_mgr;
+       gchar *account_name;
+       gchar *from;
+       ModestMailOperation *mail_operation;
 
        g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window), TRUE);
 
        if (!modest_msg_edit_window_check_names (edit_window, TRUE))
                return TRUE;
        
-       MsgData *data = modest_msg_edit_window_get_msg_data (edit_window);
+       data = modest_msg_edit_window_get_msg_data (edit_window);
 
        /* Check size */
-       available_disk = modest_folder_available_space (NULL);
-       modest_msg_edit_window_get_parts_size (edit_window, &parts_count, &parts_size);
-       expected_size = modest_tny_msg_estimate_size (data->plain_body,
-                                                data->html_body,
-                                                parts_count,
-                                                parts_size);
-
-       if ((available_disk != -1) && expected_size > available_disk) {
+       if (!enough_space_for_message (edit_window, data)) {
                modest_msg_edit_window_free_msg_data (edit_window, data);
-
-               modest_platform_information_banner (NULL, NULL, dgettext("ke-recv", "cerm_device_memory_full"));
                return FALSE;
        }
 
-       
-       /*
-        * djcb: if we're in low-memory state, we only allow for sending messages
-        * smaller than MODEST_MAX_LOW_MEMORY_MESSAGE_SIZE (see modest-defs.h)
-        * this should still allow for sending anything critical... 
-        */
-       if (expected_size > MODEST_MAX_LOW_MEMORY_MESSAGE_SIZE) {
-               if (modest_platform_check_memory_low (MODEST_WINDOW(edit_window), TRUE)) {
-                       modest_msg_edit_window_free_msg_data (edit_window, data);
-                       return FALSE;
-               }
-       }
-
-       /*
-        * djcb: we also make sure that the attachments are smaller than the max size
-        * this is for the case where we'd try to forward a message with attachments 
-        * bigger than our max allowed size, or sending an message from drafts which
-        * somehow got past our checks when attaching.
-        */
-       if (expected_size > MODEST_MAX_ATTACHMENT_SIZE) {
-               modest_platform_run_information_dialog (
-                       GTK_WINDOW(edit_window),
-                       dgettext("ke-recv","memr_ib_operation_disabled"),
-                       TRUE);
-               modest_msg_edit_window_free_msg_data (edit_window, data);
-               return FALSE;
-       }
-
-       ModestAccountMgr *account_mgr = modest_runtime_get_account_mgr();
-       gchar *account_name = g_strdup (data->account_name);
+       account_mgr = modest_runtime_get_account_mgr();
+       account_name = g_strdup (data->account_name);
        if (!account_name)
                account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
 
@@ -2814,9 +2810,10 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        
        /* Get the currently-active transport account for this modest account: */
        if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
-               transport_account = TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
-                                                         (modest_runtime_get_account_store(),
-                                                          account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
+               transport_account = 
+                       TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
+                                             (modest_runtime_get_account_store (), 
+                                              account_name, TNY_ACCOUNT_TYPE_TRANSPORT));
        }
        
        if (!transport_account) {
@@ -2826,10 +2823,10 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                        return TRUE;
        }
        
-       gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
 
        /* Create the mail operation */
-       ModestMailOperation *mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
+       from = modest_account_mgr_get_from_string (account_mgr, account_name);
+       mail_operation = modest_mail_operation_new_with_error_handling (NULL, modest_ui_actions_disk_operations_error_handler, NULL, NULL);
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
 
        modest_mail_operation_send_new_mail (mail_operation,
@@ -3225,6 +3222,11 @@ modest_ui_actions_rename_folder_error_handler (ModestMailOperation *mail_op,
        case MODEST_MAIL_OPERATION_ERROR_FOLDER_EXISTS:
                message = _CS("ckdg_ib_folder_already_exists");
                break;
+       case TNY_SERVICE_ERROR_STATE:
+               /* This means that the folder is already in use (a
+                  message is opened for example */
+               message = _("emev_ni_internal_error");
+               break;
        default:
                message = _("emev_ib_ui_imap_unable_to_rename");
        }
@@ -3292,7 +3294,7 @@ on_rename_folder_performer (gboolean canceled,
 
                /* Clear the headers view */
                sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
-               gtk_tree_selection_unselect_all (sel);
+               gtk_tree_selection_unselect_all (sel);
 
                /* Actually rename the folder */
                modest_mail_operation_rename_folder (mail_op,
@@ -3300,6 +3302,7 @@ on_rename_folder_performer (gboolean canceled,
                                                     (const gchar *) (data->new_name),
                                                     on_rename_folder_cb,
                                                     folder_view);
+               g_object_unref (data->folder);
                g_object_unref (mail_op);
        }
 
@@ -3351,7 +3354,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action,
                        do_rename = FALSE;
                } else {
                        RenameFolderInfo *rename_folder_data = g_new0 (RenameFolderInfo, 1);
-                       rename_folder_data->folder = folder;
+                       rename_folder_data->folder = g_object_ref (folder);
                        rename_folder_data->new_name = folder_name;
                        modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window), TRUE,
                                        folder, on_rename_folder_performer, rename_folder_data);
@@ -4086,9 +4089,9 @@ modest_ui_actions_on_select_all (GtkAction *action,
                /* Set focuse on header view */
                gtk_widget_grab_focus (header_view);
 
-
                /* Enable window dimming management */
                modest_window_enable_dimming (MODEST_WINDOW(window));
+               modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (window));
                modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
        }
 
@@ -4221,7 +4224,7 @@ headers_action_show_details (TnyHeader *header,
        dialog = modest_details_dialog_new_with_header (GTK_WINDOW (window), header);
 
        /* Run dialog */
-       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog));
        gtk_widget_show_all (dialog);
        gtk_dialog_run (GTK_DIALOG (dialog));
 
@@ -4767,7 +4770,8 @@ move_to_cb (ModestMailOperation *mail_op,
                                /* No more messages to view, so close this window */
                                modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self));
                        }
-               } else if (MODEST_IS_MAIN_WINDOW (object) && helper->reference != NULL) {
+               } else if (MODEST_IS_MAIN_WINDOW (object) && 
+                          gtk_tree_row_reference_valid (helper->reference)) {
                        GtkWidget *header_view;
                        GtkTreePath *path;
                        GtkTreeSelection *sel;
@@ -4789,7 +4793,7 @@ move_to_cb (ModestMailOperation *mail_op,
        /* Close the "Pasting" information banner */
        gtk_widget_destroy (GTK_WIDGET(helper->banner));
        g_object_unref (helper->banner);
-       if (helper->reference != NULL)
+       if (gtk_tree_row_reference_valid (helper->reference))
                gtk_tree_row_reference_free (helper->reference);
        g_free (helper);
 }
@@ -4985,7 +4989,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action,
                                                                         NULL, NULL);
                modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
                modest_mail_operation_get_msg (mail_op, header, FALSE, open_msg_for_purge_cb, win);
-               
+
                g_object_unref (mail_op);
        }
        if (header)
@@ -5343,6 +5347,10 @@ modest_ui_actions_transfer_messages_helper (GtkWindow *win,
        gboolean need_connection = TRUE;
        gboolean do_xfer = TRUE;
        XferMsgsHelper *helper;
+
+       g_return_if_fail (TNY_IS_FOLDER (src_folder));
+       g_return_if_fail (TNY_IS_FOLDER (dst_folder));
+       g_return_if_fail (TNY_IS_LIST (headers));
        
        modest_ui_actions_xfer_messages_check (win, TNY_FOLDER_STORE (src_folder), 
                                               headers, TNY_FOLDER (dst_folder),
@@ -5401,6 +5409,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
                                                    TNY_FOLDER (dst_folder));
 
        /* Frees */
+       g_object_unref (src_folder);
        g_object_unref (header);
        g_object_unref (headers);
 }
@@ -5435,7 +5444,7 @@ modest_ui_actions_on_move_to (GtkAction *action,
        /* Create and run the dialog */
        dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view);
        modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
-       gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+       modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog));
        result = gtk_dialog_run (GTK_DIALOG(dialog));
        g_object_ref (tree_view);
        gtk_widget_destroy (dialog);
@@ -5985,6 +5994,8 @@ modest_ui_actions_on_send_queue_status_changed (ModestTnySendQueue *send_queue,
        /* Rerun dimming rules, because the message could become deletable for example */
        modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
                                                 MODEST_DIMMING_RULES_TOOLBAR);
+       modest_window_check_dimming_rules_group (MODEST_WINDOW (main_window), 
+                                                MODEST_DIMMING_RULES_MENU);
        
        /* Free */
  frees: