2007-09-03 Armin Burgmeier <armin@openismus.com>
[modest] / src / maemo / modest-msg-view-window.c
index 4c3828d..9e580f3 100644 (file)
@@ -455,7 +455,7 @@ menubar_to_menu (GtkUIManager *ui_manager)
 {
        GtkWidget *main_menu;
        GtkWidget *menubar;
-       GList *iter;
+       GList *iter, *children;
 
        /* Create new main menu */
        main_menu = gtk_menu_new();
@@ -463,15 +463,17 @@ menubar_to_menu (GtkUIManager *ui_manager)
        /* Get the menubar from the UI manager */
        menubar = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
 
-       iter = gtk_container_get_children (GTK_CONTAINER (menubar));
+       iter = children = gtk_container_get_children (GTK_CONTAINER (menubar));
        while (iter) {
                GtkWidget *menu;
 
                menu = GTK_WIDGET (iter->data);
                gtk_widget_reparent(menu, main_menu);
-
+               
                iter = g_list_next (iter);
        }
+       g_list_free (children);
+                    
        return main_menu;
 }
 
@@ -1524,28 +1526,29 @@ message_reader (ModestMsgViewWindow *window,
        if (tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED) {
                op_type = MODEST_MAIL_OPERATION_TYPE_OPEN;
        } else {
-               TnyFolder *folder;
-               GtkResponseType response;
-
                op_type = MODEST_MAIL_OPERATION_TYPE_RECEIVE;
 
-               /* Ask the user if he wants to download the message */
-               response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
-                                                                   _("mcen_nc_get_msg"));
-               if (response == GTK_RESPONSE_CANCEL)
-                       return FALSE;
+               /* Ask the user if he wants to download the message if
+                  we're not online */
+               if (!tny_device_is_online (modest_runtime_get_device())) {
+                       TnyFolder *folder = NULL;
+                       GtkResponseType response;
+
+                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (window),
+                                                                           _("mcen_nc_get_msg"));
+                       if (response == GTK_RESPONSE_CANCEL)
+                               return FALSE;
                
-               /* Offer the connection dialog if necessary */
-               /* FIXME: should this stuff go directly to the mail
-                  operation instead of spread it all over the
-                  code? */
-               folder = tny_header_get_folder (header);
-               if (folder) {
-                       if (!modest_platform_connect_and_wait_if_network_folderstore (NULL, TNY_FOLDER_STORE (folder))) {
+                       /* Offer the connection dialog if necessary */
+                       folder = tny_header_get_folder (header);
+                       if (folder) {
+                               if (!modest_platform_connect_and_wait_if_network_folderstore (NULL, 
+                                                                                             TNY_FOLDER_STORE (folder))) {
+                                       g_object_unref (folder);
+                                       return FALSE;
+                               }
                                g_object_unref (folder);
-                               return FALSE;
                        }
-                       g_object_unref (folder);
                }
        }
 
@@ -2155,17 +2158,10 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
        if (!TNY_IS_MSG (mime_part)) {
                gchar *filepath = NULL;
                const gchar *att_filename = tny_mime_part_get_filename (mime_part);
-               gchar *extension = NULL;
                TnyFsStream *temp_stream = NULL;
 
-               if (att_filename) {
-                       extension = g_strrstr (att_filename, ".");
-                       if (extension != NULL)
-                               extension++;
-               }
-
-               temp_stream = modest_maemo_utils_create_temp_stream (extension, &filepath);
-
+               temp_stream = modest_maemo_utils_create_temp_stream (att_filename, &filepath);
+               
                if (temp_stream) {
                        const gchar *content_type;
                        content_type = tny_mime_part_get_content_type (mime_part);
@@ -2174,7 +2170,8 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
                        modest_platform_activate_file (filepath, content_type);
                        g_object_unref (temp_stream);
                        g_free (filepath);
-                       /* TODO: delete temporary file */
+                       /* NOTE: files in the temporary area will be automatically
+                        * cleaned after some time if they are no longer in use */
                }
        } else {
                /* message attachment */
@@ -2253,12 +2250,7 @@ static gboolean
 idle_save_mime_part_show_result (SaveMimePartInfo *info)
 {
        if (info->pairs != NULL) {
-               /* This is a GDK lock because we are an idle callback and
-                * save_mime_parts_to_file_with_checks can contain Gtk+ code */
-
-               gdk_threads_enter (); /* CHECKED */
-               save_mime_parts_to_file_with_checks (info);
-               gdk_threads_leave (); /* CHECKED */
+               save_mime_part_to_file (info);
        } else {
                gboolean result;
                result = info->result;
@@ -2308,14 +2300,22 @@ save_mime_part_to_file (SaveMimePartInfo *info)
 static void
 save_mime_parts_to_file_with_checks (SaveMimePartInfo *info)
 {
-       SaveMimePartPair *pair;
        gboolean is_ok = TRUE;
-
-       pair = info->pairs->data;
-       if (modest_maemo_utils_file_exists (pair->filename)) {
+        gint replaced_files = 0;
+        const GList *files = info->pairs;
+        const GList *iter;
+
+        for (iter = files; (iter != NULL) && (replaced_files < 2); iter = g_list_next(iter)) {
+                SaveMimePartPair *pair = iter->data;
+                if (modest_maemo_utils_file_exists (pair->filename)) {
+                        replaced_files++;
+                }
+        }
+       if (replaced_files) {
                GtkWidget *confirm_overwrite_dialog;
-               confirm_overwrite_dialog = hildon_note_new_confirmation (NULL,
-                                                                        _FM("docm_nc_replace_file"));
+                const gchar *message = (replaced_files == 1) ?
+                        _FM("docm_nc_replace_file") : _FM("docm_nc_replace_multiple");
+                confirm_overwrite_dialog = hildon_note_new_confirmation (NULL, message);
                if (gtk_dialog_run (GTK_DIALOG (confirm_overwrite_dialog)) != GTK_RESPONSE_OK) {
                        is_ok = FALSE;
                }