Fixes NB#94666, issue new email notifications even though the Modest window is runnin...
[modest] / src / hildon2 / modest-msg-view-window.c
index 278905e..c8d1ccd 100644 (file)
@@ -226,6 +226,7 @@ static gboolean _modest_msg_view_window_map_event (GtkWidget *widget,
                                                   GdkEvent *event,
                                                   gpointer userdata);
 
+
 /* list my signals */
 enum {
        MSG_CHANGED_SIGNAL,
@@ -2433,8 +2434,9 @@ on_decode_to_stream_async_handler (TnyMimePart *mime_part,
 
        if (cancelled || err) {
                if (err) {
-                       modest_platform_information_banner (NULL, NULL,
-                                                           _KR("cerm_device_memory_full"));
+                       gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+                       modest_platform_information_banner (NULL, NULL, msg);
+                       g_free (msg);
                }
                goto free;
        }
@@ -2557,8 +2559,10 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window,
                                                                             mailbox, attachment_uid);
                        modest_window_set_zoom (MODEST_WINDOW (msg_win),
                                                modest_window_get_zoom (MODEST_WINDOW (window)));
-                       modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window));
-                       gtk_widget_show_all (GTK_WIDGET (msg_win));
+                       if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window)))
+                               gtk_widget_show_all (GTK_WIDGET (msg_win));
+                       else
+                               gtk_widget_destroy (GTK_WIDGET (msg_win));
                }
        }
 
@@ -2618,8 +2622,9 @@ idle_save_mime_part_show_result (SaveMimePartInfo *info)
                if (info->result == GNOME_VFS_OK) {
                        hildon_banner_show_information (NULL, NULL, _CS("sfil_ib_saved"));
                } else if (info->result == GNOME_VFS_ERROR_NO_SPACE) {
-                       hildon_banner_show_information (NULL, NULL, 
-                                                       _KR("cerm_device_memory_full"));
+                       gchar *msg = g_strdup_printf (_KR("cerm_device_memory_full"), "");
+                       modest_platform_information_banner (NULL, NULL, msg);
+                       g_free (msg);
                } else {
                        hildon_banner_show_information (NULL, NULL, _("mail_ib_file_operation_failed"));
                }
@@ -3099,7 +3104,6 @@ on_fetch_image_thread (gpointer userdata)
        TnyStreamCache *cache;
        TnyStream *cache_stream;
 
-       gdk_threads_enter ();
        cache = modest_runtime_get_images_cache ();
        cache_stream = 
                tny_stream_cache_get_stream (cache, 
@@ -3110,14 +3114,34 @@ on_fetch_image_thread (gpointer userdata)
        g_free (fidata->uri);
 
        if (cache_stream != NULL) {
-               tny_stream_write_to_stream (cache_stream, fidata->output_stream);
+               char buffer[4096];
+
+               while (G_LIKELY (!tny_stream_is_eos (cache_stream))) {
+                       gssize nb_read;
+
+                       nb_read = tny_stream_read (cache_stream, buffer, sizeof (buffer));
+                       if (G_UNLIKELY (nb_read < 0)) {
+                               break;
+                       } else if (G_LIKELY (nb_read > 0)) {
+                               gssize nb_written = 0;
+
+                               while (G_UNLIKELY (nb_written < nb_read)) {
+                                       gssize len;
+
+                                       len = tny_stream_write (fidata->output_stream, buffer + nb_written,
+                                                               nb_read - nb_written);
+                                       if (G_UNLIKELY (len < 0))
+                                               break;
+                                       nb_written += len;
+                               }
+                       }
+               }
                tny_stream_close (cache_stream);
                g_object_unref (cache_stream);
        }
 
        tny_stream_close (fidata->output_stream);
        g_object_unref (fidata->output_stream);
-       gdk_threads_leave ();
 
        g_idle_add (on_fetch_image_idle_refresh_view, fidata);