diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 13 | ||||
-rw-r--r-- | mail/em-folder-browser.c | 4 | ||||
-rw-r--r-- | mail/em-folder-view.c | 16 | ||||
-rw-r--r-- | mail/em-folder-view.h | 4 | ||||
-rw-r--r-- | mail/em-message-browser.c | 9 |
5 files changed, 33 insertions, 13 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 249dfa3f06..11c5599535 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,18 @@ 2004-05-07 Not Zed <NotZed@Ximian.com> + ** See bug #57935. + + * em-folder-view.c (emfv_set_message): add new arg, nomarkseen, + don't mark the selected message seen once its loaded. + (emfv_list_message_selected): clear the nomarkseen flag once we've + processed the selection. + (emfv_list_done_message_selected): handle the nomarkseen flag, + don't mark a message seen if it was explictly selected. + + * em-folder-browser.c (emfb_list_built): use + em_folder_view_select_message rather than doing it via the + messagelist directly. + ** Dunno why i bothered, but see bug #58090. * importers/netscape-importer.c diff --git a/mail/em-folder-browser.c b/mail/em-folder-browser.c index 4a208c7906..df15cb9230 100644 --- a/mail/em-folder-browser.c +++ b/mail/em-folder-browser.c @@ -313,7 +313,7 @@ void em_folder_browser_show_preview(EMFolderBrowser *emfb, gboolean state) char *uid = g_alloca(strlen(emfb->view.list->cursor_uid)+1); strcpy(uid, emfb->view.list->cursor_uid); - em_folder_view_set_message(&emfb->view, uid); + em_folder_view_set_message(&emfb->view, uid, TRUE); } /* need to load/show the current message? */ @@ -839,7 +839,7 @@ emfb_list_built (MessageList *ml, EMFolderBrowser *emfb) if (emfv->list->cursor_uid == NULL) { if (emfb->priv->select_uid) { - message_list_select_uid (ml, emfb->priv->select_uid); + em_folder_view_set_message(emfv, emfb->priv->select_uid, TRUE); g_free (emfb->priv->select_uid); emfb->priv->select_uid = NULL; diff --git a/mail/em-folder-view.c b/mail/em-folder-view.c index 09ba0c6360..cb55b049fc 100644 --- a/mail/em-folder-view.c +++ b/mail/em-folder-view.c @@ -104,7 +104,7 @@ static void emfv_enable_menus(EMFolderView *emfv); static void emfv_set_folder(EMFolderView *emfv, CamelFolder *folder, const char *uri); static void emfv_set_folder_uri(EMFolderView *emfv, const char *uri); -static void emfv_set_message(EMFolderView *emfv, const char *uid); +static void emfv_set_message(EMFolderView *emfv, const char *uid, int nomarkseen); static void emfv_activate(EMFolderView *emfv, BonoboUIComponent *uic, int state); static void emfv_message_reply(EMFolderView *emfv, int mode); @@ -121,7 +121,8 @@ static const EMFolderViewEnable emfv_enable_map[]; struct _EMFolderViewPrivate { guint seen_id; guint setting_notify_id; - + int nomarkseen:1; + CamelObjectHookID folder_changed_id; GtkWidget *invisible; @@ -366,7 +367,7 @@ em_folder_view_open_selected(EMFolderView *emfv) /* FIXME: session needs to be passed easier than this */ em_format_set_session((EMFormat *)((EMFolderView *)emmb)->preview, ((EMFormat *)emfv->preview)->session); em_folder_view_set_folder((EMFolderView *)emmb, emfv->folder, emfv->folder_uri); - em_folder_view_set_message((EMFolderView *)emmb, uids->pdata[i]); + em_folder_view_set_message((EMFolderView *)emmb, uids->pdata[i], FALSE); gtk_widget_show(emmb->window); } @@ -529,8 +530,10 @@ emfv_set_folder_uri(EMFolderView *emfv, const char *uri) } static void -emfv_set_message(EMFolderView *emfv, const char *uid) +emfv_set_message(EMFolderView *emfv, const char *uid, int nomarkseen) { + /* This could possible race with other set messages, but likelyhood is small */ + emfv->priv->nomarkseen = nomarkseen; message_list_select_uid(emfv->list, uid); /* force an update, since we may not get an updated event if we select the same uid */ emfv_list_message_selected(emfv->list, uid, emfv); @@ -1886,6 +1889,7 @@ emfv_list_done_message_selected(CamelFolder *folder, const char *uid, CamelMimeM EMFolderView *emfv = data; if (emfv->preview == NULL) { + emfv->priv->nomarkseen = FALSE; g_object_unref (emfv); return; } @@ -1895,7 +1899,7 @@ emfv_list_done_message_selected(CamelFolder *folder, const char *uid, CamelMimeM if (emfv->priv->seen_id) g_source_remove(emfv->priv->seen_id); - if (msg && emfv->mark_seen) { + if (msg && emfv->mark_seen && !emfv->priv->nomarkseen) { if (emfv->mark_seen_timeout > 0) { struct mst_t *mst; @@ -1911,6 +1915,7 @@ emfv_list_done_message_selected(CamelFolder *folder, const char *uid, CamelMimeM } g_object_unref (emfv); + emfv->priv->nomarkseen = FALSE; } static void @@ -1929,6 +1934,7 @@ emfv_list_message_selected(MessageList *ml, const char *uid, EMFolderView *emfv) g_free(emfv->displayed_uid); emfv->displayed_uid = NULL; em_format_format((EMFormat *)emfv->preview, NULL, NULL, NULL); + emfv->priv->nomarkseen = FALSE; } } diff --git a/mail/em-folder-view.h b/mail/em-folder-view.h index 4918814e4b..4a84eadf33 100644 --- a/mail/em-folder-view.h +++ b/mail/em-folder-view.h @@ -102,7 +102,7 @@ struct _EMFolderViewClass { void (*set_folder_uri)(EMFolderView *emfv, const char *uri); void (*set_folder)(EMFolderView *emfv, struct _CamelFolder *folder, const char *uri); - void (*set_message)(EMFolderView *emfv, const char *uid); + void (*set_message)(EMFolderView *emfv, const char *uid, int nomarkseen); /* Signals */ void (*on_url)(EMFolderView *emfv, const char *uri, const char *nice_uri); @@ -118,7 +118,7 @@ GtkWidget *em_folder_view_new(void); #define em_folder_view_activate(emfv, uic, state) EM_FOLDER_VIEW_GET_CLASS (emfv)->activate((emfv), (uic), (state)) #define em_folder_view_set_folder(emfv, folder, uri) EM_FOLDER_VIEW_GET_CLASS (emfv)->set_folder((emfv), (folder), (uri)) #define em_folder_view_set_folder_uri(emfv, uri) EM_FOLDER_VIEW_GET_CLASS (emfv)->set_folder_uri((emfv), (uri)) -#define em_folder_view_set_message(emfv, uid) EM_FOLDER_VIEW_GET_CLASS (emfv)->set_message((emfv), (uid)) +#define em_folder_view_set_message(emfv, uid, nomarkseen) EM_FOLDER_VIEW_GET_CLASS (emfv)->set_message((emfv), (uid), (nomarkseen)) struct _EMPopupTarget *em_folder_view_get_popup_target(EMFolderView *emfv); diff --git a/mail/em-message-browser.c b/mail/em-message-browser.c index 9ddbae1327..63517d38d2 100644 --- a/mail/em-message-browser.c +++ b/mail/em-message-browser.c @@ -52,7 +52,7 @@ struct _EMMessageBrowserPrivate { GtkWidget *preview; /* container for message display */ }; -static void emmb_set_message(EMFolderView *emfv, const char *uid); +static void emmb_set_message(EMFolderView *emfv, const char *uid, int nomarkseen); static void emmb_activate(EMFolderView *emfv, BonoboUIComponent *uic, int state); static EMFolderViewClass *emmb_parent; @@ -230,12 +230,12 @@ GtkWidget *em_message_browser_window_new(void) /* ********************************************************************** */ static void -emmb_set_message(EMFolderView *emfv, const char *uid) +emmb_set_message(EMFolderView *emfv, const char *uid, int nomarkseen) { EMMessageBrowser *emmb = (EMMessageBrowser *) emfv; CamelMessageInfo *info; - emmb_parent->set_message(emfv, uid); + emmb_parent->set_message(emfv, uid, nomarkseen); if (uid == NULL) return; @@ -246,7 +246,8 @@ emmb_set_message(EMFolderView *emfv, const char *uid) } /* Well we don't know if it got displayed (yet) ... but whatever ... */ - camel_folder_set_message_flags(emfv->folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); + if (!nomarkseen) + camel_folder_set_message_flags(emfv->folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); } static void |