From: Paweł Pękala Date: Thu, 2 Feb 2012 16:12:18 +0000 (+0000) Subject: 2012-02-02 [pawel] 3.8.0cvs21 X-Git-Tag: rel_3_8_1~39 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=a656ae250b65a7cab1c76096f6a0777df8d4b03a;ds=sidebyside 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 --- diff --git a/ChangeLog b/ChangeLog index af10b22f3..78e4c17e5 100644 --- 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 index 869168bc6..df3f0ca29 100644 --- 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 index b1554f772..ba6080e0b 100644 --- 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 index 3887cbbfb..f6f961fe0 100644 --- 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 index edc5d3d74..e080501b9 100644 --- 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 index 3e593d1b7..2152fc449 100644 --- 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 index 89fd67f51..859d1c56e 100644 --- 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"