#include "folder.h"
#include "colorlabel.h"
#include "inc.h"
+#include "imap.h"
#include "addressbook.h"
#include "addr_compl.h"
#include "scoring.h"
static void summary_set_menu_sensitive (SummaryView *summaryview);
+static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
+ guint action);
+
static guint summary_get_msgnum (SummaryView *summaryview,
GtkCTreeNode *node);
gconstpointer ptr1,
gconstpointer ptr2);
-#if MARK_ALL_READ
-static void summary_mark_all_read (SummaryView *summaryview);
-#endif
-
GtkTargetEntry summary_drag_types[1] =
{
{"text/plain", GTK_TARGET_SAME_APP, TARGET_DUMMY}
{N_("/Follow-up and reply to"), NULL, summary_reply_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, NULL},
{N_("/Reply to a_ll"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
{N_("/_Forward"), NULL, summary_reply_cb, COMPOSE_FORWARD, NULL},
- {N_("/Forward as a_ttachment"),
- NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
{N_("/Bounce"), NULL, summary_reply_cb, COMPOSE_BOUNCE, NULL},
{N_("/---"), NULL, NULL, 0, "<Separator>"},
{N_("/Re-_edit"), NULL, summary_reedit, 0, NULL},
}
folder_update_op_count();
}
- else if (!summaryview->filtering_happened) {
- summary_write_cache(summaryview);
- }
-
- summaryview->filtering_happened = FALSE;
-
+
+ summary_write_cache(summaryview);
+
summaryview->folderview->opened = selected_node;
gtk_clist_freeze(GTK_CLIST(ctree));
change_dir(buf) < 0))) {
g_free(buf);
debug_print(_("empty folder\n\n"));
+ summary_set_hide_read_msgs_menu(summaryview, FALSE);
if (is_refresh)
messageview_clear(summaryview->messageview);
summary_clear_all(summaryview);
}
summaryview->killed_messages = NULL;
+
+ if (summaryview->folder_item->hide_read_msgs) {
+ GSList *not_killed;
+ gint kill_score;
+
+ summary_set_hide_read_msgs_menu(summaryview, TRUE);
+ not_killed = NULL;
+ for(cur = mlist ; cur != NULL ; cur = g_slist_next(cur)) {
+ MsgInfo * msginfo = (MsgInfo *) cur->data;
+
+ if ((MSG_IS_UNREAD(msginfo->flags)
+ || MSG_IS_MARKED(msginfo->flags)
+ || MSG_IS_LOCKED(msginfo->flags))
+ && !MSG_IS_IGNORE_THREAD(msginfo->flags))
+ not_killed = g_slist_append(not_killed, msginfo);
+ else
+ summaryview->killed_messages =
+ g_slist_append(summaryview->killed_messages, msginfo);
+ }
+ g_slist_free(mlist);
+ mlist = not_killed;
+ } else {
+ summary_set_hide_read_msgs_menu(summaryview, FALSE);
+ }
+
if ((global_scoring || item->prefs->scoring) &&
(item->folder->type == F_NEWS)) {
GSList *not_killed;
menu_set_sensitive(ifactory, "/Reply to sender", sens);
menu_set_sensitive(ifactory, "/Reply to all", sens);
menu_set_sensitive(ifactory, "/Forward", TRUE);
- menu_set_sensitive(ifactory, "/Forward as attachment", TRUE);
menu_set_sensitive(ifactory, "/Bounce", TRUE);
menu_set_sensitive(ifactory, "/Add sender to address book", sens);
gchar *del, *mv, *cp;
gchar *sel;
gchar *spc;
+ gchar *itstr;
GList *rowlist, *cur;
guint n_selected = 0;
off_t sel_size = 0;
else
spc = "";
- if (n_selected)
+ if (n_selected) {
sel = g_strdup_printf(" (%s)", to_human_readable(sel_size));
- else
+ if (n_selected == 1)
+ itstr = g_strdup(_(" item selected"));
+ else
+ itstr = g_strdup(_(" items selected"));
+ } else {
sel = g_strdup("");
+ itstr = g_strdup("");
+ }
+
str = g_strconcat(n_selected ? itos(n_selected) : "",
- n_selected ? _(" item(s) selected") : "",
- sel, spc, del, mv, cp, NULL);
+ itstr, sel, spc, del, mv, cp, NULL);
gtk_label_set(GTK_LABEL(summaryview->statlabel_select), str);
g_free(str);
g_free(sel);
g_free(del);
g_free(mv);
g_free(cp);
+ g_free(itstr);
if (summaryview->folder_item &&
FOLDER_IS_LOCAL(summaryview->folder_item->folder)) {
text[col_pos[S_COL_MARK]] = NULL;
text[col_pos[S_COL_UNREAD]] = NULL;
text[col_pos[S_COL_MIME]] = NULL;
+ text[col_pos[S_COL_LOCKED]] = NULL;
text[col_pos[S_COL_NUMBER]] = itos(msginfo->msgnum);
text[col_pos[S_COL_SIZE]] = to_human_readable(msginfo->size);
text[col_pos[S_COL_SCORE]] = itos_buf(col_score, msginfo->threadscore);
#else
text[col_pos[S_COL_SCORE]] = itos_buf(col_score, msginfo->score);
-#endif
+#endif
if (msginfo->date_t) {
procheader_date_get_localtime(date_modified,
summaryview->newmsgs--;
if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags))
summaryview->unread--;
+ if (MSG_IS_NEW(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags) ||
+ MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags)) {
+ MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_NEW | MSG_UNREAD);
+ summary_set_row_marks(summaryview, row);
+ gtk_clist_thaw(GTK_CLIST(ctree));
+ summary_status_show(summaryview);
+ }
if (new_window) {
MessageView *msgview;
summaryview->msg_is_toggled_on = FALSE;
summaryview->displayed = NULL;
gtk_widget_ref(vpaned);
- gtk_container_remove(GTK_CONTAINER(container), vpaned);
+ gtkut_container_remove(GTK_CONTAINER(container), vpaned);
gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), container);
gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
GTK_ARROW_UP, GTK_SHADOW_OUT);
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo, MSG_MARKED);
CHANGE_FLAGS(msginfo);
summary_set_row_marks(summaryview, row);
- debug_print(_("Message %d is marked\n"), msginfo->msgnum);
+ debug_print(_("Message %s/%d is marked\n"), msginfo->folder->path, msginfo->msgnum);
}
static void summary_lock_row(SummaryView *summaryview, GtkCTreeNode *row)
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_LOCKED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo, MSG_LOCKED);
CHANGE_FLAGS(msginfo);
summary_set_row_marks(summaryview, row);
debug_print(_("Message %d is locked\n"), msginfo->msgnum);
if (MSG_IS_NEW(msginfo->flags) ||
MSG_IS_UNREAD(msginfo->flags)) {
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_NEW | MSG_UNREAD);
CHANGE_FLAGS(msginfo);
summary_set_row_marks(summaryview, row);
debug_print(_("Message %d is marked as read\n"),
summaryview->deleted--;
}
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_REPLIED | MSG_FORWARDED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_REPLIED);
if (!MSG_IS_UNREAD(msginfo->flags)) {
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_UNREAD);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_set_perm_flags(msginfo, MSG_UNREAD);
summaryview->unread++;
debug_print(_("Message %d is marked as unread\n"),
msginfo->msgnum);
}
msginfo->to_folder = NULL;
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_MARKED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
CHANGE_FLAGS(msginfo);
}
msginfo->to_folder = NULL;
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_MARKED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
CHANGE_FLAGS(msginfo);
summary_set_row_marks(summaryview, row);
-
debug_print(_("Message %s/%d is unmarked\n"),
msginfo->folder->path, msginfo->msgnum);
}
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GList *cur;
- for (cur = GTK_CLIST(ctree)->selection; cur != NULL;
- cur = cur->next)
+ for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
summary_unmark_row(summaryview, GTK_CTREE_NODE(cur->data));
summary_status_show(summaryview);
msginfo->to_folder->op_count--;
}
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_MARKED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_COPY);
if (!MSG_IS_MOVE(msginfo->flags)) {
MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
msginfo->to_folder->op_count--;
}
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_MARKED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
if (!MSG_IS_COPY(msginfo->flags)) {
MSG_SET_TMP_FLAGS(msginfo->flags, MSG_COPY);
GtkWidget *scrolledwin = summaryview->scrolledwin;
GtkWidget *pixmap;
FolderItem *item;
+ guint selected_msgnum = summary_get_msgnum(summaryview, summaryview->selected);
+ guint displayed_msgnum = summary_get_msgnum(summaryview, summaryview->displayed);
+
item = summaryview->folder_item;
+
+ summary_lock(summaryview);
+ summary_write_cache(summaryview);
+ summary_unlock(summaryview);
+
summary_clear_all(summaryview);
gtk_widget_destroy(summaryview->ctree);
gtk_widget_show(ctree);
summary_show(summaryview, item, FALSE);
+
+ summary_select_by_msgnum(summaryview, selected_msgnum);
+ summaryview->displayed = summary_find_msg_by_msgnum(summaryview, displayed_msgnum);
+ if (!summaryview->displayed)
+ messageview_clear(summaryview->messageview);
+ else
+ summary_redisplay_msg(summaryview);
}
case S_COL_MARK:
if (MSG_IS_MARKED(msginfo->flags)) {
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
+ if (MSG_IS_IMAP(msginfo->flags))
+ imap_msg_unset_perm_flags(msginfo, MSG_MARKED);
CHANGE_FLAGS(msginfo);
summary_set_row_marks(summaryview, row);
} else
compose_reply(msginfo, FALSE, TRUE, FALSE);
break;
case COMPOSE_FORWARD:
- if (!sel->next) {
+ if (prefs_common.forward_as_attachment) {
+ summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, widget);
+ return;
+ } else {
+ summary_reply_cb(summaryview, COMPOSE_FORWARD_INLINE, widget);
+ return;
+ }
+ break;
+ case COMPOSE_FORWARD_INLINE:
+ if (!sel->next) {
compose_forward(NULL, msginfo, FALSE);
break;
}
list = gtk_target_list_new(summary_drag_types, 1);
context = gtk_drag_begin(widget, list,
- GDK_ACTION_MOVE, button, event);
+ GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event);
gtk_drag_set_icon_default(context);
}
}
}
-
+void summary_toggle_show_read_messages(SummaryView *summaryview)
+{
+ if (summaryview->folder_item->hide_read_msgs)
+ summaryview->folder_item->hide_read_msgs = 0;
+ else
+ summaryview->folder_item->hide_read_msgs = 1;
+ summary_show(summaryview, summaryview->folder_item, FALSE);
+}
+
+static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
+ guint action)
+{
+ GtkWidget *widget;
+
+ widget = gtk_item_factory_get_item(gtk_item_factory_from_widget(summaryview->mainwin->menubar),
+ "/Summary/Hide read messages");
+ gtk_object_set_data(GTK_OBJECT(widget), "dont_toggle",
+ GINT_TO_POINTER(1));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), action);
+ gtk_object_set_data(GTK_OBJECT(widget), "dont_toggle",
+ GINT_TO_POINTER(0));
+}
/*
* End of Source.
*/