aboutsummaryrefslogtreecommitdiffstats
path: root/filter/rule-context.c
diff options
context:
space:
mode:
authorMichael Zucci <zucchi@src.gnome.org>2000-08-09 14:48:39 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-08-09 14:48:39 +0800
commit2f6003c9ed5291b6feb4694bbf5f88084adeded6 (patch)
tree7126cbeb9d60b6549cbe83bf86a4c107266b2496 /filter/rule-context.c
parent970050a51ce8ba8acbe23577b45c154cbdb0adf0 (diff)
downloadgsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar.gz
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar.bz2
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar.lz
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar.xz
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.tar.zst
gsoc2013-evolution-2f6003c9ed5291b6feb4694bbf5f88084adeded6.zip
(rule_context_add_rule_gui): Keep track of context so it isn't freed under us.
svn path=/trunk/; revision=4645
Diffstat (limited to 'filter/rule-context.c')
-rw-r--r--filter/rule-context.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/filter/rule-context.c b/filter/rule-context.c
index 6d43a99f8c..9621599b0f 100644
--- a/filter/rule-context.c
+++ b/filter/rule-context.c
@@ -155,7 +155,7 @@ void rule_context_add_rule_set(RuleContext *f, const char *setname, int rule_ty
*
* Set the text error for the context, or NULL to clear it.
**/
-void
+static void
rule_context_set_error(RuleContext *f, char *error)
{
g_free(f->error);
@@ -343,6 +343,44 @@ void rule_context_add_rule(RuleContext *f, FilterRule *new)
f->rules = g_list_append(f->rules, new);
}
+static void
+new_rule_clicked(GtkWidget *w, int button, RuleContext *context)
+{
+#warning "Need a changed signal for this to work best"
+ if (button == 0) {
+ FilterRule *rule = gtk_object_get_data((GtkObject *)w, "rule");
+ char *user = gtk_object_get_data((GtkObject *)w, "path");
+
+ gtk_object_ref((GtkObject *)rule);
+ rule_context_add_rule(context, rule);
+ if (user) {
+ rule_context_save((RuleContext *)context, user);
+ }
+ }
+ if (button != -1) {
+ gnome_dialog_close((GnomeDialog *)w);
+ }
+}
+
+/* add a rule, with a gui, asking for confirmation first ... optionally save to path */
+void rule_context_add_rule_gui(RuleContext *f, FilterRule *rule, const char *title, const char *path)
+{
+ GtkWidget *w;
+ GnomeDialog *gd;
+
+ w = filter_rule_get_widget(rule, f);
+ gd = (GnomeDialog *)gnome_dialog_new(title, "Ok", "Cancel", NULL);
+ gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0);
+ gtk_widget_show((GtkWidget *)gd);
+ gtk_object_set_data_full((GtkObject *)gd, "rule", rule, (GtkDestroyNotify)gtk_object_unref);
+ if (path)
+ gtk_object_set_data_full((GtkObject *)gd, "path", g_strdup(path), (GtkDestroyNotify)g_free);
+ gtk_signal_connect((GtkObject *)gd, "clicked", new_rule_clicked, f);
+ gtk_object_ref((GtkObject *)f);
+ gtk_object_set_data_full((GtkObject *)gd, "context", f, (GtkDestroyNotify)gtk_object_unref);
+ gtk_widget_show((GtkWidget *)gd);
+}
+
void rule_context_remove_rule(RuleContext *f, FilterRule *rule)
{
f->rules = g_list_remove(f->rules, rule);