[evolution] Bug 249749 - Threaded Message List Expands When Using "Find Now"
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 249749 - Threaded Message List Expands When Using "Find Now"
- Date: Thu, 5 Feb 2015 10:52:46 +0000 (UTC)
commit 40723812bcc2e67bc2ae7b8a2f65b08df9f3eaec
Author: Milan Crha <mcrha redhat com>
Date: Thu Feb 5 11:53:37 2015 +0100
Bug 249749 - Threaded Message List Expands When Using "Find Now"
mail/message-list.c | 51 ++++++++++++++++++++++++++++++---------------------
1 files changed, 30 insertions(+), 21 deletions(-)
---
diff --git a/mail/message-list.c b/mail/message-list.c
index 2e60244..bd11477 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -2249,6 +2249,14 @@ message_list_create_extras (void)
return extras;
}
+static gboolean
+message_list_is_searching (MessageList *message_list)
+{
+ g_return_val_if_fail (IS_MESSAGE_LIST (message_list), FALSE);
+
+ return message_list->search && *message_list->search;
+}
+
static void
save_tree_state (MessageList *message_list,
CamelFolder *folder)
@@ -2259,7 +2267,7 @@ save_tree_state (MessageList *message_list,
if (folder == NULL)
return;
- if (message_list->search != NULL && *message_list->search != '\0')
+ if (message_list_is_searching (message_list))
return;
adapter = e_tree_get_table_adapter (E_TREE (message_list));
@@ -2286,8 +2294,7 @@ load_tree_state (MessageList *message_list,
if (expand_state != NULL) {
e_tree_table_adapter_load_expanded_state_xml (
adapter, expand_state);
- } else if (!message_list->search || !*message_list->search) {
- /* only when not searching */
+ } else {
gchar *filename;
filename = mail_config_folder_to_cachename (
@@ -5668,14 +5675,6 @@ exit:
g_object_unref (folder);
}
-static gboolean
-message_list_is_searching (MessageList *message_list)
-{
- g_return_val_if_fail (IS_MESSAGE_LIST (message_list), FALSE);
-
- return message_list->search && *message_list->search;
-}
-
static void
message_list_regen_done_cb (GObject *source_object,
GAsyncResult *result,
@@ -5687,7 +5686,7 @@ message_list_regen_done_cb (GObject *source_object,
EActivity *activity;
ETree *tree;
ETreeTableAdapter *adapter;
- gboolean searching;
+ gboolean was_searching, is_searching;
gint row_count;
GError *local_error = NULL;
@@ -5732,10 +5731,12 @@ message_list_regen_done_cb (GObject *source_object,
g_signal_handlers_block_by_func (
adapter, ml_tree_sorting_changed, message_list);
+ was_searching = message_list_is_searching (message_list);
+
g_free (message_list->search);
message_list->search = g_strdup (regen_data->search);
- searching = message_list_is_searching (message_list);
+ is_searching = message_list_is_searching (message_list);
if (regen_data->group_by_threads) {
ETableItem *table_item = e_tree_get_item (E_TREE (message_list));
@@ -5757,10 +5758,10 @@ message_list_regen_done_cb (GObject *source_object,
}
}
- if (forcing_expand_state || searching) {
+ if (forcing_expand_state) {
gint state;
- if (message_list->expand_all || searching)
+ if (message_list->expand_all)
state = 1; /* force expand */
else
state = -1; /* force collapse */
@@ -5784,15 +5785,20 @@ message_list_regen_done_cb (GObject *source_object,
message_list_set_thread_tree (
message_list, regen_data->thread_tree);
- if (forcing_expand_state || searching) {
- if (message_list->priv->folder != NULL &&
- tree != NULL && !searching)
- save_tree_state (
- message_list,
- regen_data->folder);
+ if (forcing_expand_state) {
+ if (message_list->priv->folder != NULL && tree != NULL)
+ save_tree_state (message_list, regen_data->folder);
+
/* Disable forced expand/collapse state. */
e_tree_table_adapter_force_expanded_state (adapter, 0);
+ } else if (was_searching && !is_searching) {
+ /* Load expand state from disk */
+ load_tree_state (
+ message_list,
+ regen_data->folder,
+ NULL);
} else {
+ /* Load expand state from the previous state or disk */
load_tree_state (
message_list,
regen_data->folder,
@@ -5993,6 +5999,9 @@ message_list_regen_idle_cb (gpointer user_data)
e_tree_table_adapter_save_expanded_state_xml (
adapter);
}
+ } else {
+ /* Remember the expand state and restore it after regen. */
+ regen_data->expand_state = e_tree_table_adapter_save_expanded_state_xml (adapter);
}
message_list->priv->regen_idle_id = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]