2012-02-02 [pawel] 3.8.0cvs21
authorPaweł Pękala <c0rn@gazeta.pl>
Thu, 2 Feb 2012 16:12:18 +0000 (16:12 +0000)
committerPaweł Pękala <c0rn@gazeta.pl>
Thu, 2 Feb 2012 16:12:18 +0000 (16:12 +0000)
* 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

ChangeLog
PATCHSETS
configure.ac
src/folder.c
src/messageview.c
src/messageview.h
src/procmsg.h

index af10b22f33694446f406c5364fd7dcbe555107ef..78e4c17e57a824da72a32b1586c657179501ec8b 100644 (file)
--- 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
index 869168bc6b5e9322fc856fb1adacaa6affbd13db..df3f0ca293d2280a76b24e40b96bb450478f8410 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index b1554f772afcc8771367436f279618a9d3f348db..ba6080e0bda7f0beb5c6508bf9da19410fa82a11 100644 (file)
@@ -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=
 
index 3887cbbfb582227c679d17d90ee83d480c6943f2..f6f961fe032660844952009aa23398f7f2919649 100644 (file)
@@ -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);
index edc5d3d7443b74791c6a157b1b186278dc9b66a2..e080501b92a1c89309b9b3f1438405345d8319cc 100644 (file)
@@ -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) 
index 3e593d1b74d552a3a555a8950363e87ef0a28060..2152fc449a06e93392411c80fb40efc929eee63e 100644 (file)
@@ -75,6 +75,7 @@ struct _MessageView
        gboolean all_headers;
 
        gint msginfo_update_callback_id;
+       gint msginfo_moved_callback_id;
        gboolean updating;
        gboolean deferred_destroy;
        
index 89fd67f51cee886b37a256c1215b6a9be52cf332..859d1c56e503734d5673afd266bcc1d26c2a500d 100644 (file)
@@ -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"