GdkEvent *event,
gpointer userdata);
static void update_branding (ModestMsgViewWindow *self);
+static void sync_flags (ModestMsgViewWindow *self);
/* list my signals */
enum {
MODEST_HEADER_VIEW_OBSERVER(self));
}
}
-}
+}
static void
modest_msg_view_window_finalize (GObject *obj)
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
-
-
is_merge = g_str_has_prefix (msg_uid, "merge:");
/* Get the account */
account = tny_account_store_find_account (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
msg_uid);
-
if (is_merge || account) {
TnyFolder *folder = NULL;
update_window_title (MODEST_MSG_VIEW_WINDOW (window));
update_branding (MODEST_MSG_VIEW_WINDOW (window));
g_object_unref (msg);
+ /* Sync flags to server */
+ sync_flags (MODEST_MSG_VIEW_WINDOW (window));
} else {
message_reader (window, priv, NULL, msg_uid, folder, NULL);
}
}
/* Notify the observers */
- g_signal_emit (G_OBJECT (self), signals[MSG_CHANGED_SIGNAL],
+ g_signal_emit (G_OBJECT (self), signals[MSG_CHANGED_SIGNAL],
0, priv->header_model, priv->row_reference);
+ /* Sync the flags if the message is not opened from a header
+ model, i.e, if it's opened from a notification */
+ if (!priv->header_model)
+ sync_flags (self);
+
/* Frees */
g_object_unref (self);
if (row_reference)
- gtk_tree_row_reference_free (row_reference);
+ gtk_tree_row_reference_free (row_reference);
}
TnyFolderType
modest_msg_view_set_branding (MODEST_MSG_VIEW (priv->msg_view), service_name, service_icon);
g_free (service_name);
}
+
+static void
+sync_flags (ModestMsgViewWindow *self)
+{
+ TnyHeader *header = NULL;
+
+ header = modest_msg_view_window_get_header (self);
+ if (!header) {
+ TnyMsg *msg = modest_msg_view_window_get_message (self);
+ if (msg) {
+ header = tny_msg_get_header (msg);
+ g_object_unref (msg);
+ }
+ }
+
+ if (header) {
+ TnyFolder *folder = tny_header_get_folder (header);
+
+ if (folder) {
+ ModestMailOperation *mail_op;
+
+ /* Sync folder, we need this to save the seen flag */
+ mail_op = modest_mail_operation_new (NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+ modest_mail_operation_sync_folder (mail_op, folder, FALSE);
+ g_object_unref (mail_op);
+ g_object_unref (folder);
+ }
+ g_object_unref (header);
+ }
+}