commit a656ae250b65a7cab1c76096f6a0777df8d4b03a
parent eaaf23d5c8617247b09111d46ed811d9067186f5
Author: Paweł Pękala <c0rn@gazeta.pl>
Date: Thu, 2 Feb 2012 16:12:18 +0000
2012-02-02 [pawel] 3.8.0cvs21
* src/folder.c
* src/messageview.c
* src/messageview.h
* src/procmsg.h
Fix bug #2501 'opened message blanks when moved to other folder'
Detect message move and update message window contents
accordingly, if message is moved to trash close window
Diffstat:
7 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,13 @@
+2012-02-02 [pawel] 3.8.0cvs21
+
+ * src/folder.c
+ * src/messageview.c
+ * src/messageview.h
+ * src/procmsg.h
+ Fix bug #2501 'opened message blanks when moved to other folder'
+ Detect message move and update message window contents
+ accordingly, if message is moved to trash close window
+
2012-02-01 [pawel] 3.8.0cvs20
* src/jpilot.c
diff --git a/PATCHSETS b/PATCHSETS
@@ -4337,3 +4337,4 @@
( cvs diff -u -r 1.1.4.28 -r 1.1.4.29 src/gtk/progressdialog.c; cvs diff -u -r 1.1.4.16 -r 1.1.4.17 src/gtk/progressdialog.h; cvs diff -u -r 1.149.2.104 -r 1.149.2.105 src/inc.c; cvs diff -u -r 1.17.2.61 -r 1.17.2.62 src/send_message.c; ) > 3.8.0cvs18.patchset
( cvs diff -u -r 1.5.2.101 -r 1.5.2.102 src/gtk/gtkutils.c; ) > 3.8.0cvs19.patchset
( cvs diff -u -r 1.18.2.33 -r 1.18.2.34 src/jpilot.c; cvs diff -u -r 1.6.10.19 -r 1.6.10.20 src/mutt.c; cvs diff -u -r 1.6.2.18 -r 1.6.2.19 src/pine.c; cvs diff -u -r 1.150.2.120 -r 1.150.2.121 src/procmsg.c; cvs diff -u -r 1.14.2.21 -r 1.14.2.22 src/vcard.c; cvs diff -u -r 1.9.2.32 -r 1.9.2.33 src/gtk/sslcertwindow.c; ) > 3.8.0cvs20.patchset
+( cvs diff -u -r 1.213.2.204 -r 1.213.2.205 src/folder.c; cvs diff -u -r 1.94.2.225 -r 1.94.2.226 src/messageview.c; cvs diff -u -r 1.19.2.26 -r 1.19.2.27 src/messageview.h; cvs diff -u -r 1.60.2.57 -r 1.60.2.58 src/procmsg.h; ) > 3.8.0cvs21.patchset
diff --git a/configure.ac b/configure.ac
@@ -12,7 +12,7 @@ MINOR_VERSION=8
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=20
+EXTRA_VERSION=21
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
diff --git a/src/folder.c b/src/folder.c
@@ -3066,6 +3066,8 @@ static void copy_msginfo_flags(MsgInfo *source, MsgInfo *dest)
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++;
@@ -3092,6 +3094,10 @@ static void add_msginfo_to_cache(FolderItem *item, MsgInfo *newmsginfo, MsgInfo
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);
diff --git a/src/messageview.c b/src/messageview.c
@@ -178,6 +178,7 @@ static void about_cb (GtkAction *action,
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)
{
@@ -408,6 +409,7 @@ MessageView *messageview_create(MainWindow *mainwin)
messageview->msginfo_update_callback_id =
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
+ messageview->msginfo_moved_callback_id = 0;
return messageview;
}
@@ -710,6 +712,8 @@ static MessageView *messageview_create_with_new_window_visible(MainWindow *mainw
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) {
@@ -1454,6 +1458,9 @@ void messageview_destroy(MessageView *messageview)
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) {
@@ -2741,7 +2748,9 @@ static gboolean messageview_update_msg(gpointer source, gpointer data)
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);
@@ -2750,6 +2759,29 @@ static gboolean messageview_update_msg(gpointer source, gpointer data)
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)
diff --git a/src/messageview.h b/src/messageview.h
@@ -75,6 +75,7 @@ struct _MessageView
gboolean all_headers;
gint msginfo_update_callback_id;
+ gint msginfo_moved_callback_id;
gboolean updating;
gboolean deferred_destroy;
diff --git a/src/procmsg.h b/src/procmsg.h
@@ -174,7 +174,8 @@ typedef guint32 MsgTmpFlags;
typedef enum {
MSGINFO_UPDATE_FLAGS = 1 << 0,
- MSGINFO_UPDATE_DELETED = 1 << 1
+ MSGINFO_UPDATE_DELETED = 1 << 1,
+ MSGINFO_UPDATE_ADDED = 1 << 2
} MsgInfoUpdateFlags;
#include "procmime.h"