aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-rule.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2008-06-09 18:50:54 +0800
committerMilan Crha <mcrha@src.gnome.org>2008-06-09 18:50:54 +0800
commitf1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967 (patch)
treeefb82364d33cceaa2a990582de1b1c3b4b652fc7 /filter/filter-rule.c
parent7d4f83689a512f3af1a4002a1567ffbb2762ebb9 (diff)
downloadgsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar.gz
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar.bz2
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar.lz
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar.xz
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.tar.zst
gsoc2013-evolution-f1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967.zip
** Fix for bug #201011
2008-06-09 Milan Crha <mcrha@redhat.com> ** Fix for bug #201011 * filter/filter-rule.h: (struct _FilterRule): New property 'enabled' to be able to disable filter rules. * filter/filter-rule.c: (filter_rule_init), (rule_eq), (xml_encode), (xml_decode), (rule_copy): Store/restore/use 'enabled' value. * filter/rule-editor.c: (add_editor_response), (rule_move), (set_source): Set the 'enabled' column properly. * filter/rule-editor.c: (rule_able_toggled), (rule_editor_treeview_new): Add column "Enabled" to the tree, but have it hidden by default, only those whom supports it can show it. * mail/em-filter-editor.c: (em_filter_editor_construct): Show Enabled column in the editor, because we support it here. * mail/mail-session.c: (main_get_filter_driver): Skip disabled rules. svn path=/trunk/; revision=35620
Diffstat (limited to 'filter/filter-rule.c')
-rw-r--r--filter/filter-rule.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/filter/filter-rule.c b/filter/filter-rule.c
index 2dfb0b7fd6..4d5d76505c 100644
--- a/filter/filter-rule.c
+++ b/filter/filter-rule.c
@@ -121,6 +121,7 @@ static void
filter_rule_init (FilterRule *fr)
{
fr->priv = g_malloc0 (sizeof (*fr->priv));
+ fr->enabled = TRUE;
}
static void
@@ -258,7 +259,8 @@ list_eq(GList *al, GList *bl)
static int
rule_eq (FilterRule *fr, FilterRule *cm)
{
- return fr->grouping == cm->grouping
+ return fr->enabled == cm->enabled
+ && fr->grouping == cm->grouping
&& fr->threading == fr->threading
&& ((fr->name && cm->name && strcmp (fr->name, cm->name) == 0)
|| (fr->name == NULL && cm->name == NULL))
@@ -282,6 +284,9 @@ xml_encode (FilterRule *fr)
GList *l;
node = xmlNewNode (NULL, (const unsigned char *)"rule");
+
+ xmlSetProp (node, (const unsigned char *)"enabled", (const unsigned char *)(fr->enabled ? "true" : "false"));
+
switch (fr->grouping) {
case FILTER_GROUP_ALL:
xmlSetProp (node, (const unsigned char *)"grouping", (const unsigned char *)"all");
@@ -390,6 +395,14 @@ xml_decode (FilterRule *fr, xmlNodePtr node, RuleContext *f)
fr->name = NULL;
}
+ grouping = (char *)xmlGetProp (node, (const unsigned char *)"enabled");
+ if (!grouping)
+ fr->enabled = TRUE;
+ else {
+ fr->enabled = strcmp (grouping, "false") != 0;
+ xmlFree (grouping);
+ }
+
grouping = (char *)xmlGetProp (node, (const unsigned char *)"grouping");
if (!strcmp (grouping, "any"))
fr->grouping = FILTER_GROUP_ANY;
@@ -447,6 +460,8 @@ rule_copy (FilterRule *dest, FilterRule *src)
{
GList *node;
+ dest->enabled = src->enabled;
+
g_free (dest->name);
dest->name = g_strdup (src->name);