From 4fb6020185c8e54f1674ebefaa5b9481272655bf Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 14 Jun 2013 15:48:43 -0400 Subject: MessageList: Remove public 'hidejunk' and 'hidedeleted' flags. Add internal functions to compute these as needed based on a given CamelFolder. Removed functions: message_list_set_hidedeleted() --- mail/message-list.c | 137 ++++++++++++++++++++----------- mail/message-list.h | 8 -- modules/mail/e-mail-shell-view-actions.c | 22 +---- 3 files changed, 91 insertions(+), 76 deletions(-) diff --git a/mail/message-list.c b/mail/message-list.c index 77b82efcb8..8bd77907d9 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -126,8 +126,6 @@ struct _RegenData { gchar *search; gboolean threaded; - gboolean hide_deleted; - gboolean hide_junk; gboolean thread_subject; CamelFolderThread *tree; @@ -312,8 +310,6 @@ regen_data_new (MessageList *message_list, /* Capture MessageList state to use for this regen. */ regen_data->folder = message_list_ref_folder (message_list); regen_data->threaded = message_list->threaded; - regen_data->hide_deleted = message_list->hidedeleted; - regen_data->hide_junk = message_list->hidejunk; regen_data->thread_subject = message_list_get_thread_subject (message_list); @@ -3189,10 +3185,61 @@ folder_store_supports_vjunk_folder (CamelFolder *folder) g_return_val_if_fail (folder != NULL, FALSE); store = camel_folder_get_parent_store (folder); - if (!store) + if (store == NULL) + return FALSE; + + if (CAMEL_IS_VEE_FOLDER (folder)) + return TRUE; + + if (store->flags & CAMEL_STORE_VJUNK) + return TRUE; + + if (store->flags & CAMEL_STORE_REAL_JUNK_FOLDER) + return TRUE; + + return FALSE; +} + +static gboolean +message_list_get_hide_junk (MessageList *message_list, + CamelFolder *folder) +{ + if (folder == NULL) + return FALSE; + + if (!folder_store_supports_vjunk_folder (folder)) + return FALSE; + + if (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) + return FALSE; + + if (folder->folder_flags & CAMEL_FOLDER_IS_TRASH) + return FALSE; + + return TRUE; +} + +static gboolean +message_list_get_hide_deleted (MessageList *message_list, + CamelFolder *folder) +{ + CamelStore *store; + gboolean non_trash_folder; + + if (folder == NULL) + return FALSE; + + if (message_list_get_show_deleted (message_list)) return FALSE; - return (store->flags & (CAMEL_STORE_VJUNK | CAMEL_STORE_REAL_JUNK_FOLDER)) != 0 || CAMEL_IS_VEE_FOLDER (folder); + store = camel_folder_get_parent_store (folder); + g_return_val_if_fail (store != NULL, FALSE); + + non_trash_folder = + ((store->flags & CAMEL_STORE_VTRASH) == 0) || + ((folder->folder_flags & CAMEL_FOLDER_IS_TRASH) == 0); + + return non_trash_folder; } /* Check if the given node is selectable in the current message list, @@ -3207,6 +3254,8 @@ is_node_selectable (MessageList *ml, guint32 flags; gboolean flag_junk; gboolean flag_deleted; + gboolean hide_junk; + gboolean hide_deleted; gboolean store_has_vjunk; g_return_val_if_fail (info != NULL, FALSE); @@ -3222,6 +3271,9 @@ is_node_selectable (MessageList *ml, (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) != 0; is_trash_folder = folder->folder_flags & CAMEL_FOLDER_IS_TRASH; + hide_junk = message_list_get_hide_junk (ml, folder); + hide_deleted = message_list_get_hide_deleted (ml, folder); + g_object_unref (folder); /* check flags set on current message */ @@ -3233,8 +3285,8 @@ is_node_selectable (MessageList *ml, if (is_junk_folder) { /* messages in a junk folder are selectable only if * the message is marked as junk and if not deleted - * when hidedeleted is set */ - if (flag_junk && !(flag_deleted && ml->hidedeleted)) + * when hide_deleted is set */ + if (flag_junk && !(flag_deleted && hide_deleted)) return TRUE; } else if (is_trash_folder) { @@ -3243,10 +3295,10 @@ is_node_selectable (MessageList *ml, if (flag_deleted) return TRUE; } else { - /* in normal folders it depends on hidedeleted, - * hidejunk and the message flags */ - if (!(flag_junk && ml->hidejunk) - && !(flag_deleted && ml->hidedeleted)) + /* in normal folders it depends on hide_deleted, + * hide_junk and the message flags */ + if (!(flag_junk && hide_junk) + && !(flag_deleted && hide_deleted)) return TRUE; } @@ -3823,11 +3875,16 @@ message_list_folder_changed (CamelFolder *folder, { CamelFolderChangeInfo *altered_changes = NULL; gboolean need_list_regen = TRUE; + gboolean hide_junk; + gboolean hide_deleted; gint i; if (ml->priv->destroyed) return; + hide_junk = message_list_get_hide_junk (ml, folder); + hide_deleted = message_list_get_hide_deleted (ml, folder); + d (printf ("folder changed event, changes = %p\n", changes)); if (changes != NULL) { for (i = 0; i < changes->uid_removed->len; i++) @@ -3835,12 +3892,13 @@ message_list_folder_changed (CamelFolder *folder, ml->normalised_hash, changes->uid_removed->pdata[i]); - /* check if the hidden state has changed, if so modify accordingly, then regenerate */ - if (ml->hidejunk || ml->hidedeleted) + /* Check if the hidden state has changed. + * If so, modify accordingly and regenerate. */ + if (hide_junk || hide_deleted) altered_changes = mail_folder_hide_by_flag ( folder, ml, changes, - (ml->hidejunk ? CAMEL_MESSAGE_JUNK : 0) | - (ml->hidedeleted ? CAMEL_MESSAGE_DELETED : 0)); + (hide_junk ? CAMEL_MESSAGE_JUNK : 0) | + (hide_deleted ? CAMEL_MESSAGE_DELETED : 0)); else { altered_changes = camel_folder_change_info_new (); camel_folder_change_info_cat (altered_changes, changes); @@ -3897,8 +3955,6 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder) { ETreeModel *etm = message_list->model; - gboolean hide_deleted; - GSettings *settings; /* XXX Do we need a property lock to guard this? */ @@ -4012,17 +4068,6 @@ message_list_set_folder (MessageList *message_list, message_list); message_list->priv->folder_changed_handler_id = handler_id; - settings = g_settings_new ("org.gnome.evolution.mail"); - hide_deleted = !g_settings_get_boolean (settings, "show-deleted"); - g_object_unref (settings); - - message_list->hidedeleted = - hide_deleted && non_trash_folder; - message_list->hidejunk = - folder_store_supports_vjunk_folder (folder) && - !(folder->folder_flags & CAMEL_FOLDER_IS_JUNK) && - !(folder->folder_flags & CAMEL_FOLDER_IS_TRASH); - if (message_list->frozen == 0) mail_regen_list (message_list, message_list->search, FALSE); } @@ -4557,18 +4602,6 @@ message_list_set_threaded (MessageList *ml, } } -void -message_list_set_hidedeleted (MessageList *ml, - gboolean hidedeleted) -{ - if (ml->hidedeleted != hidedeleted) { - ml->hidedeleted = hidedeleted; - - if (ml->frozen == 0) - mail_regen_list (ml, ml->search, FALSE); - } -} - void message_list_set_search (MessageList *ml, const gchar *search) @@ -4872,6 +4905,8 @@ message_list_regen_thread (GSimpleAsyncResult *simple, ETreePath cursor; ETree *tree; GString *expr; + gboolean hide_deleted; + gboolean hide_junk; GError *local_error = NULL; message_list = MESSAGE_LIST (source_object); @@ -4880,6 +4915,11 @@ message_list_regen_thread (GSimpleAsyncResult *simple, if (g_cancellable_is_cancelled (cancellable)) return; + hide_junk = message_list_get_hide_junk ( + message_list, regen_data->folder); + hide_deleted = message_list_get_hide_deleted ( + message_list, regen_data->folder); + tree = E_TREE (message_list); cursor = e_tree_get_cursor (tree); if (cursor != NULL) @@ -4891,16 +4931,16 @@ message_list_regen_thread (GSimpleAsyncResult *simple, expr = g_string_new (""); - if (regen_data->hide_deleted && regen_data->hide_junk) { + if (hide_deleted && hide_junk) { g_string_append_printf ( expr, "(match-all (and %s %s))", EXCLUDE_DELETED_MESSAGES_EXPR, EXCLUDE_JUNK_MESSAGES_EXPR); - } else if (regen_data->hide_deleted) { + } else if (hide_deleted) { g_string_append_printf ( expr, "(match-all %s)", EXCLUDE_DELETED_MESSAGES_EXPR); - } else if (regen_data->hide_junk) { + } else if (hide_junk) { g_string_append_printf ( expr, "(match-all %s)", EXCLUDE_JUNK_MESSAGES_EXPR); @@ -4935,8 +4975,8 @@ message_list_regen_thread (GSimpleAsyncResult *simple, message_list, uids, regen_data->folder, regen_data->folder_changed, - !regen_data->hide_deleted, - !regen_data->hide_junk); + !hide_deleted, + !hide_junk); } g_string_free (expr, TRUE); @@ -5262,10 +5302,13 @@ mail_regen_list (MessageList *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, new_regen_data->folder); - if (message_list->threaded && message_list->hidedeleted) { + if (message_list->threaded && hide_deleted) { new_regen_data->tree = thread_tree; camel_folder_thread_messages_ref (thread_tree); } else { diff --git a/mail/message-list.h b/mail/message-list.h index 1b05639406..7e55c1aadc 100644 --- a/mail/message-list.h +++ b/mail/message-list.h @@ -121,12 +121,6 @@ struct _MessageList { guint expand_all :1; guint collapse_all :1; - /* do we automatically hide deleted messages? */ - guint hidedeleted : 1; - - /* do we automatically hide junk messages? */ - guint hidejunk : 1; - /* frozen count */ guint frozen : 16; @@ -214,8 +208,6 @@ void message_list_set_threaded_expand_all (MessageList *message_list); void message_list_set_threaded_collapse_all (MessageList *message_list); -void message_list_set_hidedeleted (MessageList *message_list, - gboolean hidedeleted); void message_list_set_search (MessageList *message_list, const gchar *search); void message_list_save_state (MessageList *message_list); diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c index 66effc1cab..c123696de4 100644 --- a/modules/mail/e-mail-shell-view-actions.c +++ b/modules/mail/e-mail-shell-view-actions.c @@ -1197,26 +1197,6 @@ action_mail_send_receive_send_all_cb (GtkAction *action, mail_send (session); } -static void -action_mail_show_deleted_cb (GtkToggleAction *action, - EMailShellView *mail_shell_view) -{ - EMailShellContent *mail_shell_content; - GtkWidget *message_list; - EMailReader *reader; - EMailView *mail_view; - gboolean active; - - mail_shell_content = mail_shell_view->priv->mail_shell_content; - mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); - - reader = E_MAIL_READER (mail_view); - message_list = e_mail_reader_get_message_list (reader); - - active = gtk_toggle_action_get_active (action); - message_list_set_hidedeleted (MESSAGE_LIST (message_list), !active); -} - static void action_mail_smart_backward_cb (GtkAction *action, EMailShellView *mail_shell_view) @@ -1900,7 +1880,7 @@ static GtkToggleActionEntry mail_toggle_entries[] = { N_("Show _Deleted Messages"), NULL, N_("Show deleted messages with a line through them"), - G_CALLBACK (action_mail_show_deleted_cb), + NULL, /* Handled by property bindings */ FALSE }, { "mail-threads-group-by", -- cgit v1.2.3