MessageList: Move more RegenData initialization into regen_data_new().
This commit is contained in:
@ -174,6 +174,9 @@ static void message_list_selectable_init
|
||||
(ESelectableInterface *interface);
|
||||
static void message_list_tree_model_init
|
||||
(ETreeModelInterface *interface);
|
||||
static gboolean message_list_get_hide_deleted
|
||||
(MessageList *message_list,
|
||||
CamelFolder *folder);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (
|
||||
MessageList,
|
||||
@ -340,6 +343,7 @@ regen_data_new (MessageList *message_list,
|
||||
RegenData *regen_data;
|
||||
EActivity *activity;
|
||||
EMailSession *session;
|
||||
gboolean searching;
|
||||
|
||||
activity = e_activity_new ();
|
||||
e_activity_set_cancellable (activity, cancellable);
|
||||
@ -352,12 +356,60 @@ regen_data_new (MessageList *message_list,
|
||||
regen_data->last_row = -1;
|
||||
|
||||
/* Capture MessageList state to use for this regen. */
|
||||
regen_data->folder = message_list_ref_folder (message_list);
|
||||
|
||||
regen_data->folder =
|
||||
message_list_ref_folder (message_list);
|
||||
regen_data->group_by_threads =
|
||||
message_list_get_group_by_threads (message_list);
|
||||
regen_data->thread_subject =
|
||||
message_list_get_thread_subject (message_list);
|
||||
|
||||
if (message_list->thread_tree != NULL) {
|
||||
CamelFolderThread *thread_tree;
|
||||
gboolean hide_deleted;
|
||||
|
||||
thread_tree = message_list->thread_tree;
|
||||
hide_deleted = message_list_get_hide_deleted (
|
||||
message_list, regen_data->folder);
|
||||
|
||||
if (regen_data->group_by_threads && hide_deleted) {
|
||||
regen_data->tree = thread_tree;
|
||||
camel_folder_thread_messages_ref (thread_tree);
|
||||
} else {
|
||||
camel_folder_thread_messages_unref (thread_tree);
|
||||
message_list->thread_tree = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
searching = (g_strcmp0 (message_list->search, " ") != 0);
|
||||
|
||||
if (e_tree_row_count (E_TREE (message_list)) <= 0) {
|
||||
if (gtk_widget_get_visible (GTK_WIDGET (message_list))) {
|
||||
gchar *txt;
|
||||
|
||||
txt = g_strdup_printf (
|
||||
"%s...", _("Generating message list"));
|
||||
e_tree_set_info_message (E_TREE (message_list), txt);
|
||||
g_free (txt);
|
||||
}
|
||||
|
||||
} else if (regen_data->group_by_threads &&
|
||||
!message_list->just_set_folder &&
|
||||
!searching) {
|
||||
|
||||
if (message_list->priv->any_row_changed) {
|
||||
/* Something changed. If it was an expand
|
||||
* state change, then save the expand state. */
|
||||
message_list_save_state (message_list);
|
||||
} else {
|
||||
/* Remember the expand state and restore it
|
||||
* after regen. */
|
||||
regen_data->expand_state =
|
||||
e_tree_save_expanded_state_xml (
|
||||
E_TREE (message_list));
|
||||
}
|
||||
}
|
||||
|
||||
g_mutex_init (®en_data->select_lock);
|
||||
|
||||
session = message_list_get_session (message_list);
|
||||
@ -5507,7 +5559,6 @@ mail_regen_list (MessageList *message_list,
|
||||
GCancellable *cancellable;
|
||||
RegenData *new_regen_data;
|
||||
RegenData *old_regen_data;
|
||||
gboolean searching;
|
||||
|
||||
/* Report empty search as NULL, not as one/two-space string. */
|
||||
if (search && (strcmp (search, " ") == 0 || strcmp (search, " ") == 0))
|
||||
@ -5526,49 +5577,6 @@ mail_regen_list (MessageList *message_list,
|
||||
new_regen_data->search = g_strdup (search);
|
||||
new_regen_data->folder_changed = folder_changed;
|
||||
|
||||
if (message_list->thread_tree != NULL) {
|
||||
CamelFolderThread *thread_tree;
|
||||
gboolean hide_deleted;
|
||||
|
||||
thread_tree = message_list->thread_tree;
|
||||
hide_deleted = message_list_get_hide_deleted (
|
||||
message_list, new_regen_data->folder);
|
||||
|
||||
if (new_regen_data->group_by_threads && hide_deleted) {
|
||||
new_regen_data->tree = thread_tree;
|
||||
camel_folder_thread_messages_ref (thread_tree);
|
||||
} else {
|
||||
camel_folder_thread_messages_unref (thread_tree);
|
||||
message_list->thread_tree = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
searching = (g_strcmp0 (message_list->search, " ") != 0);
|
||||
|
||||
if (e_tree_row_count (E_TREE (message_list)) <= 0) {
|
||||
if (gtk_widget_get_visible (GTK_WIDGET (message_list))) {
|
||||
gchar *txt;
|
||||
|
||||
txt = g_strdup_printf (
|
||||
"%s...", _("Generating message list"));
|
||||
e_tree_set_info_message (E_TREE (message_list), txt);
|
||||
g_free (txt);
|
||||
}
|
||||
} else if (message_list->priv->any_row_changed &&
|
||||
new_regen_data->group_by_threads &&
|
||||
!message_list->just_set_folder &&
|
||||
!searching) {
|
||||
/* Something changed. If it was an expand
|
||||
* state change, then save the expand state. */
|
||||
message_list_save_state (message_list);
|
||||
} else if (new_regen_data->group_by_threads &&
|
||||
!message_list->just_set_folder &&
|
||||
!searching) {
|
||||
/* Remember the expand state and restore it after regen. */
|
||||
new_regen_data->expand_state =
|
||||
e_tree_save_expanded_state_xml (E_TREE (message_list));
|
||||
}
|
||||
|
||||
/* We generate the message list content in a worker thread, and
|
||||
* then supply our own GAsyncReadyCallback to redraw the widget. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user