static GdkBitmap *newxpmmask;
static GdkPixmap *unreadxpm;
static GdkBitmap *unreadxpmmask;
+static GdkPixmap *draftsxpm;
+static GdkBitmap *draftsxpmmask;
+static GdkPixmap *draftsopenxpm;
+static GdkBitmap *draftsopenxpmmask;
static void folderview_select_node (FolderView *folderview,
GtkCTreeNode *node);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_QUEUE_CLOSE_HRM, &queuehrmxpm, &queuehrmxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_QUEUE_OPEN, &queueopenxpm, &queueopenxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_QUEUE_OPEN_HRM, &queueopenhrmxpm, &queueopenhrmxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DRAFTS_CLOSE, &draftsxpm, &draftsxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_DRAFTS_OPEN, &draftsopenxpm, &draftsopenxpmmask);
/* CLAWS: titles for "New" and "Unread" show new & unread pixmaps
* instead text (text overflows making them unreadable and ugly) */
}
#endif
+/** folderview_check_new()
+ * Scan and update the folder and return the
+ * count the number of new messages since last check.
+ * \param folder the folder to check for new messages
+ * \return the number of new messages since last check
+ */
gint folderview_check_new(Folder *folder)
{
GList *list;
GtkCTree *ctree;
GtkCTreeNode *node;
gint new_msgs = 0;
+ gint former_new_msgs = 0;
+ gint former_new = 0;
for (list = folderview_list; list != NULL; list = list->next) {
folderview = (FolderView *)list->data;
if (!folder && !FOLDER_IS_LOCAL(item->folder)) continue;
folderview_scan_tree_func(item->folder, item, NULL);
+ former_new = item->new;
if (folder_item_scan(item) < 0) {
if (folder && !FOLDER_IS_LOCAL(folder))
break;
}
folderview_update_node(folderview, node);
new_msgs += item->new;
+ former_new_msgs += former_new;
}
gtk_widget_set_sensitive(folderview->ctree, TRUE);
}
folder_write_list();
+ /* Number of new messages since last check is the just the difference
+ * between former_new_msgs and new_msgs. If new_msgs is less than
+ * former_new_msgs, that would mean another session accessed the folder
+ * and the result is not well defined.
+ */
+ new_msgs = (former_new_msgs < new_msgs ? new_msgs - former_new_msgs : 0);
return new_msgs;
}
item->name);
break;
case F_DRAFT:
- xpm = folderxpm;
- mask = folderxpmmask;
- if (item->hide_read_msgs) {
- openxpm = folderopenhrmxpm;
- openmask = folderopenhrmxpmmask;
- } else {
- openxpm = folderopenxpm;
- openmask = folderopenxpmmask;
- }
+ xpm = draftsxpm;
+ mask = draftsxpmmask;
+ openxpm = draftsopenxpm;
+ openmask = draftsopenxpmmask;
name = g_strdup(FOLDER_IS_LOCAL(item->folder) &&
!strcmp2(item->name, DRAFT_DIR) ? _("Drafts") :
item->name);
/* Show messages */
summary_set_prefs_from_folderitem(folderview->summaryview, item);
opened = summary_show(folderview->summaryview, item);
+
+ /* messageview could have deleted messages in this folder */
+ if (prefs_common.immediate_exec)
+ summary_execute(folderview->summaryview);
folder_clean_cache_memory();
folder_item_remove(item);
gtk_ctree_remove_node(ctree, folderview->selected);
folder_write_list();
+
+ prefs_filtering_delete_path(name);
}
static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
if (item->parent == NULL && item->folder->account)
account_open(item->folder->account);
- else
+ else {
+ summary_save_prefs_to_folderitem(folderview->summaryview, item);
prefs_folder_item_create(folderview, item);
+ }
}
static void folderview_recollapse_nodes(FolderView *folderview, GtkCTreeNode *node)