aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2008-08-15 04:19:12 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-08-15 04:19:12 +0800
commit7ade227e6409c98a4010992450e111cf7bb10520 (patch)
treebdd716d894ae2f3b1affaa6bb68950a89441db13 /mail
parentcca29c3424aede2bb3c9ec5a6d255ce490d3511b (diff)
downloadgsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar.gz
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar.bz2
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar.lz
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar.xz
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.tar.zst
gsoc2013-evolution-7ade227e6409c98a4010992450e111cf7bb10520.zip
Merge revisions 35951:35992 from trunk.
svn path=/branches/kill-bonobo/; revision=35994
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog66
-rw-r--r--mail/em-config.c1
-rw-r--r--mail/em-event.c1
-rw-r--r--mail/em-folder-browser.c25
-rw-r--r--mail/em-folder-utils.c1
-rw-r--r--mail/em-format-hook.c2
-rw-r--r--mail/em-format-html-display.c15
-rw-r--r--mail/em-format-html.c1
-rw-r--r--mail/em-junk-hook.c1
-rw-r--r--mail/em-menu.c1
-rw-r--r--mail/em-network-prefs.c1
-rw-r--r--mail/em-popup.c1
-rw-r--r--mail/mail-mt.c7
-rw-r--r--mail/mail-send-recv.c17
-rw-r--r--mail/message-list.c106
-rw-r--r--mail/message-tag-followup.c17
-rw-r--r--mail/searchtypes.xml15
17 files changed, 201 insertions, 77 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 84f7066075..df3c3b1f60 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,69 @@
+2008-08-13 Moritz Mertinkat <moritz@mertinkat.net>
+
+ * em-format-html.c: Added meaningful user agent for HTTP requests
+ used to load remote images. The original part (CamelHttpStream/1.0)
+ has been kept for backward compatibility.
+
+2008-08-12 Milan Crha <mcrha@redhat.com>
+
+ ** Fix for bug #519292
+
+ * message-list.c: (read_boolean_with_default),
+ (message_list_construct): Read 'thread_expand' and 'thread_latest'
+ safely with TRUE as default if key doesn't exist.
+
+2008-08-11 Matthew Barnes <mbarnes@redhat.com>
+
+ ** Fixes part of bug #546892
+
+ * em-folder-browser.c:
+ * em-format-html-display.c:
+ * mail-send-recv.c:
+ * message-tag-followup.c:
+ Prefer gtk_image_new_from_icon_name() over e_icon_factory_get_image().
+
+ * mail-send-recv.c:
+ * message-tag-followup.c:
+ Prefer gtk_window_set_icon_name() over gtk_window_set_icon_list().
+
+ * mail-mt.c:
+ e_activity_handler_cancelable_operation_started() no longer takes a
+ GdkPixbuf. It was ignoring the pixbuf anyway ever since we added a
+ spinner icon.
+
+2008-08-11 Milan Crha <mcrha@redhat.com>
+
+ ** Fix for bug #519292
+
+ * message-list.c: (load_tree_expand_all): Drop function.
+ * message-list.c: (regen_list_done): Rather use desired expanded state
+ value when creating the tree instead of the default model's value for
+ this to have 'expand/collapse all' commands work better and quicker.
+
+2008-08-11 Milan Crha <mcrha@redhat.com>
+
+ ** Fix for bug #352695
+
+ * message-list.c: (struct _MessageListPrivate), (save_tree_state),
+ (load_tree_state), (on_model_row_changed), (message_list_init),
+ (message_list_construct), (struct _regen_list_msg), (regen_list_done),
+ (regen_list_free), (mail_regen_list): Be able to recognize whether
+ there has been any change on any row in a list and save expanded
+ state only in case there was any change. Also use in-memory storing
+ of the expanded state in case we do not want to rewrite full view
+ It's for searches only, and it's not stored between sessions.
+
+2008-08-11 Srinivasa Ragavan <sragavan@novell.com>
+
+ ** Part fix for bug #529743
+
+ * searchtypes.xml: Support Subject or Recipients contain search.
+
+2008-08-11 Srinivasa Ragavan <sragavan@novell.com>
+
+ * mail/message-list.c: Don't use uninitialized exception. It leads to
+ freeing uninitialized memory.
+
2008-08-07 Paul Bolle <pebolle@tiscali.nl>
** Fix for bug #546788
diff --git a/mail/em-config.c b/mail/em-config.c
index f350074701..b4e9e3c981 100644
--- a/mail/em-config.c
+++ b/mail/em-config.c
@@ -33,7 +33,6 @@
#include "em-config.h"
#include "libedataserver/e-msgport.h"
-#include <e-util/e-icon-factory.h>
#include "em-utils.h"
#include "em-composer-utils.h"
diff --git a/mail/em-event.c b/mail/em-event.c
index 2ce8d8afc0..950f2488fb 100644
--- a/mail/em-event.c
+++ b/mail/em-event.c
@@ -32,7 +32,6 @@
#include "em-event.h"
#include "composer/e-msg-composer.h"
#include "libedataserver/e-msgport.h"
-#include <e-util/e-icon-factory.h>
#include <camel/camel-store.h>
#include <camel/camel-folder.h>
diff --git a/mail/em-folder-browser.c b/mail/em-folder-browser.c
index 5871cfc4cc..4b25b560f7 100644
--- a/mail/em-folder-browser.c
+++ b/mail/em-folder-browser.c
@@ -293,10 +293,19 @@ generate_viewoption_menu (GtkWidget *emfv)
for (i = 0; emfb_view_items[i].search.id != -1; ++i) {
if (emfb_view_items[i].search.text) {
char *str;
+
str = e_str_without_underscores (_(emfb_view_items[i].search.text));
menu_item = gtk_image_menu_item_new_with_label (str);
- if (emfb_view_items[i].image)
- gtk_image_menu_item_set_image ((GtkImageMenuItem *)menu_item, e_icon_factory_get_image (emfb_view_items[i].image, E_ICON_SIZE_MENU));
+ if (emfb_view_items[i].image) {
+ GtkWidget *image;
+
+ image = gtk_image_new_from_icon_name (
+ emfb_view_items[i].image,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (
+ GTK_IMAGE_MENU_ITEM (menu_item),
+ image);
+ }
g_free (str);
} else {
menu_item = gtk_menu_item_new ();
@@ -351,8 +360,16 @@ generate_viewoption_menu (GtkWidget *emfv)
char *str;
str = e_str_without_underscores (_(temp_view_items[i].search.text));
menu_item = gtk_image_menu_item_new_with_label (str);
- if (temp_view_items[i].image)
- gtk_image_menu_item_set_image ((GtkImageMenuItem *)menu_item, e_icon_factory_get_image (temp_view_items[i].image, E_ICON_SIZE_MENU));
+ if (temp_view_items[i].image) {
+ GtkWidget *image;
+
+ image = gtk_image_new_from_icon_name (
+ temp_view_items[i].image,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (
+ GTK_IMAGE_MENU_ITEM (menu_item),
+ image);
+ }
g_free (str);
} else {
menu_item = gtk_menu_item_new ();
diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c
index 551d14bcec..b1ec99f25e 100644
--- a/mail/em-folder-utils.c
+++ b/mail/em-folder-utils.c
@@ -51,7 +51,6 @@
#include "e-util/e-mktemp.h"
#include "e-util/e-request.h"
-#include "e-util/e-icon-factory.h"
#include "e-util/e-error.h"
diff --git a/mail/em-format-hook.c b/mail/em-format-hook.c
index d548418493..58d0563887 100644
--- a/mail/em-format-hook.c
+++ b/mail/em-format-hook.c
@@ -31,8 +31,6 @@
#include "em-format-hook.h"
-#include <e-util/e-icon-factory.h>
-
#include <glib/gi18n.h>
diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c
index 36b7e74cf6..199ff19b67 100644
--- a/mail/em-format-html-display.c
+++ b/mail/em-format-html-display.c
@@ -1181,15 +1181,16 @@ efhd_xpkcs7mime_button(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObje
{
GtkWidget *icon, *button;
struct _smime_pobject *po = (struct _smime_pobject *)pobject;
- const char *name;
+ const char *icon_name;
/* FIXME: need to have it based on encryption and signing too */
if (po->valid->sign.status != 0)
- name = smime_sign_table[po->valid->sign.status].icon;
+ icon_name = smime_sign_table[po->valid->sign.status].icon;
else
- name = smime_encrypt_table[po->valid->encrypt.status].icon;
+ icon_name = smime_encrypt_table[po->valid->encrypt.status].icon;
- icon = e_icon_factory_get_image (name, E_ICON_SIZE_LARGE_TOOLBAR);
+ icon = gtk_image_new_from_icon_name (
+ icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR);
gtk_widget_show(icon);
button = gtk_button_new();
@@ -2371,7 +2372,8 @@ efhd_attachment_optional(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPOb
button = gtk_button_new();
hbox = gtk_hbox_new (FALSE, 0);
- img = e_icon_factory_get_image ("stock_show-all", E_ICON_SIZE_BUTTON);
+ img = gtk_image_new_from_icon_name (
+ "stock_show-all", GTK_ICON_SIZE_BUTTON);
label = gtk_label_new_with_mnemonic(_("View _Unformatted"));
g_object_set_data (G_OBJECT (button), "text-label", (gpointer)label);
gtk_box_pack_start (GTK_BOX (hbox), img, TRUE, TRUE, 2);
@@ -2390,7 +2392,8 @@ efhd_attachment_optional(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPOb
button = gtk_button_new();
hbox = gtk_hbox_new (FALSE, 0);
- img = e_icon_factory_get_image ("stock_open", E_ICON_SIZE_BUTTON);
+ img = gtk_image_new_from_stock (
+ GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON);
label = gtk_label_new_with_mnemonic(_("O_pen With"));
gtk_box_pack_start (GTK_BOX (hbox), img, TRUE, TRUE, 2);
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 2);
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index bb2d176b6e..99c670e5ae 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -497,6 +497,7 @@ static void emfh_gethttp(struct _EMFormatHTMLJob *job, int cancelled)
}
instream = camel_http_stream_new(CAMEL_HTTP_METHOD_GET, ((EMFormat *)job->format)->session, url);
+ camel_http_stream_set_user_agent((CamelHttpStream *)instream, "CamelHttpStream/1.0 Evolution/" VERSION);
proxy = em_utils_get_proxy_uri();
camel_http_stream_set_proxy((CamelHttpStream *)instream, proxy);
g_free(proxy);
diff --git a/mail/em-junk-hook.c b/mail/em-junk-hook.c
index d2bf9983f9..0b63334d41 100644
--- a/mail/em-junk-hook.c
+++ b/mail/em-junk-hook.c
@@ -29,7 +29,6 @@
#include <glib.h>
#include "em-junk-hook.h"
#include "mail-session.h"
-#include <e-util/e-icon-factory.h>
#include "e-util/e-error.h"
#include "em-utils.h"
#include <camel/camel-junk-plugin.h>
diff --git a/mail/em-menu.c b/mail/em-menu.c
index a6a60af235..e8021e1bea 100644
--- a/mail/em-menu.c
+++ b/mail/em-menu.c
@@ -33,7 +33,6 @@
#include "em-menu.h"
#include "libedataserver/e-msgport.h"
-#include <e-util/e-icon-factory.h>
#include "em-utils.h"
#include "em-composer-utils.h"
diff --git a/mail/em-network-prefs.c b/mail/em-network-prefs.c
index 31b703864a..2f3f85d791 100644
--- a/mail/em-network-prefs.c
+++ b/mail/em-network-prefs.c
@@ -42,7 +42,6 @@
#include "e-util/e-error.h"
#include "e-util/e-util-private.h"
-#include "e-util/e-icon-factory.h"
#include "mail-config.h"
#include "em-config.h"
diff --git a/mail/em-popup.c b/mail/em-popup.c
index 76e59daad3..10fae903be 100644
--- a/mail/em-popup.c
+++ b/mail/em-popup.c
@@ -35,7 +35,6 @@
#include "em-popup.h"
#include "libedataserver/e-msgport.h"
-#include <e-util/e-icon-factory.h>
#include "em-utils.h"
#include "em-composer-utils.h"
diff --git a/mail/mail-mt.c b/mail/mail-mt.c
index d147132689..9657da5f13 100644
--- a/mail/mail-mt.c
+++ b/mail/mail-mt.c
@@ -71,8 +71,6 @@ struct _MailMsgPrivate {
gboolean cancelable;
};
-static GdkPixbuf *progress_icon = NULL;
-
/* mail_msg stuff */
#ifdef LOG_OPS
static FILE *log;
@@ -983,9 +981,6 @@ op_status_exec (struct _op_status_msg *m)
} else {
data->activity_state = 1;
- if (progress_icon == NULL)
- progress_icon = e_icon_factory_get_icon ("mail-unread", E_ICON_SIZE_MENU);
-
MAIL_MT_UNLOCK (mail_msg_lock);
if (msg->info->desc)
what = msg->info->desc (msg);
@@ -996,7 +991,7 @@ op_status_exec (struct _op_status_msg *m)
what = g_strdup("");
}
- data->activity_id = e_activity_handler_cancelable_operation_started (activity_handler, "evolution-mail", progress_icon, what, TRUE, (void (*) (gpointer)) camel_operation_cancel, msg->cancel);
+ data->activity_id = e_activity_handler_cancelable_operation_started (activity_handler, "evolution-mail", what, TRUE, (void (*) (gpointer)) camel_operation_cancel, msg->cancel);
g_free (what);
MAIL_MT_LOCK (mail_msg_lock);
diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c
index ab4cc41006..588d1287ae 100644
--- a/mail/mail-send-recv.c
+++ b/mail/mail-send-recv.c
@@ -46,7 +46,6 @@
#include "mail-send-recv.h"
#include "mail-folder-cache.h"
#include "em-event.h"
-#include <e-util/e-icon-factory.h>
#include <e-util/gconf-bridge.h>
#define d(x)
@@ -379,7 +378,6 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati
char *pretty_url;
EAccount *account;
EIterator *iter;
- GList *icon_list;
EMEventTargetSendReceive *target;
gd = (GtkDialog *)(send_recv_dialog = gtk_dialog_new_with_buttons(_("Send & Receive Mail"), NULL, GTK_DIALOG_NO_SEPARATOR, NULL));
@@ -401,12 +399,7 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati
gtk_widget_show (cancel_button);
gtk_dialog_add_action_widget (gd, cancel_button, GTK_RESPONSE_CANCEL);
- icon_list = e_icon_factory_get_icon_list ("mail-send-receive");
- if (icon_list) {
- gtk_window_set_icon_list (GTK_WINDOW (gd), icon_list);
- g_list_foreach (icon_list, (GFunc) g_object_unref, NULL);
- g_list_free (icon_list);
- }
+ gtk_window_set_icon_name (GTK_WINDOW (gd), "mail-send-receive");
num_sources = 0;
@@ -487,8 +480,8 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati
} else if (info->timeout_id == 0)
info->timeout_id = g_timeout_add (STATUS_TIMEOUT, operation_status_timeout, info);
- recv_icon = e_icon_factory_get_image (
- "mail-inbox", E_ICON_SIZE_LARGE_TOOLBAR);
+ recv_icon = gtk_image_new_from_icon_name (
+ "mail-inbox", GTK_ICON_SIZE_LARGE_TOOLBAR);
pretty_url = format_url (source->url, account->name);
label = gtk_label_new (NULL);
gtk_label_set_ellipsize (
@@ -564,8 +557,8 @@ build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destinati
} else if (info->timeout_id == 0)
info->timeout_id = g_timeout_add (STATUS_TIMEOUT, operation_status_timeout, info);
- send_icon = e_icon_factory_get_image (
- "mail-outbox", E_ICON_SIZE_LARGE_TOOLBAR);
+ send_icon = gtk_image_new_from_icon_name (
+ "mail-outbox", GTK_ICON_SIZE_LARGE_TOOLBAR);
pretty_url = format_url (destination, NULL);
label = gtk_label_new (NULL);
gtk_label_set_ellipsize (
diff --git a/mail/message-list.c b/mail/message-list.c
index 9149fd673b..19e017e211 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -110,6 +110,7 @@ struct _MessageListPrivate {
gboolean destroyed;
gboolean thread_latest;
+ gboolean any_row_changed; /* save state before regen list when this is set to true */
};
static struct {
@@ -1797,32 +1798,29 @@ save_tree_state(MessageList *ml)
filename = mail_config_folder_to_cachename(ml->folder, "et-expanded-");
e_tree_save_expanded_state(ml->tree, filename);
g_free(filename);
+
+ ml->priv->any_row_changed = FALSE;
}
static void
-load_tree_expand_all (MessageList *ml, gboolean state)
+load_tree_state (MessageList *ml, xmlDoc *expand_state)
{
-
if (ml->folder == NULL || ml->tree == NULL)
return;
- e_tree_load_all_expanded_state (ml->tree, state);
- save_tree_state (ml);
-}
-static void
-load_tree_state (MessageList *ml)
-{
- char *filename;
+ if (expand_state) {
+ e_tree_load_expanded_state_xml (ml->tree, expand_state);
+ } else {
+ char *filename;
- if (ml->folder == NULL || ml->tree == NULL)
- return;
+ filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-");
+ e_tree_load_expanded_state (ml->tree, filename);
+ g_free (filename);
+ }
- filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-");
- e_tree_load_expanded_state (ml->tree, filename);
- g_free (filename);
+ ml->priv->any_row_changed = FALSE;
}
-
void
message_list_save_state (MessageList *ml)
{
@@ -2172,6 +2170,12 @@ ml_scrolled (GtkAdjustment *adj, MessageList *ml)
g_signal_emit (ml, message_list_signals[MESSAGE_LIST_SCROLLED], 0);
}
+static void
+on_model_row_changed (ETableModel *model, int row, MessageList *ml)
+{
+ ml->priv->any_row_changed = TRUE;
+}
+
/*
* GObject::init
*/
@@ -2212,6 +2216,7 @@ message_list_init (MessageList *message_list)
p->invisible = gtk_invisible_new();
p->destroyed = FALSE;
g_object_ref_sink(p->invisible);
+ p->any_row_changed = FALSE;
matom = gdk_atom_intern ("x-uid-list", FALSE);
gtk_selection_add_target(p->invisible, GDK_SELECTION_CLIPBOARD, matom, 0);
@@ -2367,6 +2372,25 @@ message_list_class_init (MessageListClass *message_list_class)
message_list_init_images ();
}
+static gboolean
+read_boolean_with_default (GConfClient *gconf, const char *key, gboolean def_value)
+{
+ GConfValue *value;
+ gboolean res;
+
+ g_return_val_if_fail (gconf != NULL, def_value);
+ g_return_val_if_fail (key != NULL, def_value);
+
+ value = gconf_client_get (gconf, key, NULL);
+ if (!value)
+ return def_value;
+
+ res = gconf_value_get_bool (value);
+ gconf_value_free (value);
+
+ return res;
+}
+
static void
message_list_construct (MessageList *message_list)
{
@@ -2400,11 +2424,11 @@ message_list_construct (MessageList *message_list)
message_list);
e_tree_memory_set_expanded_default(E_TREE_MEMORY(message_list->model),
- gconf_client_get_bool (gconf,
- "/apps/evolution/mail/display/thread_expand",
- NULL));
+ read_boolean_with_default (gconf,
+ "/apps/evolution/mail/display/thread_expand",
+ TRUE));
- message_list->priv->thread_latest = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_latest", NULL);
+ message_list->priv->thread_latest = read_boolean_with_default (gconf, "/apps/evolution/mail/display/thread_latest", TRUE);
/*
* The etree
@@ -2429,6 +2453,8 @@ message_list_construct (MessageList *message_list)
atk_object_set_name(a11y, _("Messages"));
}
+ g_signal_connect (e_tree_get_table_adapter (message_list->tree), "model_row_changed", G_CALLBACK (on_model_row_changed), message_list);
+
g_signal_connect((message_list->tree), "cursor_activated",
G_CALLBACK (on_cursor_activated_cmd),
message_list);
@@ -3869,6 +3895,8 @@ struct _regen_list_msg {
GPtrArray *summary;
int last_row; /* last selected (cursor) row */
+
+ xmlDoc *expand_state; /* stored expanded state of the previous view */
};
/*
@@ -4116,10 +4144,19 @@ regen_list_done (struct _regen_list_msg *m)
e_profile_event_emit("list.buildtree", m->folder->full_name, 0);
if (m->dotree) {
- if (m->ml->just_set_folder)
+ gboolean forcing_expand_state = m->ml->expand_all || m->ml->collapse_all;
+
+ if (m->ml->just_set_folder) {
m->ml->just_set_folder = FALSE;
- else /* Saving the tree state causes bug 352695 but fixes bug 387312 */
- save_tree_state (m->ml);
+ if (m->expand_state) {
+ /* rather load state from disk than use the memory data when changing folders */
+ xmlFreeDoc (m->expand_state);
+ m->expand_state = NULL;
+ }
+ }
+
+ if (forcing_expand_state)
+ e_tree_force_expanded_state (m->ml->tree, m->ml->expand_all ? 1 : -1);
build_tree (m->ml, m->tree, m->changes);
if (m->ml->thread_tree)
@@ -4127,12 +4164,13 @@ regen_list_done (struct _regen_list_msg *m)
m->ml->thread_tree = m->tree;
m->tree = NULL;
- if (m->ml->expand_all)
- load_tree_expand_all (m->ml, TRUE);
- else if (m->ml->collapse_all)
- load_tree_expand_all (m->ml, FALSE);
- else
- load_tree_state (m->ml);
+ if (forcing_expand_state) {
+ if (m->ml->folder != NULL && m->ml->tree != NULL)
+ save_tree_state (m->ml);
+ /* do not forget to set this back to use the default value... */
+ e_tree_force_expanded_state (m->ml->tree, 0);
+ } else
+ load_tree_state (m->ml, m->expand_state);
m->ml->expand_all = 0;
m->ml->collapse_all = 0;
@@ -4177,6 +4215,7 @@ regen_list_done (struct _regen_list_msg *m)
e_tree_set_info_message (m->ml->tree, NULL);
g_signal_emit (m->ml, message_list_signals[MESSAGE_LIST_BUILT], 0);
+ m->ml->priv->any_row_changed = FALSE;
}
static void
@@ -4206,6 +4245,9 @@ regen_list_free (struct _regen_list_msg *m)
/* we have to poke this here as well since we might've been cancelled and regened wont get called */
m->ml->regen = g_list_remove(m->ml->regen, m);
+ if (m->expand_state)
+ xmlFreeDoc (m->expand_state);
+
g_object_unref(m->ml);
}
@@ -4304,6 +4346,7 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came
m->folder = ml->folder;
camel_object_ref(m->folder);
m->last_row = -1;
+ m->expand_state = NULL;
if ((!m->hidedel || !m->dotree) && ml->thread_tree) {
camel_folder_thread_messages_unref(ml->thread_tree);
@@ -4320,6 +4363,13 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came
e_tree_set_info_message (m->ml->tree, txt);
g_free (txt);
+ } else if (ml->priv->any_row_changed && m->dotree && !ml->just_set_folder && (!ml->search || g_str_equal (ml->search, " "))) {
+ /* there has been some change on any row, if it was an expand state change,
+ then let it save; if not, then nothing happen. */
+ message_list_save_state (ml);
+ } else if (m->dotree && !ml->just_set_folder) {
+ /* remember actual expand state and restore it after regen */
+ m->expand_state = e_tree_save_expanded_state_xml (ml->tree);
}
/* if we're busy already kick off timeout processing, so normal updates are immediate */
diff --git a/mail/message-tag-followup.c b/mail/message-tag-followup.c
index 48f55456e4..52fc313e30 100644
--- a/mail/message-tag-followup.c
+++ b/mail/message-tag-followup.c
@@ -35,7 +35,6 @@
#include <libgnomeui/gnome-pixmap.h>
#include <glib/gi18n.h>
-#include "e-util/e-icon-factory.h"
#include "e-util/e-util-private.h"
#include "misc/e-dateedit.h"
@@ -271,19 +270,13 @@ construct (MessageTagEditor *editor)
GtkWidget *widget;
GList *strings;
GladeXML *gui;
- GList *icon_list;
- GdkPixbuf *pixbuf;
int i;
char *gladefile;
gtk_window_set_title (GTK_WINDOW (editor), _("Flag to Follow Up"));
- icon_list = e_icon_factory_get_icon_list ("stock_mail-flag-for-followup");
- if (icon_list) {
- gtk_window_set_icon_list (GTK_WINDOW (editor), icon_list);
- g_list_foreach (icon_list, (GFunc) g_object_unref, NULL);
- g_list_free (icon_list);
- }
+ gtk_window_set_icon_name (
+ GTK_WINDOW (editor), "stock_mail-flag-for-followup");
gtk_dialog_set_has_separator (GTK_DIALOG (editor), FALSE);
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editor)->vbox), 0);
@@ -302,9 +295,9 @@ construct (MessageTagEditor *editor)
gtk_box_set_child_packing (GTK_BOX (GTK_DIALOG (editor)->vbox), widget, TRUE, TRUE, 6, GTK_PACK_START);
widget = glade_xml_get_widget (gui, "pixmap");
- pixbuf = e_icon_factory_get_icon ("stock_mail-flag-for-followup", E_ICON_SIZE_DIALOG);
- gtk_image_set_from_pixbuf ((GtkImage *)widget, pixbuf);
- g_object_unref (pixbuf);
+ gtk_image_set_from_icon_name (
+ GTK_IMAGE (widget), "stock_mail-flag-for-followup",
+ GTK_ICON_SIZE_DIALOG);
followup->message_list = GTK_TREE_VIEW (glade_xml_get_widget (gui, "message_list"));
model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
diff --git a/mail/searchtypes.xml b/mail/searchtypes.xml
index 1f7dcfe44a..d48fc251af 100644
--- a/mail/searchtypes.xml
+++ b/mail/searchtypes.xml
@@ -462,6 +462,21 @@
</rule>
<rule grouping="any" source="demand">
+ <_title>Subject or Recipients contains</_title>
+ <partset>
+ <part name="subject">
+ <value name="subject-type" type="option" value="contains"/>
+ <value name="subject" type="string"/>
+ </part>
+ <part name="to">
+ <value name="recipient-type" type="option" value="contains"/>
+ <value name="recipient" type="address"/>
+ </part>
+ </partset>
+ <sources/>
+ </rule>
+
+ <rule grouping="any" source="demand">
<_title>Recipients contain</_title>
<partset>
<part name="to">