aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-editor.c
diff options
context:
space:
mode:
authorNotZed <NotZed@HelixCode.com>2000-02-25 11:04:30 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-02-25 11:04:30 +0800
commit675d1c25dbedaccbb135dc8ccd784e6706aa4aaa (patch)
tree6b3aa7679bb798df06a97a8067202b6b10438328 /filter/filter-editor.c
parentd83721f8b79ba10df2d067d7d0384c1a0790574e (diff)
downloadgsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar.gz
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar.bz2
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar.lz
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar.xz
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.tar.zst
gsoc2013-evolution-675d1c25dbedaccbb135dc8ccd784e6706aa4aaa.zip
Functions for memory management.
2000-02-24 NotZed <NotZed@HelixCode.com> * filter-xml.c (filter_description_free): (filter_load_ruleset_free): (filter_load_optionset_free): Functions for memory management. * filter-arg.c (filter_arg_copy): Copy the values of one arg into another. * filter-druid.c: (option_name_changed): Update the option's description as the user enters it in. svn path=/trunk/; revision=1929
Diffstat (limited to 'filter/filter-editor.c')
-rw-r--r--filter/filter-editor.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/filter/filter-editor.c b/filter/filter-editor.c
index d37769359f..1d68276b73 100644
--- a/filter/filter-editor.c
+++ b/filter/filter-editor.c
@@ -35,6 +35,7 @@ struct _FilterEditorPrivate {
GtkWidget *edit, *add, *remove, *up, *down;
/* for sub-druid */
+ struct filter_option *druid_option;
GtkWidget *druid_dialogue;
FilterDruid *druid_druid;
};
@@ -125,7 +126,20 @@ druid_dialogue_clicked(GnomeDialog *d, int button, FilterEditor *e)
printf("Finish!\n");
if (p->druid_druid->option_current) {
/* FIXME: this should be copied? */
- e->useroptions = g_list_append(e->useroptions, p->druid_druid->option_current);
+ if (p->druid_option) {
+ GList *node;
+
+ node = g_list_find(e->useroptions, p->druid_option);
+ if (node) {
+ /* FIXME: memleak, should copy */
+ node->data = p->druid_druid->option_current;
+ } else {
+ g_warning("Cannot find node I edited, appending instead");
+ e->useroptions = g_list_append(e->useroptions, p->druid_druid->option_current);
+ }
+ } else {
+ e->useroptions = g_list_append(e->useroptions, p->druid_druid->option_current);
+ }
filter_druid_set_rules(p->druid, e->useroptions, e->rules, NULL);
}
case 3:
@@ -182,6 +196,8 @@ add_or_edit(FilterEditor *e, struct filter_option *option)
druid_dialogue_clicked(dialogue, 1, e);
}
+ p->druid_option = option;
+
gtk_signal_connect(druid, "option_selected", druid_dialogue_option_selected, e);
gtk_widget_show(druid);