aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog11
-rw-r--r--mail/folder-browser.c4
-rw-r--r--mail/message-list.c20
-rw-r--r--mail/message-list.h4
4 files changed, 33 insertions, 6 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 8ec376f443..1fd39504a2 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,14 @@
+2001-08-04 Jason Leach <jleach@ximian.com>
+
+ * message-list.c (message_list_select): Add a @wraparound
+ argument, so the 'n' and 'p' keypresses (or anything else that
+ wants to) can wrap around to find the next unread.
+
+ * folder-browser.c (on_key_press): Tell it to wrap around here.
+
+ * mail-callbacks.c (delete_msg): Don't wrap around here (or the
+ other callbacks in this file).
+
2001-08-03 Jason Leach <jleach@ximian.com>
* mail-folder-cache.c (update_idle): Updates for EvolutionStorage
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
index ff398c4f87..05acbb3268 100644
--- a/mail/folder-browser.c
+++ b/mail/folder-browser.c
@@ -1536,14 +1536,14 @@ on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer data)
case 'N':
message_list_select (fb->message_list, row,
MESSAGE_LIST_SELECT_NEXT,
- 0, CAMEL_MESSAGE_SEEN);
+ 0, CAMEL_MESSAGE_SEEN, TRUE);
return TRUE;
case 'p':
case 'P':
message_list_select (fb->message_list, row,
MESSAGE_LIST_SELECT_PREVIOUS,
- 0, CAMEL_MESSAGE_SEEN);
+ 0, CAMEL_MESSAGE_SEEN, TRUE);
return TRUE;
case GDK_Menu:
diff --git a/mail/message-list.c b/mail/message-list.c
index e1abf688d7..8c9accb3aa 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -365,9 +365,12 @@ get_message_info (MessageList *message_list, ETreePath node)
* unchanged.
**/
void
-message_list_select (MessageList *message_list, int base_row,
+message_list_select (MessageList *message_list,
+ int base_row,
MessageListSelectDirection direction,
- guint32 flags, guint32 mask)
+ guint32 flags,
+ guint32 mask,
+ gboolean wraparound)
{
CamelMessageInfo *info;
int vrow, last;
@@ -405,8 +408,10 @@ message_list_select (MessageList *message_list, int base_row,
/* We don't know whether to use < or > due to "direction" */
while (vrow != last) {
- ETreePath node = e_tree_node_at_row(et, vrow);
+ ETreePath node = e_tree_node_at_row (et, vrow);
+
info = get_message_info (message_list, node);
+
if (info && (info->flags & mask) == flags) {
e_tree_set_cursor (et, node);
@@ -416,6 +421,15 @@ message_list_select (MessageList *message_list, int base_row,
}
vrow += direction;
}
+
+ if (wraparound) {
+ if (direction > 0)
+ message_list_select (message_list, 0,
+ direction, flags, mask, FALSE);
+ else
+ message_list_select (message_list, e_tree_row_count (et) - 1,
+ direction, flags, mask, FALSE);
+ }
}
diff --git a/mail/message-list.h b/mail/message-list.h
index 6482a09210..26a6512d0d 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -113,7 +113,9 @@ void message_list_foreach (MessageList *message_list,
void message_list_select (MessageList *message_list,
int base_row,
MessageListSelectDirection direction,
- guint32 flags, guint32 mask);
+ guint32 flags,
+ guint32 mask,
+ gboolean wraparound);
void message_list_select_uid (MessageList *message_list,
const char *uid);