diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2001-09-13 06:06:46 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-09-13 06:06:46 +0800 |
commit | e01b1d7c259f148847e97d4c3e609933e26a73cf (patch) | |
tree | ec8f29ab4a07dd9bb64ec8e4c3b2223c2fbe9346 /filter/vfolder-rule.c | |
parent | 8be7f276a292ba85e6bec20fd7d5a351f094296e (diff) | |
download | gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar.gz gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar.bz2 gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar.lz gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar.xz gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.tar.zst gsoc2013-evolution-e01b1d7c259f148847e97d4c3e609933e26a73cf.zip |
Clone the current rule before editing it so that changes can be undone.
2001-09-12 Jeffrey Stedfast <fejj@ximian.com>
* rule-editor.c (rule_edit): Clone the current rule before editing
it so that changes can be undone.
(edit_editor_clicked): If the user hit OK, replace the original
rule with the new one.
* vfolder-rule.c (vfolder_rule_finalise): Free the sources list.
(rule_copy): Implemented.
* filter-filter.c (rule_copy): Implemented.
* filter-rule.c (filter_rule_copy): New convenience function to
copy one rule "into" another.
(rule_copy): Default implementation.
(filter_rule_clone): Use filter_rule_copy() internally to get rid
of the nastiness/slowness of xml encoding and then decoding.
svn path=/trunk/; revision=12787
Diffstat (limited to 'filter/vfolder-rule.c')
-rw-r--r-- | filter/vfolder-rule.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/filter/vfolder-rule.c b/filter/vfolder-rule.c index 13e5337a18..5f122b5f1a 100644 --- a/filter/vfolder-rule.c +++ b/filter/vfolder-rule.c @@ -42,6 +42,7 @@ static gint validate(FilterRule *); static xmlNodePtr xml_encode(FilterRule *); static int xml_decode(FilterRule *, xmlNodePtr, struct _RuleContext *f); +static void rule_copy (FilterRule *dest, FilterRule *src); /*static void build_code(FilterRule *, GString *out);*/ static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f); @@ -95,6 +96,7 @@ vfolder_rule_class_init (VfolderRuleClass *class) filter_rule->validate = validate; filter_rule->xml_encode = xml_encode; filter_rule->xml_decode = xml_decode; + filter_rule->copy = rule_copy; /*filter_rule->build_code = build_code;*/ filter_rule->get_widget = get_widget; } @@ -109,7 +111,10 @@ static void vfolder_rule_finalise(GtkObject *obj) { VfolderRule *o = (VfolderRule *)obj; - o = o; + + g_list_foreach (o->sources, (GFunc) g_free, NULL); + g_list_free (o->sources); + ((GtkObjectClass *)(parent_class))->finalize(obj); } @@ -258,6 +263,33 @@ xml_decode (FilterRule *fr, xmlNodePtr node, struct _RuleContext *f) return 0; } +static void +rule_copy (FilterRule *dest, FilterRule *src) +{ + VfolderRule *vdest, *vsrc; + GList *node; + + vdest = (VfolderRule *) dest; + vsrc = (VfolderRule *) src; + + if (vdest->sources) { + g_list_foreach (vdest->sources, (GFunc) g_free, NULL); + g_list_free (vdest->sources); + vdest->sources = NULL; + } + + node = vsrc->sources; + while (node) { + char *uri = node->data; + + vdest->sources = g_list_append (vdest->sources, g_strdup (uri)); + node = node->next; + } + + ((FilterRuleClass *)(parent_class))->copy (dest, src); +} + + enum { BUTTON_ADD, BUTTON_REMOVE, |