aboutsummaryrefslogtreecommitdiffstats
path: root/filter/rule-context.c
diff options
context:
space:
mode:
authorPeter Williams <peterw@src.gnome.org>2000-08-18 01:42:21 +0800
committerPeter Williams <peterw@src.gnome.org>2000-08-18 01:42:21 +0800
commit7cf30eb79276d4f255c1d603e2c203bb054cf50e (patch)
tree687a003be1d0fbcc0ff06eccd900a04c38ad7aa0 /filter/rule-context.c
parentb3f1da4f99afadb51862fe732d66b72437224b99 (diff)
downloadgsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.gz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.bz2
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.lz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.xz
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.tar.zst
gsoc2013-evolution-7cf30eb79276d4f255c1d603e2c203bb054cf50e.zip
Filtering on demand! booyeah!
svn path=/trunk/; revision=4864
Diffstat (limited to 'filter/rule-context.c')
-rw-r--r--filter/rule-context.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/filter/rule-context.c b/filter/rule-context.c
index c297ae1a61..8114d34197 100644
--- a/filter/rule-context.c
+++ b/filter/rule-context.c
@@ -26,7 +26,8 @@
#define d(x) x
-static int load(RuleContext *f, const char *system, const char *user);
+static int load(RuleContext *f, const char *system, const char *user,
+ RCRegisterFunc on_demand_cb, gpointer user_data);
static int save(RuleContext *f, const char *user);
static void rule_context_class_init (RuleContextClass *class);
@@ -167,19 +168,25 @@ rule_context_set_error(RuleContext *f, char *error)
* @f:
* @system:
* @user:
+ * @on_demand_cb: An optional callback to allow UI registration of on-demand rules
+ * @user_data: Extra data for the callback
*
* Load a rule context from a system and user description file.
*
* Return value:
**/
-int rule_context_load(RuleContext *f, const char *system, const char *user)
+int rule_context_load(RuleContext *f, const char *system, const char *user,
+ RCRegisterFunc on_demand_cb, gpointer user_data )
{
printf("rule_context: loading %s %s\n", system, user);
- return ((RuleContextClass *)((GtkObject *)f)->klass)->load(f, system, user);
+ return ((RuleContextClass *)((GtkObject *)f)->klass)->load(f, system, user,
+ on_demand_cb,
+ user_data);
}
-static int load(RuleContext *f, const char *system, const char *user)
+static int load(RuleContext *f, const char *system, const char *user,
+ RCRegisterFunc on_demand_cb, gpointer user_data)
{
xmlNodePtr set, rule;
struct _part_set_map *part_map;
@@ -245,6 +252,9 @@ static int load(RuleContext *f, const char *system, const char *user)
FilterRule *part = FILTER_RULE(gtk_type_new(rule_map->type));
if (filter_rule_xml_decode(part, rule, f) == 0) {
rule_map->append(f, part);
+
+ if (on_demand_cb && part->source == FILTER_SOURCE_DEMAND)
+ (on_demand_cb) (f, part, user_data);
} else {
gtk_object_unref((GtkObject *)part);
g_warning("Cannot load filter part");
@@ -398,3 +408,20 @@ int rule_context_get_rank_rule(RuleContext *f, FilterRule *rule)
{
return g_list_index(f->rules, rule);
}
+
+int
+rule_context_get_rank_rule_with_source(RuleContext *f, FilterRule *rule, enum _filter_source_t source)
+{
+ int i;
+ GList *iter;
+
+ i = 0;
+ for (iter = f->rules; iter; iter = iter->next) {
+ if (iter->data == rule)
+ return i;
+ if (((FilterRule *)iter->data)->source == source)
+ i++;
+ }
+
+ return -1;
+}