aboutsummaryrefslogtreecommitdiffstats
path: root/mail/message-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/message-list.c')
-rw-r--r--mail/message-list.c424
1 files changed, 193 insertions, 231 deletions
diff --git a/mail/message-list.c b/mail/message-list.c
index 79f24f14a8..6aead391f3 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -44,8 +44,6 @@
#include "mail-ops.h"
#include "Mail.h"
-#include "message-tag-followup.h"
-
#include "art/mail-new.xpm"
#include "art/mail-read.xpm"
#include "art/mail-replied.xpm"
@@ -59,7 +57,6 @@
#include "art/score-high.xpm"
#include "art/score-higher.xpm"
#include "art/score-highest.xpm"
-#include "art/flag-for-followup.xpm"
/*#define TIMEIT */
@@ -153,7 +150,6 @@ static struct {
{ score_high_xpm, NULL },
{ score_higher_xpm, NULL },
{ score_highest_xpm, NULL },
- { flag_for_followup_xpm,NULL },
{ NULL, NULL }
};
@@ -261,7 +257,7 @@ address_compare (gconstpointer address1, gconstpointer address2)
#ifdef SMART_ADDRESS_COMPARE
EMailAddress *addr1, *addr2;
#endif /* SMART_ADDRESS_COMPARE */
- gint retval;
+ int retval;
g_return_val_if_fail (address1 != NULL, 1);
g_return_val_if_fail (address2 != NULL, -1);
@@ -361,30 +357,6 @@ get_message_info (MessageList *message_list, ETreePath node)
return info;
}
-struct search_func_data {
- MessageList *message_list;
- guint32 flags;
- guint32 mask;
-};
-
-static gboolean
-search_func (ETreeModel *model, ETreePath path, struct search_func_data *data)
-{
- CamelMessageInfo *info;
-
- if (e_tree_model_node_is_root (data->message_list->model, path))
- return FALSE;
-
- info = get_message_info (data->message_list, path);
-
- if (info && (info->flags & data->mask) == data->flags) {
- gtk_signal_emit (GTK_OBJECT (data->message_list), message_list_signals[MESSAGE_SELECTED],
- camel_message_info_uid (info));
- return TRUE;
- }
- return FALSE;
-}
-
/**
* message_list_select:
* @message_list: a MessageList
@@ -403,32 +375,90 @@ search_func (ETreeModel *model, ETreePath path, struct search_func_data *data)
* message, or %MESSAGE_LIST_SELECT_PREVIOUS if it should find the
* previous. If no suitable row is found, the selection will be
* unchanged.
- *
- * Returns %TRUE if a new message has been selected or %FALSE otherwise.
**/
-gboolean
+void
message_list_select (MessageList *message_list,
+ int base_row,
MessageListSelectDirection direction,
guint32 flags,
guint32 mask,
gboolean wraparound)
{
- struct search_func_data data;
- ETreeFindNextParams params = 0;
+ CamelMessageInfo *info;
+ int vrow, last;
- data.message_list = message_list;
- data.flags = flags;
- data.mask = mask;
+ if (!GTK_WIDGET_HAS_FOCUS (message_list))
+ gtk_widget_grab_focus (GTK_WIDGET (message_list));
- if (direction == MESSAGE_LIST_SELECT_NEXT)
- params |= E_TREE_FIND_NEXT_FORWARD;
+ switch (direction) {
+ case MESSAGE_LIST_SELECT_PREVIOUS:
+ last = -1;
+ break;
+ case MESSAGE_LIST_SELECT_NEXT:
+ last = e_tree_row_count (message_list->tree);
+ if (last <= base_row)
+ return;
+ break;
+ default:
+ g_warning("Invalid argument to message_list_select");
+ return;
+ }
+
+ /* If it's -1, we want the last view row, not the last model row. */
+ /* model_to_view_row etc simply dont work for sorted views. Sigh. */
+ if (base_row == -1)
+ vrow = e_tree_row_count (message_list->tree) - 1;
else
- params |= E_TREE_FIND_NEXT_BACKWARD;
+ vrow = e_tree_model_to_view_row (message_list->tree, base_row);
+
+ if (vrow <= -1)
+ return;
+
+ /* This means that we'll move at least one message in 'direction'. */
+ if (vrow != last)
+ vrow += direction;
- if (wraparound)
- params |= E_TREE_FIND_NEXT_WRAP;
+ /* We don't know whether to use < or > due to "direction" */
+ while (vrow != last) {
+ ETreePath node = e_tree_node_at_row (message_list->tree, vrow);
+
+ info = get_message_info (message_list, node);
+
+ if (info && (info->flags & mask) == flags) {
+ e_tree_set_cursor (message_list->tree, node);
+
+ gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals[MESSAGE_SELECTED],
+ camel_message_info_uid (info));
+ return;
+ }
+ vrow += direction;
+ }
- return e_tree_find_next (message_list->tree, params, (ETreePathFunc) search_func, &data);
+ if (wraparound) {
+ ETreePath node;
+
+ if (direction == MESSAGE_LIST_SELECT_NEXT) {
+ base_row = 0;
+ vrow = 0;
+ } else {
+ base_row = -1;
+ vrow = e_tree_row_count (message_list->tree) - 1;
+ }
+
+ /* lets see if the first/last (depending on direction)
+ row matches our selection criteria */
+ node = e_tree_node_at_row (message_list->tree, vrow);
+ info = get_message_info (message_list, node);
+ if (info && (info->flags & mask) == flags) {
+ e_tree_set_cursor (message_list->tree, node);
+
+ gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals[MESSAGE_SELECTED],
+ camel_message_info_uid (info));
+ return;
+ }
+
+ message_list_select (message_list, base_row, direction, flags, mask, FALSE);
+ }
}
@@ -463,40 +493,6 @@ message_list_select_uid (MessageList *message_list, const char *uid)
}
}
-
-void
-message_list_select_next_thread (MessageList *message_list)
-{
- ETreePath node, last;
-
- if (!message_list->cursor_uid)
- return;
-
- /* get the thread parent node */
- last = node = g_hash_table_lookup (message_list->uid_nodemap, message_list->cursor_uid);
- while (!e_tree_model_node_is_root (message_list->model, node)) {
- last = node;
- node = e_tree_model_node_get_parent (message_list->model, node);
- }
-
- /* get the next toplevel node */
- node = e_tree_model_node_get_next (message_list->model, last);
-
- if (node) {
- CamelMessageInfo *info;
-
- info = get_message_info (message_list, node);
- e_tree_set_cursor (message_list->tree, node);
-
- g_free (message_list->cursor_uid);
- message_list->cursor_uid = g_strdup (camel_message_info_uid (info));
-
- gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals[MESSAGE_SELECTED],
- camel_message_info_uid (info));
- }
-}
-
-
/*
* SimpleTableModel::col_count
*/
@@ -567,16 +563,13 @@ ml_duplicate_value (ETreeModel *etm, int col, const void *value, void *data)
case COL_SENT:
case COL_RECEIVED:
case COL_SIZE:
- case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
return (void *) value;
-
+
case COL_FROM:
case COL_SUBJECT:
case COL_TO:
- case COL_FOLLOWUP_FLAG:
return g_strdup (value);
-
+
default:
g_assert_not_reached ();
}
@@ -596,14 +589,11 @@ ml_free_value (ETreeModel *etm, int col, void *value, void *data)
case COL_SENT:
case COL_RECEIVED:
case COL_SIZE:
- case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
break;
-
+
case COL_FROM:
case COL_SUBJECT:
case COL_TO:
- case COL_FOLLOWUP_FLAG:
g_free (value);
break;
default:
@@ -624,15 +614,12 @@ ml_initialize_value (ETreeModel *etm, int col, void *data)
case COL_SENT:
case COL_RECEIVED:
case COL_SIZE:
- case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
return NULL;
-
+
case COL_FROM:
case COL_SUBJECT:
case COL_TO:
- case COL_FOLLOWUP_FLAG:
- return g_strdup ("");
+ return g_strdup("");
default:
g_assert_not_reached ();
}
@@ -653,14 +640,11 @@ ml_value_is_empty (ETreeModel *etm, int col, const void *value, void *data)
case COL_SENT:
case COL_RECEIVED:
case COL_SIZE:
- case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
return value == NULL;
-
+
case COL_FROM:
case COL_SUBJECT:
case COL_TO:
- case COL_FOLLOWUP_FLAG:
return !(value && *(char *)value);
default:
g_assert_not_reached ();
@@ -686,44 +670,40 @@ static const char *score_map[] = {
N_("Highest"),
};
-
static char *
ml_value_to_string (ETreeModel *etm, int col, const void *value, void *data)
{
unsigned int i;
-
+
switch (col){
case COL_MESSAGE_STATUS:
i = (unsigned int)value;
if (i > 4)
- return g_strdup ("");
- return g_strdup (_(status_map[i]));
-
+ return g_strdup("");
+ return g_strdup(_(status_map[i]));
+
case COL_SCORE:
- i = (unsigned int) value + 3;
+ i = (unsigned int)value + 3;
if (i > 6)
i = 3;
- return g_strdup (_(score_map[i]));
+ return g_strdup(_(score_map[i]));
case COL_ATTACHMENT:
case COL_FLAGGED:
case COL_DELETED:
case COL_UNREAD:
- case COL_FOLLOWUP_FLAG_STATUS:
- return g_strdup_printf ("%d", (int) value);
+ return g_strdup_printf("%d", (int) value);
case COL_SENT:
case COL_RECEIVED:
- case COL_FOLLOWUP_DUE_BY:
- return filter_date (GPOINTER_TO_INT (value));
+ return filter_date (GPOINTER_TO_INT(value));
case COL_SIZE:
- return filter_size (GPOINTER_TO_INT (value));
-
+ return filter_size (GPOINTER_TO_INT(value));
+
case COL_FROM:
case COL_SUBJECT:
case COL_TO:
- case COL_FOLLOWUP_FLAG:
return g_strdup (value);
default:
g_assert_not_reached ();
@@ -744,14 +724,14 @@ subtree_unread(MessageList *ml, ETreePath node)
{
CamelMessageInfo *info;
ETreePath child;
-
+
while (node) {
info = e_tree_memory_node_get_data((ETreeMemory *)ml->model, node);
g_assert(info);
-
+
if (!(info->flags & CAMEL_MESSAGE_SEEN))
return TRUE;
-
+
if ((child = e_tree_model_node_get_first_child (E_TREE_MODEL (ml->model), node)))
if (subtree_unread(ml, child))
return TRUE;
@@ -766,15 +746,15 @@ subtree_size(MessageList *ml, ETreePath node)
CamelMessageInfo *info;
int size = 0;
ETreePath child;
-
+
while (node) {
info = e_tree_memory_node_get_data((ETreeMemory *)ml->model, node);
g_assert(info);
-
+
size += info->size;
if ((child = e_tree_model_node_get_first_child (E_TREE_MODEL (ml->model), node)))
size += subtree_size(ml, child);
-
+
node = e_tree_model_node_get_next (ml->model, node);
}
return size;
@@ -786,28 +766,28 @@ subtree_earliest(MessageList *ml, ETreePath node, int sent)
CamelMessageInfo *info;
time_t earliest = 0, date;
ETreePath *child;
-
+
while (node) {
info = e_tree_memory_node_get_data((ETreeMemory *)ml->model, node);
g_assert(info);
-
+
if (sent)
date = info->date_sent;
else
date = info->date_received;
-
+
if (earliest == 0 || date < earliest)
earliest = date;
-
+
if ((child = e_tree_model_node_get_first_child (ml->model, node))) {
date = subtree_earliest(ml, child, sent);
if (earliest == 0 || (date != 0 && date < earliest))
earliest = date;
}
-
+
node = e_tree_model_node_get_next (ml->model, node);
}
-
+
return earliest;
}
@@ -816,15 +796,15 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data)
{
MessageList *message_list = model_data;
CamelMessageInfo *msg_info;
-
+
/* retrieve the message information array */
msg_info = e_tree_memory_node_get_data (E_TREE_MEMORY(etm), path);
g_assert(msg_info);
-
+
switch (col){
case COL_MESSAGE_STATUS: {
ETreePath child;
-
+
/* if a tree is collapsed, then scan its insides for details */
child = e_tree_model_node_get_first_child(etm, path);
if (child && !e_tree_node_is_expanded(message_list->tree, path)) {
@@ -833,7 +813,7 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data)
else
return (void *)4;
}
-
+
if (msg_info->flags & CAMEL_MESSAGE_ANSWERED)
return GINT_TO_POINTER (2);
else if (msg_info->flags & CAMEL_MESSAGE_SEEN)
@@ -854,46 +834,6 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data)
return GINT_TO_POINTER (score);
}
- case COL_FOLLOWUP_FLAG_STATUS: {
- const char *tag;
-
- tag = camel_tag_get ((CamelTag **) &msg_info->user_tags, "follow-up");
- if (tag)
- return GINT_TO_POINTER (TRUE);
- else
- return GINT_TO_POINTER (FALSE);
- }
- case COL_FOLLOWUP_DUE_BY: {
- struct _FollowUpTag *tag;
- const char *tag_value;
- time_t due_by;
-
- tag_value = camel_tag_get ((CamelTag **) &msg_info->user_tags, "follow-up");
- if (tag_value) {
- tag = message_tag_followup_decode (tag_value);
- due_by = tag->target_date;
- g_free (tag);
- return GINT_TO_POINTER (due_by);
- } else {
- return GINT_TO_POINTER (0);
- }
- }
- case COL_FOLLOWUP_FLAG: {
- struct _FollowUpTag *tag;
- const char *tag_value;
- int flag_type;
-
- tag_value = camel_tag_get ((CamelTag **) &msg_info->user_tags, "follow-up");
- if (tag_value) {
- tag = message_tag_followup_decode (tag_value);
- flag_type = tag ? tag->type : FOLLOWUP_FLAG_NONE;
- g_free (tag);
-
- return (void *) message_tag_followup_i18n_name (flag_type);
- } else {
- return NULL;
- }
- }
case COL_ATTACHMENT:
return GINT_TO_POINTER ((msg_info->flags & CAMEL_MESSAGE_ATTACHMENTS) != 0);
case COL_FROM:
@@ -912,40 +852,29 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data)
return GINT_TO_POINTER ((msg_info->flags & CAMEL_MESSAGE_DELETED) != 0);
case COL_UNREAD: {
ETreePath child;
-
+
child = e_tree_model_node_get_first_child(etm, path);
if (child && !e_tree_node_is_expanded(message_list->tree, path)
&& (msg_info->flags & CAMEL_MESSAGE_SEEN)) {
return GINT_TO_POINTER (subtree_unread (message_list, child));
}
-
+
return GINT_TO_POINTER (!(msg_info->flags & CAMEL_MESSAGE_SEEN));
}
case COL_COLOUR: {
- const char *colour, *followup;
-
+ const char *colour;
+
colour = camel_tag_get ((CamelTag **) &msg_info->user_tags, "colour");
- followup = camel_tag_get ((CamelTag **) &msg_info->user_tags, "follow-up");
- if (colour == NULL && msg_info->flags & CAMEL_MESSAGE_FLAGGED) {
+ if (colour == NULL && msg_info->flags & CAMEL_MESSAGE_FLAGGED)
/* FIXME: extract from the xpm somehow. */
colour = "#A7453E";
- } else if (followup != NULL) {
- struct _FollowUpTag *tag;
- time_t now = time (NULL);
-
- tag = message_tag_followup_decode (followup);
- if (tag && now >= tag->target_date) {
- /* FIXME: extract from the xpm somehow. */
- colour = "#A7453E";
- }
- g_free (tag);
- }
return (void *)colour;
}
- default:
- g_assert_not_reached ();
- return NULL;
}
+
+ g_assert_not_reached ();
+
+ return NULL;
}
static void
@@ -986,10 +915,10 @@ filter_date (time_t date)
struct tm then, now, yesterday;
char buf[26];
gboolean done = FALSE;
-
+
if (date == 0)
return g_strdup (_("?"));
-
+
localtime_r (&date, &then);
localtime_r (&nowdate, &now);
if (then.tm_mday == now.tm_mday &&
@@ -1047,37 +976,33 @@ message_list_create_extras (void)
GdkPixbuf *images [7];
ETableExtras *extras;
ECell *cell;
+
+ extras = e_table_extras_new();
+ e_table_extras_add_pixbuf(extras, "status", states_pixmaps [0].pixbuf);
+ e_table_extras_add_pixbuf(extras, "score", states_pixmaps [13].pixbuf);
+ e_table_extras_add_pixbuf(extras, "attachment", states_pixmaps [6].pixbuf);
+ e_table_extras_add_pixbuf(extras, "flagged", states_pixmaps [7].pixbuf);
- extras = e_table_extras_new ();
- e_table_extras_add_pixbuf (extras, "status", states_pixmaps [0].pixbuf);
- e_table_extras_add_pixbuf (extras, "score", states_pixmaps [13].pixbuf);
- e_table_extras_add_pixbuf (extras, "attachment", states_pixmaps [6].pixbuf);
- e_table_extras_add_pixbuf (extras, "flagged", states_pixmaps [7].pixbuf);
- e_table_extras_add_pixbuf (extras, "followup", states_pixmaps [15].pixbuf);
-
- e_table_extras_add_compare (extras, "address_compare", address_compare);
- e_table_extras_add_compare (extras, "subject_compare", subject_compare);
+ e_table_extras_add_compare(extras, "address_compare", address_compare);
+ e_table_extras_add_compare(extras, "subject_compare", subject_compare);
for (i = 0; i < 5; i++)
images [i] = states_pixmaps [i].pixbuf;
-
- e_table_extras_add_cell (extras, "render_message_status", e_cell_toggle_new (0, 5, images));
-
+
+ e_table_extras_add_cell(extras, "render_message_status", e_cell_toggle_new (0, 5, images));
+
for (i = 0; i < 2; i++)
images [i] = states_pixmaps [i + 5].pixbuf;
- e_table_extras_add_cell (extras, "render_attachment", e_cell_toggle_new (0, 2, images));
+ e_table_extras_add_cell(extras, "render_attachment", e_cell_toggle_new (0, 2, images));
images [1] = states_pixmaps [7].pixbuf;
- e_table_extras_add_cell (extras, "render_flagged", e_cell_toggle_new (0, 2, images));
-
- images[1] = states_pixmaps [15].pixbuf;
- e_table_extras_add_cell (extras, "render_flag_status", e_cell_toggle_new (0, 2, images));
-
+ e_table_extras_add_cell(extras, "render_flagged", e_cell_toggle_new (0, 2, images));
+
for (i = 0; i < 7; i++)
images[i] = states_pixmaps [i + 7].pixbuf;
- e_table_extras_add_cell (extras, "render_score", e_cell_toggle_new (0, 7, images));
+ e_table_extras_add_cell(extras, "render_score", e_cell_toggle_new (0, 7, images));
/* date cell */
cell = e_cell_date_new (NULL, GTK_JUSTIFY_LEFT);
@@ -1085,7 +1010,7 @@ message_list_create_extras (void)
"bold_column", COL_UNREAD,
"color_column", COL_COLOUR,
NULL);
- e_table_extras_add_cell (extras, "render_date", cell);
+ e_table_extras_add_cell(extras, "render_date", cell);
/* text cell */
cell = e_cell_text_new (NULL, GTK_JUSTIFY_LEFT);
@@ -1093,20 +1018,20 @@ message_list_create_extras (void)
"bold_column", COL_UNREAD,
"color_column", COL_COLOUR,
NULL);
- e_table_extras_add_cell (extras, "render_text", cell);
-
- e_table_extras_add_cell (extras, "render_tree",
- e_cell_tree_new (NULL, NULL, /* let the tree renderer default the pixmaps */
- TRUE, cell));
+ e_table_extras_add_cell(extras, "render_text", cell);
+ e_table_extras_add_cell(extras, "render_tree",
+ e_cell_tree_new (NULL, NULL, /* let the tree renderer default the pixmaps */
+ TRUE, cell));
+
/* size cell */
cell = e_cell_size_new (NULL, GTK_JUSTIFY_RIGHT);
gtk_object_set (GTK_OBJECT (cell),
"bold_column", COL_UNREAD,
"color_column", COL_COLOUR,
NULL);
- e_table_extras_add_cell (extras, "render_size", cell);
-
+ e_table_extras_add_cell(extras, "render_size", cell);
+
return extras;
}
@@ -1118,14 +1043,26 @@ save_tree_state(MessageList *ml)
if (ml->folder == NULL || ml->tree == NULL)
return;
+ filename = mail_config_folder_to_cachename(ml->folder, "et-header-");
+ e_tree_save_state(ml->tree, filename);
+ g_free(filename);
+
filename = mail_config_folder_to_cachename(ml->folder, "et-expanded-");
e_tree_save_expanded_state(ml->tree, filename);
g_free(filename);
}
+static void
+sort_info_changed (GtkWidget *widget, MessageList *ml)
+{
+ save_tree_state(ml);
+}
+
static void
message_list_setup_etree (MessageList *message_list, gboolean outgoing)
{
+ ETableState *etstate;
+
/* build the spec based on the folder, and possibly from a saved file */
/* otherwise, leave default */
if (message_list->folder) {
@@ -1140,6 +1077,21 @@ message_list_setup_etree (MessageList *message_list, gboolean outgoing)
name = camel_service_get_name (CAMEL_SERVICE (message_list->folder->parent_store), TRUE);
d(printf ("folder name is '%s'\n", name));
+ path = mail_config_folder_to_cachename (message_list->folder, "et-header-");
+ if (path && stat (path, &st) == 0 && st.st_size > 0 && S_ISREG (st.st_mode)) {
+ /* build based on saved file */
+ e_tree_load_state (message_list->tree, path);
+ } else if (outgoing) {
+ /* Swap From/To for Drafts, Sent, Outbox */
+ char *state = "<ETableState>"
+ "<column source=\"0\"/> <column source=\"1\"/> "
+ "<column source=\"8\"/> <column source=\"5\"/> "
+ "<column source=\"6\"/> <grouping> </grouping> </ETableState>";
+
+ e_tree_set_state (message_list->tree, state);
+ }
+ g_free (path);
+
path = mail_config_folder_to_cachename (message_list->folder, "et-expanded-");
if (path && stat (path, &st) == 0 && st.st_size > 0 && S_ISREG (st.st_mode)) {
/* build based on saved file */
@@ -1148,6 +1100,18 @@ message_list_setup_etree (MessageList *message_list, gboolean outgoing)
g_free (path);
g_free (name);
+
+ etstate = e_tree_get_state_object (message_list->tree);
+ gtk_signal_connect (GTK_OBJECT (etstate->sort_info),
+ "sort_info_changed",
+ GTK_SIGNAL_FUNC (sort_info_changed),
+ message_list);
+ gtk_signal_connect (GTK_OBJECT (etstate->sort_info),
+ "group_info_changed",
+ GTK_SIGNAL_FUNC (sort_info_changed),
+ message_list);
+
+ gtk_object_unref (GTK_OBJECT (etstate));
}
}
@@ -1256,7 +1220,6 @@ message_list_class_init (GtkObjectClass *object_class)
static void
message_list_construct (MessageList *message_list)
{
- gboolean construct_failed;
message_list->model =
e_tree_memory_callbacks_new (ml_tree_icon_at,
@@ -1288,16 +1251,14 @@ message_list_construct (MessageList *message_list)
* The etree
*/
message_list->extras = message_list_create_extras ();
- construct_failed = (e_tree_scrolled_construct_from_spec_file (E_TREE_SCROLLED (message_list),
- message_list->model,
- message_list->extras,
- EVOLUTION_ETSPECDIR "/message-list.etspec",
- NULL)
- == NULL);
-
+ e_tree_scrolled_construct_from_spec_file (E_TREE_SCROLLED (message_list),
+ message_list->model,
+ message_list->extras,
+ EVOLUTION_ETSPECDIR "/message-list.etspec",
+ NULL);
+
message_list->tree = e_tree_scrolled_get_tree(E_TREE_SCROLLED (message_list));
- if (!construct_failed)
- e_tree_root_node_set_visible (message_list->tree, FALSE);
+ e_tree_root_node_set_visible (message_list->tree, FALSE);
gtk_signal_connect (GTK_OBJECT (message_list->tree), "cursor_activated",
GTK_SIGNAL_FUNC (on_cursor_activated_cmd),
@@ -1491,6 +1452,7 @@ build_tree (MessageList *ml, CamelFolderThread *thread, CamelFolderChangeInfo *c
diff -= start.tv_sec * 1000 + start.tv_usec/1000;
printf("Building tree took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
#endif
+
}
/* this is about 20% faster than build_subtree_diff,
@@ -2076,9 +2038,9 @@ on_cursor_activated_cmd (ETree *tree, int row, ETreePath path, gpointer user_dat
static gint
on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, MessageList *list)
{
- CamelMessageInfo *info;
int flag;
-
+ CamelMessageInfo *info;
+
if (col == COL_MESSAGE_STATUS)
flag = CAMEL_MESSAGE_SEEN;
else if (col == COL_FLAGGED)
@@ -2092,12 +2054,12 @@ on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, Mess
}
/* If a message was marked as deleted and the user flags it as
- important, marks it as needing a reply, marks it as unread,
- then undelete the message. */
- if (info->flags & CAMEL_MESSAGE_DELETED) {
+ important or marks it as unread, undelete it. */
+ if (info->flags & CAMEL_MESSAGE_DELETED) {
+
if (col == COL_FLAGGED && !(info->flags & CAMEL_MESSAGE_FLAGGED))
flag |= CAMEL_MESSAGE_DELETED;
-
+
if (col == COL_MESSAGE_STATUS && (info->flags & CAMEL_MESSAGE_SEEN))
flag |= CAMEL_MESSAGE_DELETED;
}
@@ -2601,5 +2563,5 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came
m->folder = ml->folder;
camel_object_ref (CAMEL_OBJECT (m->folder));
- e_thread_put (mail_thread_queued, (EMsg *)m);
+ e_thread_put (mail_thread_new, (EMsg *)m);
}