[evolution/wip/webkit2] Bug 761453 - Add 'Message Thread' filter option to Show combo
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit2] Bug 761453 - Add 'Message Thread' filter option to Show combo
- Date: Thu, 3 Mar 2016 15:26:08 +0000 (UTC)
commit 9ca9e1ce7ad78182542cbb69d0f1c3095ec670c1
Author: Milan Crha <mcrha redhat com>
Date: Fri Feb 12 12:11:10 2016 +0100
Bug 761453 - Add 'Message Thread' filter option to Show combo
modules/mail/e-mail-shell-view-actions.c | 10 ++++-
modules/mail/e-mail-shell-view-actions.h | 2 +
modules/mail/e-mail-shell-view-private.c | 3 +
modules/mail/e-mail-shell-view-private.h | 16 ++++---
modules/mail/e-mail-shell-view.c | 72 ++++++++++++++++++++++++++++++
5 files changed, 96 insertions(+), 7 deletions(-)
---
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 243e5a3..1247ca1 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -2113,7 +2113,15 @@ static GtkRadioActionEntry mail_filter_entries[] = {
N_("Unread Messages"),
NULL,
NULL, /* XXX Add a tooltip! */
- MAIL_FILTER_UNREAD_MESSAGES }
+ MAIL_FILTER_UNREAD_MESSAGES },
+
+ { "mail-filter-message-thread",
+ NULL,
+ N_("Message Thread"),
+ NULL,
+ NULL, /* XXX Add a tooltip! */
+ MAIL_FILTER_MESSAGE_THREAD }
+
};
static GtkRadioActionEntry mail_search_entries[] = {
diff --git a/modules/mail/e-mail-shell-view-actions.h b/modules/mail/e-mail-shell-view-actions.h
index ab61498..866cc98 100644
--- a/modules/mail/e-mail-shell-view-actions.h
+++ b/modules/mail/e-mail-shell-view-actions.h
@@ -228,6 +228,8 @@
E_SHELL_WINDOW_ACTION ((window), "mail-filter-important-messages")
#define E_SHELL_WINDOW_ACTION_MAIL_FILTER_LAST_5_DAYS_MESSAGES(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-filter-last-5-days-messages")
+#define E_SHELL_WINDOW_ACTION_MAIL_FILTER_MESSAGE_THREAD(window) \
+ E_SHELL_WINDOW_ACTION ((window), "mail-filter-message-thread")
#define E_SHELL_WINDOW_ACTION_MAIL_FILTER_MESSAGES_NOT_JUNK(window) \
E_SHELL_WINDOW_ACTION ((window), "mail-filter-messages-not-junk")
#define E_SHELL_WINDOW_ACTION_MAIL_FILTER_MESSAGES_WITH_ATTACHMENTS(window) \
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index 690ad41..b928abf 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -870,6 +870,9 @@ e_mail_shell_view_private_dispose (EMailShellView *mail_shell_view)
g_object_unref (priv->search_account_cancel);
priv->search_account_cancel = NULL;
}
+
+ g_slist_free_full (priv->selected_uids, (GDestroyNotify) camel_pstring_free);
+ priv->selected_uids = NULL;
}
void
diff --git a/modules/mail/e-mail-shell-view-private.h b/modules/mail/e-mail-shell-view-private.h
index 39ae23d..f89bb62 100644
--- a/modules/mail/e-mail-shell-view-private.h
+++ b/modules/mail/e-mail-shell-view-private.h
@@ -78,12 +78,13 @@ enum {
MAIL_FILTER_ALL_MESSAGES = -20,
MAIL_FILTER_UNREAD_MESSAGES = -19,
MAIL_FILTER_READ_MESSAGES = -18,
- MAIL_FILTER_LAST_5_DAYS_MESSAGES = -17,
- MAIL_FILTER_MESSAGES_WITH_ATTACHMENTS = -16,
- MAIL_FILTER_MESSAGES_WITH_NOTES = -15,
- MAIL_FILTER_IMPORTANT_MESSAGES = -14,
- MAIL_FILTER_MESSAGES_NOT_JUNK = -13,
- MAIL_FILTER_NO_LABEL = -12
+ MAIL_FILTER_MESSAGE_THREAD = -17,
+ MAIL_FILTER_LAST_5_DAYS_MESSAGES = -16,
+ MAIL_FILTER_MESSAGES_WITH_ATTACHMENTS = -15,
+ MAIL_FILTER_MESSAGES_WITH_NOTES = -14,
+ MAIL_FILTER_IMPORTANT_MESSAGES = -13,
+ MAIL_FILTER_MESSAGES_NOT_JUNK = -12,
+ MAIL_FILTER_NO_LABEL = -11
/* Labels go here */
};
@@ -141,6 +142,9 @@ struct _EMailShellViewPrivate {
guint web_extension_watch_name_id;
gboolean vfolder_allow_expunge;
+
+ /* Selected UIDs for MAIL_FILTER_MESSAGE_THREAD filter */
+ GSList *selected_uids;
};
void e_mail_shell_view_private_init
diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c
index 1deb5b0..e81a327 100644
--- a/modules/mail/e-mail-shell-view.c
+++ b/modules/mail/e-mail-shell-view.c
@@ -346,6 +346,65 @@ mail_shell_view_toggled (EShellView *shell_view)
toggled (shell_view);
}
+static gchar *
+mail_shell_view_construct_filter_message_thread (EMailShellView *mail_shell_view,
+ const gchar *with_query)
+{
+ EMailShellViewPrivate *priv;
+ GString *query;
+ GSList *link;
+
+ g_return_val_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view), NULL);
+
+ priv = E_MAIL_SHELL_VIEW_GET_PRIVATE (mail_shell_view);
+
+ if (!priv->selected_uids) {
+ EShellContent *shell_content;
+ EMailView *mail_view;
+ GPtrArray *uids;
+
+ shell_content = e_shell_view_get_shell_content (E_SHELL_VIEW (mail_shell_view));
+ mail_view = e_mail_shell_content_get_mail_view (E_MAIL_SHELL_CONTENT (shell_content));
+ uids = e_mail_reader_get_selected_uids (E_MAIL_READER (mail_view));
+
+ if (uids) {
+ gint ii;
+
+ for (ii = 0; ii < uids->len; ii++) {
+ priv->selected_uids = g_slist_prepend (priv->selected_uids, (gpointer)
camel_pstring_strdup (uids->pdata[ii]));
+ }
+
+ g_ptr_array_unref (uids);
+ }
+
+ if (!priv->selected_uids)
+ priv->selected_uids = g_slist_prepend (priv->selected_uids, (gpointer)
camel_pstring_strdup (""));
+ }
+
+ query = g_string_new ("");
+
+ if (with_query)
+ g_string_append_printf (query, "(and %s ", with_query);
+
+ g_string_append (query, "(match-threads \"all\" (match-all (uid");
+
+ for (link = priv->selected_uids; link; link = g_slist_next (link)) {
+ const gchar *uid = link->data;
+
+ g_string_append_c (query, ' ');
+ g_string_append_c (query, '\"');
+ g_string_append (query, uid);
+ g_string_append_c (query, '\"');
+ }
+
+ g_string_append (query, ")))");
+
+ if (with_query)
+ g_string_append (query, ")");
+
+ return g_string_free (query, FALSE);
+}
+
static void
mail_shell_view_execute_search (EShellView *shell_view)
{
@@ -479,6 +538,12 @@ filter:
combo_box = e_shell_searchbar_get_filter_combo_box (searchbar);
value = e_action_combo_box_get_current_value (combo_box);
+
+ if (value != MAIL_FILTER_MESSAGE_THREAD) {
+ g_slist_free_full (priv->selected_uids, (GDestroyNotify) camel_pstring_free);
+ priv->selected_uids = NULL;
+ }
+
switch (value) {
case MAIL_FILTER_ALL_MESSAGES:
break;
@@ -576,6 +641,13 @@ filter:
query = temp;
break;
+ case MAIL_FILTER_MESSAGE_THREAD:
+ temp = mail_shell_view_construct_filter_message_thread (
+ E_MAIL_SHELL_VIEW (shell_view), query);
+ g_free (query);
+ query = temp;
+ break;
+
default:
/* The action value also serves as a path for
* the label list store. That's why we number
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]