aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-editor.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/filter-editor.c')
-rw-r--r--filter/filter-editor.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/filter/filter-editor.c b/filter/filter-editor.c
index cb3e879f04..bed8a0f032 100644
--- a/filter/filter-editor.c
+++ b/filter/filter-editor.c
@@ -130,7 +130,7 @@ struct _editor_data {
FilterRule *current;
GtkList *list;
GtkButton *buttons[BUTTON_LAST];
- enum _filter_source_t current_source;
+ char *current_source;
};
static void set_sensitive (struct _editor_data *data);
@@ -147,7 +147,7 @@ rule_add (GtkWidget *widget, struct _editor_data *data)
d(printf ("add rule\n"));
/* create a new rule with 1 match and 1 action */
rule = filter_filter_new ();
- ((FilterRule *)rule)->source = data->current_source;
+ filter_rule_set_source((FilterRule *)rule, data->current_source);
part = rule_context_next_part (data->f, NULL);
filter_rule_add_part ((FilterRule *)rule, filter_part_clone (part));
@@ -196,15 +196,13 @@ rule_edit (GtkWidget *widget, struct _editor_data *data)
d(printf ("edit rule\n"));
rule = data->current;
w = filter_rule_get_widget (rule, data->f);
- gd = gnome_dialog_new (_("Edit Rule"),
- GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL,
- NULL);
+ gd = gnome_dialog_new(_("Edit Rule"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (gd)->vbox), w, FALSE, TRUE, 0);
gtk_widget_show (gd);
result = gnome_dialog_run_and_close (GNOME_DIALOG (gd));
if (result == 0) {
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos != -1) {
GtkListItem *item = g_list_nth_data (data->list->children, pos);
gchar *s = e_utf8_to_gtk_string ((GtkWidget *) item, data->current->name);
@@ -222,7 +220,7 @@ rule_delete (GtkWidget *widget, struct _editor_data *data)
GtkListItem *item;
d(printf("ddelete rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos != -1) {
rule_context_remove_rule (data->f, data->current);
@@ -260,7 +258,7 @@ rule_up (GtkWidget *widget, struct _editor_data *data)
int pos;
d(printf("up rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
if (pos > 0) {
rule_move (data, pos, pos-1);
}
@@ -272,7 +270,7 @@ rule_down (GtkWidget *widget, struct _editor_data *data)
int pos;
d(printf ("down rule\n"));
- pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source);
+ pos = rule_context_get_rank_rule(data->f, data->current, data->current_source);
rule_move (data, pos, pos+1);
}
@@ -293,7 +291,7 @@ set_sensitive (struct _editor_data *data)
FilterRule *rule = NULL;
int index = -1, count = 0;
- while ((rule = rule_context_next_rule (data->f, rule))) {
+ while ((rule = rule_context_next_rule (data->f, rule, data->current_source))) {
if (rule == data->current)
index=count;
count++;
@@ -335,22 +333,16 @@ select_source (GtkMenuItem *mi, struct _editor_data *data)
{
FilterRule *rule = NULL;
GList *newitems = NULL;
- enum _filter_source_t source;
+ char *source;
- source = (enum _filter_source_t) GPOINTER_TO_INT (
- gtk_object_get_data (GTK_OBJECT (mi), "number"));
+ source = gtk_object_get_data (GTK_OBJECT (mi), "source");
gtk_list_clear_items (GTK_LIST (data->list), 0, -1);
d(printf ("Checking for rules that are of type %d\n", source));
- while ((rule = rule_context_next_rule (data->f, rule)) != NULL) {
+ while ((rule = rule_context_next_rule (data->f, rule, source)) != NULL) {
GtkWidget *item;
- gchar *s;
-
- if (rule->source != source) {
- d(printf (" skipping %s: %d != %d\n", rule->name, rule->source, source));
- continue;
- }
+ char *s;
d(printf (" hit %s (%d)\n", rule->name, source));
s = e_utf8_to_gtk_string (GTK_WIDGET (data->list), rule->name);
@@ -367,6 +359,12 @@ select_source (GtkMenuItem *mi, struct _editor_data *data)
set_sensitive (data);
}
+static char *source_names[] = {
+ "incoming",
+ "demand",
+ "outgoing"
+};
+
GtkWidget *
filter_editor_construct (struct _FilterContext *f)
{
@@ -400,8 +398,12 @@ filter_editor_construct (struct _FilterContext *f)
if (i == 0)
firstitem = b;
- /* make sure that the glade is in sync with enum _filter_source_t! */
- gtk_object_set_data (GTK_OBJECT (b), "number", GINT_TO_POINTER (i));
+ /* make sure that the glade is in sync with the source list! */
+ if (i < sizeof(source_names)/sizeof(source_names[0])) {
+ gtk_object_set_data (GTK_OBJECT (b), "source", source_names[i]);
+ } else {
+ g_warning("Glade file " FILTER_GLADEDIR "/filter.glade out of sync with editor code");
+ }
gtk_signal_connect (GTK_OBJECT (b), "activate", select_source, data);
i++;