* src/folder.c
* src/messageview.c
* src/messageview.h
* src/procmsg.h
* src/summaryview.c
* src/textview.c
* src/textview.h
Better fix for bug #2501
Instead of leaving blank window after message move or delete,
update separate view to next message in message list or
display info why view is blank. This was discussed
in bug #2621 comments.
+2012-03-14 [pawel] 3.8.0cvs32
+
+ * src/folder.c
+ * src/messageview.c
+ * src/messageview.h
+ * src/procmsg.h
+ * src/summaryview.c
+ * src/textview.c
+ * src/textview.h
+ Better fix for bug #2501
+ Instead of leaving blank window after message move or delete,
+ update separate view to next message in message list or
+ display info why view is blank. This was discussed
+ in bug #2621 comments.
+
2012-03-11 [colin] 3.8.0cvs31
* src/gtk/gtkcmctree.c
2012-03-11 [colin] 3.8.0cvs31
* src/gtk/gtkcmctree.c
( cvs diff -u -r 1.94.2.227 -r 1.94.2.228 src/messageview.c; ) > 3.8.0cvs29.patchset
( cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/gtk/gtkcmctree.c; ) > 3.8.0cvs30.patchset
( cvs diff -u -r 1.1.2.29 -r 1.1.2.30 src/gtk/gtkcmctree.c; cvs diff -u -r 1.1.2.76 -r 1.1.2.77 src/gtk/authors.h; cvs diff -u -r 1.100.2.81 -r 1.100.2.82 AUTHORS; ) > 3.8.0cvs31.patchset
( cvs diff -u -r 1.94.2.227 -r 1.94.2.228 src/messageview.c; ) > 3.8.0cvs29.patchset
( cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/gtk/gtkcmctree.c; ) > 3.8.0cvs30.patchset
( cvs diff -u -r 1.1.2.29 -r 1.1.2.30 src/gtk/gtkcmctree.c; cvs diff -u -r 1.1.2.76 -r 1.1.2.77 src/gtk/authors.h; cvs diff -u -r 1.100.2.81 -r 1.100.2.82 AUTHORS; ) > 3.8.0cvs31.patchset
+( cvs diff -u -r 1.213.2.205 -r 1.213.2.206 src/folder.c; cvs diff -u -r 1.94.2.228 -r 1.94.2.229 src/messageview.c; cvs diff -u -r 1.19.2.28 -r 1.19.2.29 src/messageview.h; cvs diff -u -r 1.60.2.59 -r 1.60.2.60 src/procmsg.h; cvs diff -u -r 1.395.2.444 -r 1.395.2.445 src/summaryview.c; cvs diff -u -r 1.96.2.237 -r 1.96.2.238 src/textview.c; cvs diff -u -r 1.12.2.29 -r 1.12.2.30 src/textview.h; ) > 3.8.0cvs32.patchset
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
static void add_msginfo_to_cache(FolderItem *item, MsgInfo *newmsginfo, MsgInfo *flagsource)
{
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++;
/* update folder stats */
if (MSG_IS_NEW(newmsginfo->flags))
item->new_msgs++;
if (!item->cache)
folder_item_read_cache(item);
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);
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 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)
{
static void messageview_nothing_cb (GtkAction *action, gpointer data)
{
messageview->statusbar_cid = 0;
messageview->show_full_text= FALSE;
messageview->statusbar_cid = 0;
messageview->show_full_text= FALSE;
+ messageview->update_needed = FALSE;
messageview->msginfo_update_callback_id =
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
messageview->msginfo_update_callback_id =
hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
- messageview->msginfo_moved_callback_id = 0;
g_signal_connect(G_OBJECT(window), "key_press_event",
G_CALLBACK(key_pressed), msgview);
#endif
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) {
messageview_add_toolbar(msgview, window);
if (show) {
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview->filtered = FALSE;
procmsg_msginfo_free(messageview->msginfo);
messageview->msginfo = NULL;
messageview->filtered = FALSE;
+
+ if (messageview->window) {
+ gtk_window_set_title(GTK_WINDOW(messageview->window),
+ _("Claws Mail - Message View"));
+ GTK_EVENTS_FLUSH();
+ }
+
mimeview_clear(messageview->mimeview);
headerview_clear(messageview->headerview);
noticeview_hide(messageview->noticeview);
mimeview_clear(messageview->mimeview);
headerview_clear(messageview->headerview);
noticeview_hide(messageview->noticeview);
messageview->mainwin->summaryview->displayed = NULL;
messageview->mainwin->summaryview->ext_messageview = NULL;
}
messageview->mainwin->summaryview->displayed = NULL;
messageview->mainwin->summaryview->ext_messageview = NULL;
}
- if (!messageview->deferred_destroy) {
+ if (!messageview->deferred_destroy)
hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST,
messageview->msginfo_update_callback_id);
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) {
debug_print("uh oh, better not touch that now (fetching)\n");
if (messageview->updating) {
debug_print("uh oh, better not touch that now (fetching)\n");
{
MsgInfoUpdate *msginfo_update = (MsgInfoUpdate *) source;
MessageView *messageview = (MessageView *)data;
{
MsgInfoUpdate *msginfo_update = (MsgInfoUpdate *) source;
MessageView *messageview = (MessageView *)data;
+ MsgInfo *old_msginfo = messageview->msginfo;
if (messageview->msginfo != msginfo_update->msginfo)
return FALSE;
if (messageview->msginfo != msginfo_update->msginfo)
return FALSE;
- if ((msginfo_update->flags & MSGINFO_UPDATE_DELETED) &&
- !messageview->new_window)
+ if ((msginfo_update->flags & MSGINFO_UPDATE_DELETED) ||
+ MSG_IS_DELETED(old_msginfo->flags))
- 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 (msg_new == NULL || msg_old == NULL)
- return FALSE;
+ if (messageview->new_window) {
+ if (old_msginfo->folder && old_msginfo->folder->total_msgs == 0) {
+ messageview_clear(messageview);
+ textview_show_info(messageview->mimeview->textview,
+ _("\n There are no messages in this folder"));
+ return FALSE;
+ }
+
+ if (!prefs_common.always_show_msg) {
+ messageview_clear(messageview);
+ textview_show_info(messageview->mimeview->textview,
+ _("\n Message has been deleted"));
+ } else
+ messageview->update_needed = TRUE;
- if (strcmp2(msg_new->msgid, msg_old->msgid))
- return FALSE;
+ } else {
+ messageview_clear(messageview);
+ messageview_update(messageview, old_msginfo);
+ }
+ }
- 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);
- }
-
gboolean all_headers;
gint msginfo_update_callback_id;
gboolean all_headers;
gint msginfo_update_callback_id;
- gint msginfo_moved_callback_id;
gboolean updating;
gboolean deferred_destroy;
gboolean show_full_text;
gboolean partial_display_shown;
gboolean updating;
gboolean deferred_destroy;
gboolean show_full_text;
gboolean partial_display_shown;
+ gboolean update_needed;
GtkUIManager *ui_manager;
GList *trail;
gint trail_pos;
GtkUIManager *ui_manager;
GList *trail;
gint trail_pos;
typedef enum {
MSGINFO_UPDATE_FLAGS = 1 << 0,
typedef enum {
MSGINFO_UPDATE_FLAGS = 1 << 0,
- MSGINFO_UPDATE_DELETED = 1 << 1,
- MSGINFO_UPDATE_ADDED = 1 << 2
+ MSGINFO_UPDATE_DELETED = 1 << 1
} MsgInfoUpdateFlags;
#include "procmime.h"
} MsgInfoUpdateFlags;
#include "procmime.h"
static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row,
gint column, SummaryView *summaryview)
{
static void summary_selected(GtkCMCTree *ctree, GtkCMCTreeNode *row,
gint column, SummaryView *summaryview)
{
+ GList *list, *cur;
+ MessageView *msgview;
MsgInfo *msginfo;
gboolean marked_unread = FALSE;
MsgInfo *msginfo;
gboolean marked_unread = FALSE;
+ list = messageview_get_msgview_list();
+ for (cur = list; cur != NULL; cur = cur->next) {
+ msgview = (MessageView *) cur->data;
+
+ if (msgview->new_window && msgview->update_needed) {
+ MsgInfo *new_msginfo = summary_get_selected_msg(summaryview);
+ messageview_show(msgview, new_msginfo, msgview->all_headers);
+ msgview->update_needed = FALSE;
+ }
+ }
+
if (summaryview->display_msg ||
(prefs_common.always_show_msg &&
messageview_is_visible(summaryview->messageview))) {
if (summaryview->display_msg ||
(prefs_common.always_show_msg &&
messageview_is_visible(summaryview->messageview))) {
textview_show_icon(textview, GTK_STOCK_DIALOG_ERROR);
}
textview_show_icon(textview, GTK_STOCK_DIALOG_ERROR);
}
+void textview_show_info(TextView *textview, const gchar *info_str)
+{
+ GtkTextView *text;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ textview_set_font(textview, NULL);
+ textview_clear(textview);
+
+ text = GTK_TEXT_VIEW(textview->text);
+ buffer = gtk_text_view_get_buffer(text);
+ gtk_text_buffer_get_start_iter(buffer, &iter);
+
+ TEXTVIEW_INSERT(info_str);
+ textview_show_icon(textview, GTK_STOCK_DIALOG_INFO);
+}
+
void textview_show_mime_part(TextView *textview, MimeInfo *partinfo)
{
GtkTextView *text;
void textview_show_mime_part(TextView *textview, MimeInfo *partinfo)
{
GtkTextView *text;
MimeInfo *mimeinfo,
FILE *fp);
void textview_show_error (TextView *textview);
MimeInfo *mimeinfo,
FILE *fp);
void textview_show_error (TextView *textview);
+void textview_show_info (TextView *textview,
+ const gchar *info_str);
void textview_show_mime_part (TextView *textview,
MimeInfo *partinfo);
void textview_clear (TextView *textview);
void textview_show_mime_part (TextView *textview,
MimeInfo *partinfo);
void textview_clear (TextView *textview);