diff options
author | Jeffrey Stedfast <fejj@helixcode.com> | 2000-11-01 05:49:52 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2000-11-01 05:49:52 +0800 |
commit | 70ae377bb6e3897ae635b6ef3ad91c2e9fba817a (patch) | |
tree | 9f11936357723c4ac1db66667dfc52eea7bcdb42 /filter/filter-editor.c | |
parent | f8fc698cde917a9fd8b0ec37279ce52cb9a09d3e (diff) | |
download | gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar.gz gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar.bz2 gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar.lz gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar.xz gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.tar.zst gsoc2013-evolution-70ae377bb6e3897ae635b6ef3ad91c2e9fba817a.zip |
Override the default validate function to only return TRUE if a folder has
2000-10-31 Jeffrey Stedfast <fejj@helixcode.com>
* filter-folder.c (validate): Override the default validate
function to only return TRUE if a folder has been selected.
* filter-editor.c (rule_add): Validate that all the rule parts and
action parts are correctly filled in.
(rule_edit): Same.
svn path=/trunk/; revision=6300
Diffstat (limited to 'filter/filter-editor.c')
-rw-r--r-- | filter/filter-editor.c | 122 |
1 files changed, 87 insertions, 35 deletions
diff --git a/filter/filter-editor.c b/filter/filter-editor.c index 83af757657..96e1b22b09 100644 --- a/filter/filter-editor.c +++ b/filter/filter-editor.c @@ -144,6 +144,7 @@ rule_add (GtkWidget *widget, struct _editor_data *data) GtkWidget *gd; GtkWidget *w; FilterPart *part; + gboolean done = FALSE; d(printf ("add rule\n")); /* create a new rule with 1 match and 1 action */ @@ -165,30 +166,54 @@ rule_add (GtkWidget *widget, struct _editor_data *data) gtk_widget_show (gd); - result = gnome_dialog_run_and_close (GNOME_DIALOG (gd)); - - if (result == 0) { - GtkListItem *item; - GList *l = NULL; - gchar *s = e_utf8_to_gtk_string (GTK_WIDGET (data->list), ((FilterRule *)rule)->name); - - item = (GtkListItem *) gtk_list_item_new_with_label (s); - g_free (s); - - gtk_object_set_data (GTK_OBJECT (item), "rule", rule); - gtk_widget_show (GTK_WIDGET (item)); - - l = g_list_append (l, item); - - gtk_list_append_items (data->list, l); - gtk_list_select_child (data->list, GTK_WIDGET (item)); - - data->current = (FilterRule *)rule; - rule_context_add_rule (data->f, (FilterRule *)rule); - - set_sensitive (data); - } else { - gtk_object_unref (GTK_OBJECT (rule)); + while (!done) { + result = gnome_dialog_run (GNOME_DIALOG (gd)); + + if (result == 0) { + GtkWidget *item; + GList *parts, *l = NULL; + gchar *s; + + done = TRUE; + + /* validate rule parts */ + parts = ((FilterRule *)rule)->parts; + while (parts && done) { + done = filter_part_validate ((FilterPart *) parts->data); + parts = parts->next; + } + + /* validate action parts */ + parts = rule->actions; + while (parts && done) { + done = filter_part_validate ((FilterPart *) parts->data); + parts = parts->next; + } + + if (done) { + s = e_utf8_to_gtk_string (GTK_WIDGET (data->list), ((FilterRule *)rule)->name); + item = gtk_list_item_new_with_label (s); + g_free (s); + + gtk_object_set_data (GTK_OBJECT (item), "rule", rule); + gtk_widget_show (item); + + l = g_list_append (l, GTK_LIST_ITEM (item)); + + gtk_list_append_items (data->list, l); + gtk_list_select_child (data->list, item); + + data->current = (FilterRule *)rule; + rule_context_add_rule (data->f, (FilterRule *)rule); + + set_sensitive (data); + gtk_widget_destroy (gd); + } + } else { + gtk_widget_destroy (gd); + gtk_object_unref (GTK_OBJECT (rule)); + done = TRUE; + } } } @@ -199,6 +224,7 @@ rule_edit (GtkWidget *widget, struct _editor_data *data) int result; GtkWidget *gd; FilterRule *rule; + gboolean done = FALSE; int pos; d(printf ("edit rule\n")); @@ -213,17 +239,43 @@ rule_edit (GtkWidget *widget, struct _editor_data *data) gtk_widget_show (gd); - result = gnome_dialog_run_and_close (GNOME_DIALOG (gd)); - - if (result == 0) { - 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 (GTK_WIDGET (item), data->current->name); - gtk_label_set_text (GTK_LABEL (GTK_BIN (item)->child), s); - g_free (s); + while (!done) { + result = gnome_dialog_run (GNOME_DIALOG (gd)); + + if (result == 0) { + GList *parts; + + done = TRUE; + + /* validate rule parts */ + parts = rule->parts; + while (parts && done) { + done = filter_part_validate ((FilterPart *) parts->data); + parts = parts->next; + } + + /* validate action parts */ + parts = ((FilterFilter *)rule)->actions; + while (parts && done) { + done = filter_part_validate ((FilterPart *) parts->data); + parts = parts->next; + } + + if (done) { + 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 (GTK_WIDGET (item), data->current->name); + gtk_label_set_text (GTK_LABEL (GTK_BIN (item)->child), s); + g_free (s); + } + gtk_widget_destroy (gd); + } + } else { + gtk_widget_destroy (gd); + done = TRUE; } - } + } } static void @@ -233,7 +285,7 @@ rule_delete (GtkWidget *widget, struct _editor_data *data) GList *l; GtkListItem *item; - d(printf("ddelete rule\n")); + d(printf("delete rule\n")); pos = rule_context_get_rank_rule(data->f, data->current, data->current_source); if (pos != -1) { rule_context_remove_rule (data->f, data->current); |