Runtime fix
[modest] / src / hildon2 / modest-msg-view-window.c
index fefb87f..f3ff4f0 100644 (file)
@@ -240,6 +240,8 @@ static gboolean _modest_msg_view_window_map_event (GtkWidget *widget,
                                                   gpointer userdata);
 static void update_branding (ModestMsgViewWindow *self);
 static void sync_flags      (ModestMsgViewWindow *self);
+static gboolean on_handle_calendar (ModestMsgView *msgview, TnyMimePart *calendar_part, 
+                                   GtkContainer *container, ModestMsgViewWindow *self);
 
 static gboolean on_realize (GtkWidget *widget,
                            gpointer userdata);
@@ -819,6 +821,8 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
                          G_CALLBACK (modest_ui_actions_on_msg_link_contextual), obj);
        g_signal_connect (G_OBJECT(priv->msg_view), "limit_error",
                          G_CALLBACK (modest_ui_actions_on_limit_error), obj);
+       g_signal_connect (G_OBJECT(priv->msg_view), "handle_calendar",
+                         G_CALLBACK (on_handle_calendar), obj);
        g_signal_connect (G_OBJECT (priv->msg_view), "fetch_image",
                          G_CALLBACK (on_fetch_image), obj);
 
@@ -2306,8 +2310,14 @@ view_msg_cb (ModestMailOperation *mail_op,
        }
 
        /* Mark header as read */
-       if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
+       if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN)) {
+               gchar *uid;
+
                tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+               uid = modest_tny_folder_get_header_unique_id (header);
+               modest_platform_emit_msg_read_changed_signal (uid, TRUE);
+               g_free (uid);
+       }
 
        /* Set new message */
        if (priv->msg_view != NULL && TNY_IS_MSG_VIEW (priv->msg_view)) {
@@ -3093,6 +3103,7 @@ idle_save_mime_part_show_result (SaveMimePartInfo *info)
        } else {
                hildon_banner_show_information (NULL, NULL, _("mail_ib_file_operation_failed"));
        }
+       set_progress_hint (info->window, FALSE);
        save_mime_part_info_free (info, FALSE);
        gdk_threads_leave (); /* CHECKED */
 
@@ -3216,7 +3227,7 @@ save_mime_part_to_file (SaveMimePartInfo *info)
                if (written < 0) {
                        g_warning ("modest: could not save attachment %s: %d (%s)\n", pair->filename, error?error->code:-1, error?error->message:"Unknown error");
 
-                       if ((error->domain == TNY_ERROR_DOMAIN) && 
+                       if (error && (error->domain == TNY_ERROR_DOMAIN) &&
                            (error->code == TNY_IO_ERROR_WRITE) &&
                            (errno == ENOSPC)) {
                                info->result = GNOME_VFS_ERROR_NO_SPACE;
@@ -3287,6 +3298,8 @@ save_mime_parts_to_file_with_checks (GtkWindow *parent,
        if (!is_ok) {
                save_mime_part_info_free (info, TRUE);
        } else {
+               /* Start progress and launch thread */
+               set_progress_hint (info->window, TRUE);
                g_thread_create ((GThreadFunc)save_mime_part_to_file, info, FALSE, NULL);
        }
 
@@ -4119,3 +4132,27 @@ on_realize (GtkWidget *widget,
 
        return FALSE;
 }
+
+static gboolean
+on_handle_calendar (ModestMsgView *msgview, TnyMimePart *calendar_part, GtkContainer *container, ModestMsgViewWindow *self)
+{
+       const gchar *account_name;
+       ModestProtocolType proto_type;
+       ModestProtocol *protocol;
+       gboolean retval = FALSE;
+
+       account_name = modest_window_get_active_account (MODEST_WINDOW (self));
+       
+       /* Get proto */
+       proto_type = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), 
+                                                           account_name);
+       protocol = 
+               modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), 
+                                                              proto_type);
+
+       if (MODEST_IS_ACCOUNT_PROTOCOL (protocol)) {
+               retval = modest_account_protocol_handle_calendar (MODEST_ACCOUNT_PROTOCOL (protocol), MODEST_WINDOW (self),
+                                                                 calendar_part, container);
+       }
+       return retval;
+}