Don't advance to the next undeleted message after "Delete"...
* folder-browser.c (on_key_press): Don't advance to the next undeleted message after "Delete"... * mail-callbacks.c (delete_msg): ...instead, do it here, whether the user used Delete, Alt+D, or the toolbar. (But only if they only deleted a single message.) * message-list.c (message_list_select): Don't clear the display on failure. (build_tree): Clear the display when the currently-selected message stops existing and we don't have an obvious message to select instead of it. (Eg, when deleting the last message with "hide deleted messages" set, or expunging while a deleted message is selected.) svn path=/trunk/; revision=9744
This commit is contained in:
@ -1,3 +1,20 @@
|
|||||||
|
2001-05-10 Dan Winship <danw@ximian.com>
|
||||||
|
|
||||||
|
* folder-browser.c (on_key_press): Don't advance to the next
|
||||||
|
undeleted message after "Delete"...
|
||||||
|
|
||||||
|
* mail-callbacks.c (delete_msg): ...instead, do it here, whether
|
||||||
|
the user used Delete, Alt+D, or the toolbar. (But only if they
|
||||||
|
only deleted a single message.)
|
||||||
|
|
||||||
|
* message-list.c (message_list_select): Don't clear the display on
|
||||||
|
failure.
|
||||||
|
(build_tree): Clear the display when the currently-selected
|
||||||
|
message stops existing and we don't have an obvious message to
|
||||||
|
select instead of it. (Eg, when deleting the last message with
|
||||||
|
"hide deleted messages" set, or expunging while a deleted message
|
||||||
|
is selected.)
|
||||||
|
|
||||||
2001-05-09 Dan Winship <danw@ximian.com>
|
2001-05-09 Dan Winship <danw@ximian.com>
|
||||||
|
|
||||||
* mail-offline-handler.c: New file, started by Ettore, finished by
|
* mail-offline-handler.c: New file, started by Ettore, finished by
|
||||||
|
@ -839,9 +839,6 @@ on_key_press (GtkWidget *widget, GdkEventKey *key, gpointer data)
|
|||||||
case GDK_Delete:
|
case GDK_Delete:
|
||||||
case GDK_KP_Delete:
|
case GDK_KP_Delete:
|
||||||
delete_msg (NULL, fb);
|
delete_msg (NULL, fb);
|
||||||
message_list_select (fb->message_list, row,
|
|
||||||
MESSAGE_LIST_SELECT_NEXT,
|
|
||||||
0, CAMEL_MESSAGE_DELETED);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case 'n':
|
case 'n':
|
||||||
|
@ -945,8 +945,8 @@ invert_selection (BonoboUIComponent *uih, void *user_data, const char *path)
|
|||||||
e_tree_invert_selection (ml->tree);
|
e_tree_invert_selection (ml->tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flag all selected messages */
|
/* flag all selected messages. Return number flagged */
|
||||||
static void
|
static int
|
||||||
flag_messages(FolderBrowser *fb, guint32 mask, guint32 set)
|
flag_messages(FolderBrowser *fb, guint32 mask, guint32 set)
|
||||||
{
|
{
|
||||||
MessageList *ml = fb->message_list;
|
MessageList *ml = fb->message_list;
|
||||||
@ -954,7 +954,7 @@ flag_messages(FolderBrowser *fb, guint32 mask, guint32 set)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (ml->folder == NULL)
|
if (ml->folder == NULL)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
/* could just use specific callback but i'm lazy */
|
/* could just use specific callback but i'm lazy */
|
||||||
uids = g_ptr_array_new ();
|
uids = g_ptr_array_new ();
|
||||||
@ -967,6 +967,8 @@ flag_messages(FolderBrowser *fb, guint32 mask, guint32 set)
|
|||||||
camel_folder_thaw (ml->folder);
|
camel_folder_thaw (ml->folder);
|
||||||
|
|
||||||
g_ptr_array_free (uids, TRUE);
|
g_ptr_array_free (uids, TRUE);
|
||||||
|
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1338,7 +1340,15 @@ save_msg (GtkWidget *widget, gpointer user_data)
|
|||||||
void
|
void
|
||||||
delete_msg (GtkWidget *button, gpointer user_data)
|
delete_msg (GtkWidget *button, gpointer user_data)
|
||||||
{
|
{
|
||||||
flag_messages(FOLDER_BROWSER(user_data), CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN);
|
FolderBrowser *fb = FOLDER_BROWSER (user_data);
|
||||||
|
int deleted, row;
|
||||||
|
|
||||||
|
deleted = flag_messages (fb, CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN,
|
||||||
|
CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_SEEN);
|
||||||
|
if (deleted == 1) {
|
||||||
|
row = e_tree_row_of_node (fb->message_list->tree, e_tree_get_cursor (fb->message_list->tree));
|
||||||
|
message_list_select (fb->message_list, row, MESSAGE_LIST_SELECT_NEXT, 0, CAMEL_MESSAGE_DELETED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -370,7 +370,7 @@ get_message_info (MessageList *message_list, ETreePath node)
|
|||||||
* %MESSAGE_LIST_SELECT_NEXT if it should find the next matching
|
* %MESSAGE_LIST_SELECT_NEXT if it should find the next matching
|
||||||
* message, or %MESSAGE_LIST_SELECT_PREVIOUS if it should find the
|
* message, or %MESSAGE_LIST_SELECT_PREVIOUS if it should find the
|
||||||
* previous. If no suitable row is found, the selection will be
|
* previous. If no suitable row is found, the selection will be
|
||||||
* unchanged but the message display will be cleared.
|
* unchanged.
|
||||||
**/
|
**/
|
||||||
void
|
void
|
||||||
message_list_select (MessageList *message_list, int base_row,
|
message_list_select (MessageList *message_list, int base_row,
|
||||||
@ -417,11 +417,6 @@ message_list_select (MessageList *message_list, int base_row,
|
|||||||
}
|
}
|
||||||
vrow += direction;
|
vrow += direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (message_list->cursor_uid);
|
|
||||||
message_list->cursor_uid = NULL;
|
|
||||||
|
|
||||||
gtk_signal_emit(GTK_OBJECT (message_list), message_list_signals [MESSAGE_SELECTED], NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -448,7 +443,7 @@ message_list_select_uid (MessageList *message_list, const char *uid)
|
|||||||
} else {
|
} else {
|
||||||
g_free (message_list->cursor_uid);
|
g_free (message_list->cursor_uid);
|
||||||
message_list->cursor_uid = NULL;
|
message_list->cursor_uid = NULL;
|
||||||
gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals [MESSAGE_SELECTED], uid);
|
gtk_signal_emit (GTK_OBJECT (message_list), message_list_signals [MESSAGE_SELECTED], NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1473,6 +1468,10 @@ build_tree (MessageList *ml, CamelFolderThread *thread, CamelFolderChangeInfo *c
|
|||||||
e_tree_set_cursor(ml->tree, node);
|
e_tree_set_cursor(ml->tree, node);
|
||||||
}
|
}
|
||||||
g_free(saveuid);
|
g_free(saveuid);
|
||||||
|
} else if (ml->cursor_uid && !g_hash_table_lookup(ml->uid_nodemap, ml->cursor_uid)) {
|
||||||
|
g_free(ml->cursor_uid);
|
||||||
|
ml->cursor_uid = NULL;
|
||||||
|
gtk_signal_emit((GtkObject *)ml, message_list_signals[MESSAGE_SELECTED], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TIMEIT
|
#ifdef TIMEIT
|
||||||
|
Reference in New Issue
Block a user