guint action,
GtkWidget *widget);
+static void folderview_empty_trash_cb (FolderView *folderview,
+ guint action,
+ GtkWidget *widget);
+
static void folderview_search_cb (FolderView *folderview,
guint action,
GtkWidget *widget);
{N_("/Mark all _read"), NULL, mark_all_read_cb, 0, NULL},
{N_("/_Search folder..."), NULL, folderview_search_cb, 0, NULL},
{N_("/_Properties..."), NULL, folderview_property_cb, 0, NULL},
- {N_("/_Processing..."), NULL, folderview_processing_cb, 0, NULL},
+ {N_("/Pr_ocessing..."), NULL, folderview_processing_cb, 0, NULL},
};
+static GtkItemFactoryEntry folder_view_trash_popup_entries[] = {
+ {N_("/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/Empty trash..."), NULL, folderview_empty_trash_cb, 0, NULL},
+};
+
+
GtkTargetEntry folderview_drag_types[] =
{
{"text/plain", GTK_TARGET_SAME_APP, TARGET_DUMMY}
gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
-#ifndef CLAWS /* text instead of pixmaps */
gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_NEW,
GTK_JUSTIFY_RIGHT);
gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_UNREAD,
GTK_JUSTIFY_RIGHT);
-#endif
gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_TOTAL,
GTK_JUSTIFY_RIGHT);
gtk_clist_set_column_width(GTK_CLIST(ctree), COL_FOLDER,
hbox_unread = gtk_hbox_new(FALSE, 4);
/* left justified */
- gtk_box_pack_start(GTK_BOX(hbox_new),label_new,FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(hbox_unread),label_unread,FALSE,FALSE,0);
+ gtk_box_pack_start(GTK_BOX(hbox_new), label_new, TRUE, TRUE, 0);
+ gtk_misc_set_alignment (GTK_MISC (label_new), 1, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox_unread), label_unread, TRUE, TRUE, 0);
+ gtk_misc_set_alignment (GTK_MISC (label_unread), 1, 0.5);
gtk_widget_show_all(hbox_new);
gtk_widget_show_all(hbox_unread);
if (fpopup->set_sensitivity != NULL)
fpopup->set_sensitivity(fpopup_factory, item);
+ if (item == folder->trash &&
+ gtk_item_factory_get_item(fpopup_factory, "/Empty trash...") == NULL) {
+ gtk_item_factory_create_item(fpopup_factory, &folder_view_trash_popup_entries[0], folderview, 1);
+ gtk_item_factory_create_item(fpopup_factory, &folder_view_trash_popup_entries[1], folderview, 1);
+ } else {
+ gtk_item_factory_delete_entry(fpopup_factory, &folder_view_trash_popup_entries[0]);
+ gtk_item_factory_delete_entry(fpopup_factory, &folder_view_trash_popup_entries[1]);
+ }
+
#define SET_SENS(name, sens) \
menu_set_sensitive(fpopup_factory, name, sens)
SET_SENS("/Mark all read", item->unread_msgs >= 1);
- SET_SENS("/Search folder...", item->total_msgs >= 1);
+ SET_SENS("/Search folder...", item->total_msgs >= 1 &&
+ folderview->selected == folderview->opened);
SET_SENS("/Properties...", TRUE);
SET_SENS("/Processing...", item->node->parent != NULL);
-
+ if (item == folder->trash)
+ SET_SENS("/Empty trash...", folder_item_get_msg_list(item) != NULL);
#undef SET_SENS
popup = gtk_item_factory_get_widget(fpopup_factory, fpopup->path);
alertpanel_error(_("Folder could not be opened."));
+ folderview->open_folder = FALSE;
+ can_select = TRUE;
+
return;
}
gtk_clist_thaw(GTK_CLIST(ctree));
}
+static void folderview_empty_trash_cb(FolderView *folderview, guint action,
+ GtkWidget *widget)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ FolderItem *item;
+ GSList *mlist = NULL;
+ GSList *cur = NULL;
+ if (!folderview->selected) return;
+
+ item = gtk_ctree_node_get_row_data(ctree, folderview->selected);
+ g_return_if_fail(item != NULL);
+ g_return_if_fail(item->folder != NULL);
+ if (item != item->folder->trash) return;
+
+ if (prefs_common.ask_on_clean) {
+ if (alertpanel(_("Empty trash"),
+ _("Empty all messages in trash?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
+ return;
+ }
+
+ mlist = folder_item_get_msg_list(item);
+
+ for (cur = mlist ; cur != NULL ; cur = cur->next) {
+ MsgInfo * msginfo = (MsgInfo *) cur->data;
+ partial_mark_for_delete(msginfo);
+ procmsg_msginfo_free(msginfo);
+ }
+
+ folder_item_remove_all_msg(item);
+}
+
static void folderview_search_cb(FolderView *folderview, guint action,
GtkWidget *widget)
{
{
FolderItem *item;
GList *cur;
- gchar *source=NULL;
-
+ gchar *source = NULL;
+
for (cur = GTK_CLIST(folderview->ctree)->selection;
cur != NULL; cur = cur->next) {
item = gtk_ctree_node_get_row_data
ctree = folderview->ctree;
g_return_val_if_fail(ctree != NULL, FALSE);
- if (hookdata->update_flags & FOLDER_NEW_FOLDERITEM)
+ if (hookdata->update_flags & FOLDER_ADD_FOLDERITEM)
folderview_create_folder_node(folderview, hookdata->item);
else if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM) {
GtkCTreeNode *node;
node = gtk_ctree_find_by_row_data(GTK_CTREE(ctree), NULL, hookdata->item);
if (node != NULL)
gtk_ctree_remove_node(GTK_CTREE(ctree), node);
- } else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_NEW_FOLDER | FOLDER_DESTROY_FOLDER))
+ } else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDER | FOLDER_REMOVE_FOLDER))
folderview_set(folderview);
return FALSE;
if (gtk_clist_get_selection_info
(GTK_CLIST(widget), x - 24, y - 24, &row, &column)) {
+ GtkWidget *srcwidget;
+
if (y > height - 24 && height + vpos < total_height)
gtk_adjustment_set_value(pos, (vpos+5 > height ? height : vpos+5));
item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
src_item = folderview->summaryview->folder_item;
- if (item && item->folder && item->path &&
- src_item && src_item != item) {
- switch (FOLDER_TYPE(item->folder)) {
- case F_MH:
-#if 0
- case F_MBOX:
-#endif
- case F_IMAP:
+ srcwidget = gtk_drag_get_source_widget(context);
+ if (srcwidget == folderview->summaryview->ctree) {
+ /* comes from summaryview */
+ /* we are copying messages, so only accept folder items that are not
+ the source item, are no root items and can copy messages */
+ if (item && item->folder && folder_item_parent(item) != NULL && src_item &&
+ src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL)
acceptable = TRUE;
- break;
- default:
- break;
- }
- } else if (item && item->folder && folder_item_get_path(item) &&
- src_item && src_item != item) {
- /* a root folder - acceptable only from folderview */
- if (FOLDER_TYPE(item->folder) == F_MH || FOLDER_TYPE(item->folder) == F_IMAP)
+ } else if (srcwidget == folderview->ctree) {
+ /* comes from folderview */
+ /* we are moving folder items, only accept folders that are not
+ the source items and can copy messages and create folder items */
+ if (item && item->folder && src_item && src_item != item &&
+ FOLDER_CLASS(item->folder)->copy_msg != NULL &&
+ FOLDER_CLASS(item->folder)->create_folder != NULL)
acceptable = TRUE;
}
-
}
if (acceptable || (src_item && src_item == item))
/* re-check (due to acceptable possibly set for folder moves */
if (!(item && item->folder && item->path &&
- src_item && src_item != item &&
- (FOLDER_TYPE(item->folder) == F_MH || FOLDER_TYPE(item->folder) == F_IMAP))) {
+ src_item && src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL)) {
return;
}
if (item && src_item) {
switch (drag_context->action) {
- case GDK_ACTION_COPY:
- summary_copy_selected_to(folderview->summaryview, item);
- gtk_drag_finish(drag_context, TRUE, FALSE, time);
- break;
- case GDK_ACTION_MOVE:
- case GDK_ACTION_DEFAULT:
- default:
- if (FOLDER_TYPE(src_item->folder) == F_NEWS)
+ case GDK_ACTION_COPY:
summary_copy_selected_to(folderview->summaryview, item);
- else
- summary_move_selected_to(folderview->summaryview, item);
- gtk_drag_finish(drag_context, TRUE, TRUE, time);
+ gtk_drag_finish(drag_context, TRUE, FALSE, time);
+ break;
+ case GDK_ACTION_MOVE:
+ case GDK_ACTION_DEFAULT:
+ default:
+ if (FOLDER_CLASS(src_item->folder)->remove_msg == NULL)
+ summary_copy_selected_to(folderview->summaryview, item);
+ else
+ summary_move_selected_to(folderview->summaryview, item);
+ gtk_drag_finish(drag_context, TRUE, TRUE, time);
}
} else
gtk_drag_finish(drag_context, FALSE, FALSE, time);