aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog13
-rw-r--r--mail/mail-ops.c2
-rw-r--r--mail/message-list.c34
-rw-r--r--mail/message-list.h4
4 files changed, 41 insertions, 12 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 97a4ef54df..041c6d8c93 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,16 @@
+2000-06-30 Dan Winship <danw@helixcode.com>
+
+ * message-list.c (on_row_selection): use the ETable row_selection
+ signal to track how many rows are selected. Eventually we will use
+ this info to disable toolbar buttons when you have too few/too
+ many messages selected, but the current toolbar widget doesn't
+ allow that.
+
+ * message-list.h, message-list.c, mail-ops.c: Change selected_row
+ and selected_uid fields of MessageList to cursor_row and
+ cursor_uid to be more correct according to the new ETable
+ interfaces.
+
2000-06-30 Ettore Perazzoli <ettore@helixcode.com>
* component-factory.c: Eeek. Fix typo: add missing star in the
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index 19f2c88972..b0b6b4cb89 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -570,7 +570,7 @@ reply (FolderBrowser *fb, gboolean to_all)
psd = g_new (struct post_send_data, 1);
psd->folder = fb->folder;
gtk_object_ref (GTK_OBJECT (psd->folder));
- psd->uid = fb->message_list->selected_uid;
+ psd->uid = fb->message_list->cursor_uid;
psd->flags = CAMEL_MESSAGE_ANSWERED;
composer = mail_generate_reply (fb->mail_display->current_message, to_all);
diff --git a/mail/message-list.c b/mail/message-list.c
index 8d08a91a4e..3167a3fe8c 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -52,7 +52,9 @@
static BonoboObjectClass *message_list_parent_class;
static POA_Evolution_MessageList__vepv evolution_message_list_vepv;
-static void on_cursor_change_cmd (ETable *table, int row, gpointer user_data);
+static void on_cursor_change_cmd (ETable *table, int row, gpointer user_data);
+static void on_row_selection (ETable *table, int row, gboolean selected,
+ gpointer user_data);
static void select_row (ETable *table, gpointer user_data);
static char *filter_date (const void *data);
@@ -127,12 +129,12 @@ mark_msg_seen (gpointer data)
MessageList *ml = data;
guint32 flags;
- if (!ml->selected_uid)
+ if (!ml->cursor_uid)
return FALSE;
- flags = camel_folder_get_message_flags (ml->folder, ml->selected_uid,
+ flags = camel_folder_get_message_flags (ml->folder, ml->cursor_uid,
NULL);
- camel_folder_set_message_flags (ml->folder, ml->selected_uid,
+ camel_folder_set_message_flags (ml->folder, ml->cursor_uid,
CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN,
NULL);
return FALSE;
@@ -764,6 +766,9 @@ message_list_init (GtkObject *object)
gtk_signal_connect (GTK_OBJECT (message_list->etable), "cursor_change",
GTK_SIGNAL_FUNC (on_cursor_change_cmd), message_list);
+ gtk_signal_connect (GTK_OBJECT (message_list->etable), "row_selection",
+ GTK_SIGNAL_FUNC (on_row_selection), message_list);
+
gtk_widget_show (message_list->etable);
gtk_object_ref (GTK_OBJECT (message_list->table_model));
@@ -952,6 +957,7 @@ message_list_set_search (MessageList *message_list, const char *search)
}
e_table_model_changed (message_list->table_model);
+ message_list->rows_selected = 0;
select_msg (message_list, 0);
}
@@ -1011,8 +1017,6 @@ message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder)
gtk_object_ref (GTK_OBJECT (camel_folder));
folder_changed (camel_folder, 0, message_list);
-
- select_msg (message_list, 0);
}
GtkWidget *
@@ -1028,7 +1032,7 @@ on_cursor_change_idle (gpointer data)
{
MessageList *message_list = data;
- select_msg (message_list, message_list->selected_row);
+ select_msg (message_list, message_list->cursor_row);
message_list->idle_id = 0;
return FALSE;
@@ -1048,13 +1052,25 @@ on_cursor_change_cmd (ETable *table,
if (!info)
return;
- message_list->selected_row = row;
- message_list->selected_uid = info->uid;
+ message_list->cursor_row = row;
+ message_list->cursor_uid = info->uid;
if (!message_list->idle_id)
message_list->idle_id = g_idle_add_full (G_PRIORITY_LOW, on_cursor_change_idle, message_list, NULL);
}
+static void
+on_row_selection (ETable *table, int row, gboolean selected,
+ gpointer user_data)
+{
+ MessageList *message_list = user_data;
+
+ if (selected)
+ message_list->rows_selected++;
+ else
+ message_list->rows_selected--;
+}
+
/* FIXME: this is all a kludge. */
diff --git a/mail/message-list.h b/mail/message-list.h
index 033f0ca23a..d01021d14c 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -73,8 +73,8 @@ struct _MessageList {
int match_count;
GPtrArray *summary_search_cache; /* summary info cache for searches */
- int selected_row;
- const char *selected_uid;
+ int cursor_row, rows_selected;
+ const char *cursor_uid;
/* row-selection and seen-marking timers */
guint idle_id, seen_id;