static void add_msginfo_to_cache(FolderItem *item, MsgInfo *newmsginfo, MsgInfo *flagsource)
{
+ MsgInfoUpdate msginfo_update;
+
/* update folder stats */
if (MSG_IS_NEW(newmsginfo->flags))
item->new_msgs++;
if (!item->cache)
folder_item_read_cache(item);
+ msginfo_update.msginfo = newmsginfo;
+ msginfo_update.flags = MSGINFO_UPDATE_ADDED;
+ hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update);
+
msgcache_add_msg(item->cache, newmsginfo);
copy_msginfo_flags(flagsource, newmsginfo);
folder_item_update_with_msg(item, F_ITEM_UPDATE_MSGCNT | F_ITEM_UPDATE_CONTENT | F_ITEM_UPDATE_ADDMSG, newmsginfo);
static void messageview_update (MessageView *msgview,
MsgInfo *old_msginfo);
static gboolean messageview_update_msg (gpointer source, gpointer data);
+static gboolean messageview_msg_moved (gpointer source, gpointer data);
static void messageview_nothing_cb (GtkAction *action, gpointer data)
{
messageview->msginfo_update_callback_id =
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
+ messageview->msginfo_moved_callback_id = 0;
return messageview;
}
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(key_pressed), msgview);
#endif
+ msgview->msginfo_moved_callback_id = hooks_register_hook(MSGINFO_UPDATE_HOOKLIST,
+ messageview_msg_moved, (gpointer) msgview);
messageview_add_toolbar(msgview, window);
if (show) {
if (!messageview->deferred_destroy) {
hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST,
messageview->msginfo_update_callback_id);
+ if (messageview->new_window)
+ hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST,
+ messageview->msginfo_moved_callback_id);
}
if (messageview->updating) {
if (messageview->msginfo != msginfo_update->msginfo)
return FALSE;
- if (msginfo_update->flags & MSGINFO_UPDATE_DELETED) {
+ if ((msginfo_update->flags & MSGINFO_UPDATE_DELETED) &&
+ !messageview->new_window)
+ {
MsgInfo *old_msginfo = messageview->msginfo;
messageview_clear(messageview);
messageview_update(messageview, old_msginfo);
return FALSE;
}
+static gboolean messageview_msg_moved(gpointer source, gpointer data)
+{
+ MsgInfoUpdate *msginfo_update = (MsgInfoUpdate *) source;
+ MessageView *messageview = (MessageView *) data;
+ MsgInfo *msg_old = messageview->msginfo;
+ MsgInfo *msg_new = msginfo_update->msginfo;
+
+ if (strcmp2(msg_new->msgid, msg_old->msgid))
+ return FALSE;
+
+ if ((msginfo_update->flags & MSGINFO_UPDATE_ADDED) &&
+ (folder_item_get_msginfo(msg_old->folder, msg_old->msgnum) == NULL))
+ {
+ if (folder_has_parent_of_type(msg_new->folder, F_TRASH))
+ messageview_destroy(messageview);
+ else
+ messageview_show(messageview, msg_new,
+ messageview->all_headers);
+ }
+
+ return FALSE;
+}
+
void messageview_set_menu_sensitive(MessageView *messageview)
{
if (!messageview || !messageview->new_window)