Create a vtrash folder, not a vee folder.

2001-03-29  Not Zed  <NotZed@Ximian.com>

        * mail-local.c (init_trash): Create a vtrash folder, not a vee folder.

        * folder-browser-factory.c (control_activate): Hook in the hide
        deleted thingy.
        Removed MessageHideDeleted menu stuff.

        * message-list.c (message_list_set_hidedeleted): New function, to
        set if we should hide deleted messages automatically/always.
        (regen_list_regen): If we have hide deleted messages turned on,
        then hide them.
        (main_message_changed): Promote to a folder_changed event with a
        change list, folder_changed has the optimisations to handle this
        appropriately.
        (main_folder_changed): IF we get changes events for
        deleted/undeleted stuff, change to added/removed events, rebuild
        if necessary.
        (message_list_set_folder): Setup the default hidedeleted state to
        be to hide everything unless it is in a vtrash folder.

svn path=/trunk/; revision=9009
This commit is contained in:
Not Zed
2001-03-29 05:34:26 +00:00
committed by Michael Zucci
parent bf26d96809
commit 1ff6054e5e
5 changed files with 88 additions and 16 deletions

View File

@ -1,3 +1,24 @@
2001-03-29 Not Zed <NotZed@Ximian.com>
* mail-local.c (init_trash): Create a vtrash folder, not a vee folder.
* folder-browser-factory.c (control_activate): Hook in the hide
deleted thingy.
Removed MessageHideDeleted menu stuff.
* message-list.c (message_list_set_hidedeleted): New function, to
set if we should hide deleted messages automatically/always.
(regen_list_regen): If we have hide deleted messages turned on,
then hide them.
(main_message_changed): Promote to a folder_changed event with a
change list, folder_changed has the optimisations to handle this
appropriately.
(main_folder_changed): IF we get changes events for
deleted/undeleted stuff, change to added/removed events, rebuild
if necessary.
(message_list_set_folder): Setup the default hidedeleted state to
be to hide everything unless it is in a vtrash folder.
2001-03-28 Jeffrey Stedfast <fejj@ximian.com>
* mail-account-gui.c (setup_service): Move the

View File

@ -92,7 +92,7 @@ BonoboUIVerb verbs [] = {
BONOBO_UI_UNSAFE_VERB ("MessageHideClear", hide_none),
BONOBO_UI_UNSAFE_VERB ("MessageHideRead", hide_read),
BONOBO_UI_UNSAFE_VERB ("MessageHideDeleted", hide_deleted),
/*BONOBO_UI_UNSAFE_VERB ("MessageHideDeleted", hide_deleted),*/
BONOBO_UI_UNSAFE_VERB ("MessageHideSelected", hide_selected),
/* Folder Menu */
@ -121,7 +121,7 @@ static struct {
{ "/menu/Tools/Component/SetMailConfig", "16_configure_mail.xpm", NULL },
{ "/menu/Edit/MessageDelete", "delete_message.xpm", NULL },
{ "/menu/Edit/MessageUndelete", "undelete_message.xpm", NULL },
{ "/menu/View/MessageHideDeleted", "hide_deleted_messages.xpm", NULL },
/*{ "/menu/View/MessageHideDeleted", "hide_deleted_messages.xpm", NULL },*/
{ "/menu/View/MessageHideRead", "hide_read_messages.xpm", NULL },
{ "/menu/View/MessageHideSelected", "hide_selected_messages.xpm", NULL },
{ "/menu/View/MessageHideClear", "show_all_messages.xpm", NULL },

View File

@ -51,6 +51,7 @@
#include "camel/camel.h"
#include "camel/camel-vee-store.h"
#include "camel/camel-vee-folder.h"
#include "camel/camel-vtrash-folder.h"
#include "filter/vfolder-context.h"
#include "filter/vfolder-rule.h"
@ -364,7 +365,7 @@ init_trash (CamelStore *store)
name = g_strdup_printf ("%s?(match-all (system-flag \"Deleted\"))", "vTrash");
store->vtrash = camel_vee_folder_new (store, name, CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_VEE_FOLDER_AUTO);
store->vtrash = camel_vtrash_folder_new (store, name);
g_free (name);

View File

@ -16,6 +16,7 @@
#include <camel/camel-folder.h>
#include <e-util/ename/e-name-western.h>
#include <camel/camel-folder-thread.h>
#include <camel/camel-vtrash-folder.h>
#include <e-util/e-memory.h>
#include <string.h>
@ -1815,15 +1816,44 @@ static void
main_folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
{
MessageList *ml = MESSAGE_LIST (user_data);
CamelFolderChangeInfo *changes = (CamelFolderChangeInfo *)event_data;
CamelFolderChangeInfo *changes = (CamelFolderChangeInfo *)event_data, *newchanges;
CamelMessageInfo *info;
CamelFolder *folder = (CamelFolder *)o;
int i;
printf("folder changed event, changes = %p\n", changes);
if (changes) {
printf("changed = %d added = %d removed = %d\n",
changes->uid_changed->len, changes->uid_added->len, changes->uid_removed->len);
if (changes->uid_added->len == 0 && changes->uid_removed->len == 0) {
int i;
/* check if the hidden state has changed, if so modify accordingly, then regenerate */
if (ml->hidedeleted) {
newchanges = camel_folder_change_info_new();
for (i=0;i<changes->uid_changed->len;i++) {
ETreePath node = g_hash_table_lookup (ml->uid_nodemap, changes->uid_changed->pdata[i]);
info = camel_folder_get_message_info(folder, changes->uid_changed->pdata[i]);
if (node != NULL && info != NULL && (info->flags & CAMEL_MESSAGE_DELETED) != 0) {
camel_folder_change_info_remove_uid(newchanges, changes->uid_changed->pdata[i]);
} else if (node == NULL && info != NULL && (info->flags & CAMEL_MESSAGE_DELETED) == 0) {
camel_folder_change_info_add_uid(newchanges, changes->uid_changed->pdata[i]);
} else {
camel_folder_change_info_change_uid(newchanges, changes->uid_changed->pdata[i]);
}
camel_folder_free_message_info(folder, info);
}
if (newchanges->uid_added->len != changes->uid_added->len
|| newchanges->uid_removed->len != changes->uid_removed->len) {
camel_folder_change_info_free(changes);
changes = newchanges;
} else {
camel_folder_change_info_free(newchanges);
}
}
if (changes->uid_added->len == 0 && changes->uid_removed->len == 0 && changes->uid_changed->len < 100) {
for (i=0;i<changes->uid_changed->len;i++) {
ETreePath node = g_hash_table_lookup (ml->uid_nodemap, changes->uid_changed->pdata[i]);
if (node)
@ -1835,7 +1865,6 @@ main_folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
}
}
mail_regen_list(ml, ml->search, NULL, changes);
}
@ -1858,14 +1887,13 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
static void
main_message_changed (CamelObject *o, gpointer uid, gpointer user_data)
{
MessageList *message_list = MESSAGE_LIST (user_data);
ETreePath *node;
MessageList *ml = MESSAGE_LIST (user_data);
CamelFolderChangeInfo *changes;
node = g_hash_table_lookup (message_list->uid_nodemap, uid);
if (node)
e_tree_model_node_data_changed (message_list->model, node);
g_free (uid);
changes = camel_folder_change_info_new();
camel_folder_change_info_change_uid(changes, uid);
main_folder_changed(o, changes, ml);
g_free(uid);
}
static void
@ -1921,6 +1949,8 @@ message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder)
camel_object_ref (CAMEL_OBJECT (camel_folder));
message_list->hidedeleted = !(CAMEL_IS_VTRASH_FOLDER(camel_folder));
hide_load_state(message_list);
mail_regen_list(message_list, message_list->search, NULL, NULL);
}
@ -2031,6 +2061,16 @@ message_list_set_threaded(MessageList *ml, gboolean threaded)
}
}
void
message_list_set_hidedeleted(MessageList *ml, gboolean hidedeleted)
{
if (ml->hidedeleted ^ hidedeleted) {
ml->hidedeleted = hidedeleted;
mail_regen_list(ml, ml->search, NULL, NULL);
}
}
void
message_list_set_search(MessageList *ml, const char *search)
{
@ -2207,6 +2247,7 @@ struct _regen_list_msg {
char *hideexpr;
CamelFolderChangeInfo *changes;
gboolean dotree; /* we are building a tree */
gboolean hidedel; /* we want to/dont want to show deleted messages */
CamelFolderThread *tree;
CamelFolder *folder;
@ -2317,8 +2358,13 @@ static void regen_list_regen(struct _mail_msg *mm)
m->summary = g_ptr_array_new();
for (i=0;i<showuids->len;i++) {
info = camel_folder_get_message_info(m->folder, showuids->pdata[i]);
if (info)
g_ptr_array_add(m->summary, info);
if (info) {
/* FIXME: should this be taken account of in above processing? */
if (m->hidedel && (info->flags & CAMEL_MESSAGE_DELETED) != 0)
camel_folder_free_message_info(m->folder, info);
else
g_ptr_array_add(m->summary, info);
}
}
if (uidnew)
@ -2409,6 +2455,7 @@ mail_regen_list(MessageList *ml, const char *search, const char *hideexpr, Camel
m->hideexpr = g_strdup(hideexpr);
m->changes = changes;
m->dotree = ml->threaded;
m->hidedel = ml->hidedeleted;
gtk_object_ref((GtkObject *)ml);
m->folder = ml->folder;
camel_object_ref((CamelObject *)m->folder);

View File

@ -68,6 +68,8 @@ struct _MessageList {
/* Are we displaying threaded view? */
gboolean threaded;
/* do we automatically hide deleted messages? */
gboolean hidedeleted;
/* Where the ETree cursor is. */
int cursor_row;
@ -119,6 +121,7 @@ void message_list_hide_uids(MessageList *ml, GPtrArray *uids);
void message_list_hide_clear(MessageList *ml);
void message_list_set_threaded(MessageList *ml, gboolean threaded);
void message_list_set_hidedeleted(MessageList *ml, gboolean hidedeleted);
void message_list_set_search(MessageList *ml, const char *search);
char *message_list_get_layout (MessageList *message_list);