diff options
author | NotZed <NotZed@HelixCode.com> | 2000-03-03 06:21:55 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2000-03-03 06:21:55 +0800 |
commit | 9cf31d6b063eacf768ea835fad15377aaddf6dc1 (patch) | |
tree | 8294058eb116e1a82fd7b8659ddb049eca7ea12d /filter/filter-editor.c | |
parent | 8e356d0601866c7f7d8139b1135a628fd4362462 (diff) | |
download | gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar.gz gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar.bz2 gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar.lz gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar.xz gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.tar.zst gsoc2013-evolution-9cf31d6b063eacf768ea835fad15377aaddf6dc1.zip |
Disconnect the list signal, so we dont get spurious emits during destroy.
2000-03-02 NotZed <NotZed@HelixCode.com>
* filter-druid.c (object_destroy): Disconnect the list signal, so
we dont get spurious emits during destroy.
(arg_changed): Callback to update filter arg asynchronously.
(arg_link_clicked): Edit the value non-modally.
* filter-arg.c (filter_arg_edit_values_1): Changed to use
non-modal interface.
svn path=/trunk/; revision=2015
Diffstat (limited to 'filter/filter-editor.c')
-rw-r--r-- | filter/filter-editor.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/filter/filter-editor.c b/filter/filter-editor.c index 24e2514057..82e57afb4e 100644 --- a/filter/filter-editor.c +++ b/filter/filter-editor.c @@ -69,12 +69,25 @@ filter_editor_get_type (void) } static void +object_destroy(FilterEditor *obj) +{ + struct _FilterEditorPrivate *p = _PRIVATE(obj); + + if (p->druid_druid) + gtk_object_unref((GtkObject *)p->druid_dialogue); + + GTK_OBJECT_CLASS(filter_editor_parent)->destroy(obj); +} + +static void filter_editor_class_init (FilterEditorClass *klass) { GtkObjectClass *object_class = (GtkObjectClass *) klass; filter_editor_parent = gtk_type_class (gnome_dialog_get_type ()); + object_class->destroy = object_destroy; + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } @@ -125,25 +138,30 @@ druid_dialogue_clicked(GnomeDialog *d, int button, FilterEditor *e) case 2: printf("Finish!\n"); if (p->druid_druid->option_current) { - /* FIXME: this should be copied? */ + struct filrt_optionrule *or; + + printf("refcount = %d\n", ((GtkObject *)p->druid_druid)->ref_count); + + or = 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; + /* fixme: free old one */ + node->data = or; } else { g_warning("Cannot find node I edited, appending instead"); - e->useroptions = g_list_append(e->useroptions, p->druid_druid->option_current); + e->useroptions = g_list_append(e->useroptions, or); } } else { - e->useroptions = g_list_append(e->useroptions, p->druid_druid->option_current); + e->useroptions = g_list_append(e->useroptions, or); } - filter_druid_set_rules(p->druid, e->useroptions, e->rules, NULL); + filter_druid_set_rules(p->druid, e->useroptions, e->rules, or); } case 3: printf("cancel!\n"); + p->druid_dialogue = NULL; gnome_dialog_close(d); return; } @@ -169,6 +187,11 @@ add_or_edit(FilterEditor *e, struct filter_option *option) FilterDruid *druid; struct _FilterEditorPrivate *p = _PRIVATE(e); + if (p->druid_dialogue) { + gdk_window_raise(GTK_WIDGET(p->druid_dialogue)->window); + return; + } + dialogue = gnome_dialog_new(option?"Edit Filter":"Create filter", "Prev", "Next", "Finish", "Cancel", 0); p->druid_dialogue = dialogue; |