aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-editor.c
diff options
context:
space:
mode:
authorNotZed <NotZed@HelixCode.com>2000-03-03 06:21:55 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-03-03 06:21:55 +0800
commit9cf31d6b063eacf768ea835fad15377aaddf6dc1 (patch)
tree8294058eb116e1a82fd7b8659ddb049eca7ea12d /filter/filter-editor.c
parent8e356d0601866c7f7d8139b1135a628fd4362462 (diff)
downloadgsoc2013-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.c35
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;