aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-rule.c
diff options
context:
space:
mode:
author3 <NotZed@Ximian.com>2001-09-15 16:13:19 +0800
committerMichael Zucci <zucchi@src.gnome.org>2001-09-15 16:13:19 +0800
commit07a40707a39c663f06893a5cba36d49ed63ba5b6 (patch)
tree8e650e3f5508d50a8d10bd3a4b6804cd5cf61385 /filter/filter-rule.c
parent466e05c024510d8019989f8bf8f04541c3ca792d (diff)
downloadgsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar.gz
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar.bz2
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar.lz
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar.xz
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.tar.zst
gsoc2013-evolution-07a40707a39c663f06893a5cba36d49ed63ba5b6.zip
Emit changed events.
2001-09-13 <NotZed@Ximian.com> * filter-filter.c (filter_filter_add_action): (filter_filter_remove_action): (filter_filter_replace_action): Emit changed events. * filter-rule.c (filter_rule_xml_decode): Emiot a rule changed event. (filter_rule_copy): Emit a changed event. (filter_rule_replace_part): " (filter_rule_add_part): " (filter_rule_remove_part): " (filter_rule_xml_decode): Freeze around decoding, so we only emit changed when done. (filter_rule_emit_changed): New function to emit changed events if not frozen. 2001-09-13 <NotZed@Ximian.com> * rule-context.c (rule_context_class_init): Added a 'rule_added' and 'rule_removed' signal. (rule_context_load): Set a (private) frozen flag while we're loading. (rule_context_add_rule): Emit a rule_added signal if we're not frozen. (rule_context_remove_rule): Emit a rule_removed signal if we're not frozen. svn path=/trunk/; revision=12855
Diffstat (limited to 'filter/filter-rule.c')
-rw-r--r--filter/filter-rule.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/filter/filter-rule.c b/filter/filter-rule.c
index bf948ba299..28703024a2 100644
--- a/filter/filter-rule.c
+++ b/filter/filter-rule.c
@@ -52,11 +52,13 @@ static void filter_rule_finalise (GtkObject * obj);
#define _PRIVATE(x) (((FilterRule *)(x))->priv)
struct _FilterRulePrivate {
+ int frozen;
};
static GtkObjectClass *parent_class;
enum {
+ CHANGED,
LAST_SIGNAL
};
@@ -103,6 +105,13 @@ filter_rule_class_init (FilterRuleClass * class)
class->get_widget = get_widget;
/* signals */
+ signals[CHANGED] =
+ gtk_signal_new("changed",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (FilterRuleClass, changed),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
@@ -281,11 +290,19 @@ load_set (xmlNodePtr node, FilterRule *fr, RuleContext *f)
int
filter_rule_xml_decode (FilterRule *fr, xmlNodePtr node, RuleContext *f)
{
+ int res;
+
g_assert (IS_FILTER_RULE (fr));
g_assert (IS_RULE_CONTEXT (f));
g_assert (node != NULL);
-
- return ((FilterRuleClass *) ((GtkObject *) fr)->klass)->xml_decode (fr, node, f);
+
+ fr->priv->frozen++;
+ res = ((FilterRuleClass *) ((GtkObject *) fr)->klass)->xml_decode (fr, node, f);
+ fr->priv->frozen--;
+
+ filter_rule_emit_changed(fr);
+
+ return res;
}
static int
@@ -323,7 +340,8 @@ xml_decode (FilterRule *fr, xmlNodePtr node, RuleContext *f)
load_set (work, fr, f);
} else if (!strcmp (work->name, "title") || !strcmp (work->name, "_title")) {
if (!fr->name) {
- gchar *str, *decstr;
+ char *str, *decstr;
+
str = xmlNodeGetContent (work);
decstr = e_utf8_xml1_decode (str);
if (str)
@@ -373,6 +391,8 @@ filter_rule_copy (FilterRule *dest, FilterRule *src)
g_assert (IS_FILTER_RULE (src));
((FilterRuleClass *) ((GtkObject *) dest)->klass)->copy (dest, src);
+
+ filter_rule_emit_changed(dest);
}
void
@@ -382,6 +402,8 @@ filter_rule_add_part (FilterRule *fr, FilterPart *fp)
g_assert (IS_FILTER_PART (fp));
fr->parts = g_list_append (fr->parts, fp);
+
+ filter_rule_emit_changed(fr);
}
void
@@ -391,6 +413,8 @@ filter_rule_remove_part (FilterRule *fr, FilterPart *fp)
g_assert (IS_FILTER_PART (fp));
fr->parts = g_list_remove (fr->parts, fp);
+
+ filter_rule_emit_changed(fr);
}
void
@@ -408,6 +432,8 @@ filter_rule_replace_part (FilterRule *fr, FilterPart *fp, FilterPart *new)
} else {
fr->parts = g_list_append (fr->parts, new);
}
+
+ filter_rule_emit_changed(fr);
}
void
@@ -421,6 +447,15 @@ filter_rule_build_code (FilterRule *fr, GString *out)
d(printf ("build_code: [%s](%d)", out->str, out->len));
}
+void
+filter_rule_emit_changed(FilterRule *fr)
+{
+ g_assert (IS_FILTER_RULE (fr));
+
+ if (fr->priv->frozen == 0)
+ gtk_signal_emit((GtkObject *)fr, signals[CHANGED]);
+}
+
static void
build_code (FilterRule *fr, GString *out)
{