* Fixed 3 memory leaks in modest-msg-view-window
[modest] / src / maemo / modest-msg-view-window.c
index 066cfc7..d7eb290 100644 (file)
@@ -56,6 +56,8 @@
 #include <modest-mime-part-view.h>
 #include <modest-isearch-view.h>
 #include <math.h>
+#include <errno.h>
+#include <glib/gstdio.h>
 
 #define DEFAULT_FOLDER "MyDocs/.documents"
 
@@ -919,10 +921,9 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
                                MODEST_HEADER_VIEW_OBSERVER(window));
        }
 
-       gtk_widget_show_all (GTK_WIDGET (window));
-
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
        update_window_title (MODEST_MSG_VIEW_WINDOW (window));
+       gtk_widget_show_all (GTK_WIDGET (window));
 
        modest_msg_view_window_update_priority (window);
 
@@ -953,6 +954,7 @@ modest_msg_view_window_new_for_search_result (TnyMsg *msg,
        priv->is_search_result = TRUE;
 
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       update_window_title (window);
 
        return MODEST_WINDOW(window);
 }
@@ -974,6 +976,7 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg,
                modest_account_name, msg_uid);
 
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
 
        return MODEST_WINDOW(obj);
 }
@@ -1481,8 +1484,11 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
                gtk_tree_model_get (priv->header_model, &tmp_iter,
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
-               if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
-                       is_last_selected = FALSE;
+               if (header) {
+                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                               is_last_selected = FALSE;
+                       g_object_unref(G_OBJECT(header));
+               }
        }
        gtk_tree_path_free (path);
        return is_last_selected;
@@ -1550,8 +1556,11 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
                gtk_tree_model_get (priv->header_model, &tmp_iter,
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
-               if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
-                       is_first_selected = FALSE;
+               if (header) {
+                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                               is_first_selected = FALSE;
+                       g_object_unref(G_OBJECT(header));
+               }
        }
        gtk_tree_path_free (path);
        return is_first_selected;
@@ -1882,7 +1891,10 @@ modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
 
                gtk_tree_model_get (priv->header_model, &iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                    &header, -1);
-               flags = tny_header_get_flags (header);
+               if (header) {
+                       flags = tny_header_get_flags (header);
+                       g_object_unref(G_OBJECT(header));
+               }
                gtk_tree_path_free (path);
        }
 
@@ -2229,12 +2241,18 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
                gchar *filepath = NULL;
                const gchar *att_filename = tny_mime_part_get_filename (mime_part);
                TnyFsStream *temp_stream = NULL;
-               temp_stream = modest_maemo_utils_create_temp_stream (att_filename, attachment_uid, &filepath);
+               temp_stream = modest_maemo_utils_create_temp_stream (att_filename, attachment_uid,
+                                                                    &filepath);
                
                if (temp_stream) {
                        const gchar *content_type;
                        content_type = tny_mime_part_get_content_type (mime_part);
                        tny_mime_part_decode_to_stream (mime_part, TNY_STREAM (temp_stream));
+
+                       /* make the file read-only */
+                       if (g_chmod(filepath, 0444) != 0)
+                               g_warning ("%s: failed to set file '%s' to read-only: %s",
+                                          __FUNCTION__, filepath, strerror(errno));
                        
                        modest_platform_activate_file (filepath, content_type);
                        g_object_unref (temp_stream);
@@ -2348,7 +2366,7 @@ save_mime_part_to_file (SaveMimePartInfo *info)
        TnyStream *stream;
        SaveMimePartPair *pair = (SaveMimePartPair *) info->pairs->data;
 
-       result = gnome_vfs_create (&handle, pair->filename, GNOME_VFS_OPEN_WRITE, FALSE, 0444);
+       result = gnome_vfs_create (&handle, pair->filename, GNOME_VFS_OPEN_WRITE, FALSE, 0644);
        if (result == GNOME_VFS_OK) {
                stream = tny_vfs_stream_new (handle);
                tny_mime_part_decode_to_stream (pair->part, stream);