diff options
author | 3 <NotZed@Ximian.com> | 2001-09-15 16:13:19 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2001-09-15 16:13:19 +0800 |
commit | 07a40707a39c663f06893a5cba36d49ed63ba5b6 (patch) | |
tree | 8e650e3f5508d50a8d10bd3a4b6804cd5cf61385 /filter/filter-rule.c | |
parent | 466e05c024510d8019989f8bf8f04541c3ca792d (diff) | |
download | gsoc2013-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.c | 41 |
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) { |