[evolution] port filter/ classes over to new EError API



commit 193625ae674a7dfd8a80c0ffeab390e6fcb65856
Author: Jonathon Jongsma <jonathon quotidian org>
Date:   Tue Nov 24 16:34:24 2009 -0600

    port filter/ classes over to new EError API
    
    https://bugzilla.gnome.org/show_bug.cgi?id=602963

 filter/e-filter-datespec.c |    7 +++++--
 filter/e-filter-element.c  |   12 +++---------
 filter/e-filter-element.h  |    5 +++--
 filter/e-filter-file.c     |   13 ++++++++-----
 filter/e-filter-input.c    |   29 +++++++++++++++++------------
 filter/e-filter-part.c     |    4 ++--
 filter/e-filter-part.h     |    2 +-
 filter/e-filter-rule.c     |   17 +++++++++++------
 filter/e-filter-rule.h     |    4 ++--
 filter/e-rule-context.c    |   11 +++++++----
 filter/e-rule-editor.c     |   20 ++++++++++++++------
 11 files changed, 73 insertions(+), 51 deletions(-)
---
diff --git a/filter/e-filter-datespec.c b/filter/e-filter-datespec.c
index f395bf9..f85de14 100644
--- a/filter/e-filter-datespec.c
+++ b/filter/e-filter-datespec.c
@@ -299,14 +299,17 @@ button_clicked (GtkButton *button, EFilterDatespec *fds)
 
 static gboolean
 filter_datespec_validate (EFilterElement *element,
-                          GtkWindow *error_parent)
+                          EError **error)
 {
 	EFilterDatespec *fds = E_FILTER_DATESPEC (element);
 	gboolean valid;
 
+	g_warn_if_fail (error == NULL || *error == NULL);
+
 	valid = fds->type != FDST_UNKNOWN;
 	if (!valid) {
-		e_error_run (error_parent, "filter:no-date", NULL);
+		if (error)
+			*error = e_error_new ("filter:no-date", NULL);
 	}
 
 	return valid;
diff --git a/filter/e-filter-element.c b/filter/e-filter-element.c
index 707692e..2165ea2 100644
--- a/filter/e-filter-element.c
+++ b/filter/e-filter-element.c
@@ -42,7 +42,7 @@ static gpointer parent_class;
 
 static gboolean
 filter_element_validate (EFilterElement *element,
-                         GtkWindow *error_parent)
+                         EError **error)
 {
 	return TRUE;
 }
@@ -249,22 +249,16 @@ e_filter_element_new (void)
 
 gboolean
 e_filter_element_validate (EFilterElement *element,
-                           GtkWindow *error_parent)
+                           EError **error)
 {
 	EFilterElementClass *class;
 
 	g_return_val_if_fail (E_IS_FILTER_ELEMENT (element), FALSE);
 
-	/* Warn but proceed if no parent window was given. */
-	if (error_parent != NULL)
-		g_return_val_if_fail (GTK_IS_WINDOW (error_parent), FALSE);
-	else
-		g_warning ("%s() called with no parent window", G_STRFUNC);
-
 	class = E_FILTER_ELEMENT_GET_CLASS (element);
 	g_return_val_if_fail (class->validate != NULL, FALSE);
 
-	return class->validate (element, error_parent);
+	return class->validate (element, error);
 }
 
 gint
diff --git a/filter/e-filter-element.h b/filter/e-filter-element.h
index 589d3a4..e7abc77 100644
--- a/filter/e-filter-element.h
+++ b/filter/e-filter-element.h
@@ -27,6 +27,7 @@
 #include <gtk/gtk.h>
 #include <libxml/parser.h>
 #include <libxml/xmlmemory.h>
+#include <e-util/e-error.h>
 
 #define E_TYPE_FILTER_ELEMENT \
 	(e_filter_element_get_type ())
@@ -68,7 +69,7 @@ struct _EFilterElementClass {
 	GObjectClass parent_class;
 
 	gboolean	(*validate)		(EFilterElement *element,
-						 GtkWindow *error_parent);
+						 EError **error);
 	gint		(*eq)			(EFilterElement *element_a,
 						 EFilterElement *element_b);
 
@@ -95,7 +96,7 @@ EFilterElement	*e_filter_element_new		(void);
 void		e_filter_element_set_data	(EFilterElement *element,
 						 gpointer data);
 gboolean	e_filter_element_validate	(EFilterElement *element,
-						 GtkWindow *error_parent);
+						 EError **error);
 gint		e_filter_element_eq		(EFilterElement *element_a,
 						 EFilterElement *element_b);
 void		e_filter_element_xml_create	(EFilterElement *element,
diff --git a/filter/e-filter-file.c b/filter/e-filter-file.c
index 6364475..b518f91 100644
--- a/filter/e-filter-file.c
+++ b/filter/e-filter-file.c
@@ -65,12 +65,15 @@ filter_file_finalize (GObject *object)
 
 static gboolean
 filter_file_validate (EFilterElement *element,
-                      GtkWindow *error_parent)
+                      EError **error)
 {
 	EFilterFile *file = E_FILTER_FILE (element);
 
+	g_warn_if_fail (error == NULL || *error == NULL);
+
 	if (!file->path) {
-		e_error_run (error_parent, "filter:no-file", NULL);
+		if (error)
+			*error = e_error_new ("filter:no-file", NULL);
 		return FALSE;
 	}
 
@@ -78,9 +81,9 @@ filter_file_validate (EFilterElement *element,
 
 	if (g_strcmp0 (file->type, "file") == 0) {
 		if (!g_file_test (file->path, G_FILE_TEST_IS_REGULAR)) {
-			e_error_run (
-				error_parent, "filter:bad-file",
-				file->path, NULL);
+			if (error)
+				*error = e_error_new ( "filter:bad-file",
+						       file->path, NULL);
 			return FALSE;
 		}
 	} else if (g_strcmp0 (file->type, "command") == 0) {
diff --git a/filter/e-filter-input.c b/filter/e-filter-input.c
index a8d6123..9166d92 100644
--- a/filter/e-filter-input.c
+++ b/filter/e-filter-input.c
@@ -70,11 +70,13 @@ filter_input_finalize (GObject *object)
 
 static gboolean
 filter_input_validate (EFilterElement *element,
-                       GtkWindow *error_parent)
+                       EError **error)
 {
 	EFilterInput *input = E_FILTER_INPUT (element);
 	gboolean valid = TRUE;
 
+	g_warn_if_fail (error == NULL || *error == NULL);
+
 	if (input->values && !strcmp (input->type, "regex")) {
 		const gchar *pattern;
 		regex_t regexpat;
@@ -83,17 +85,20 @@ filter_input_validate (EFilterElement *element,
 		pattern = input->values->data;
 
 		if ((regerr = regcomp (&regexpat, pattern, REG_EXTENDED | REG_NEWLINE | REG_ICASE))) {
-			gsize reglen;
-			gchar *regmsg;
-
-			/* regerror gets called twice to get the full error string
-			   length to do proper posix error reporting */
-			reglen = regerror (regerr, &regexpat, 0, 0);
-			regmsg = g_malloc0 (reglen + 1);
-			regerror (regerr, &regexpat, regmsg, reglen);
-
-			e_error_run (error_parent, "filter:bad-regexp", pattern, regmsg, NULL);
-			g_free (regmsg);
+			if (error) {
+				gsize reglen;
+				gchar *regmsg;
+
+				/* regerror gets called twice to get the full error string
+				   length to do proper posix error reporting */
+				reglen = regerror (regerr, &regexpat, 0, 0);
+				regmsg = g_malloc0 (reglen + 1);
+				regerror (regerr, &regexpat, regmsg, reglen);
+
+				*error = e_error_new ("filter:bad-regexp",
+						      pattern, regmsg, NULL);
+				g_free (regmsg);
+			}
 
 			valid = FALSE;
 		}
diff --git a/filter/e-filter-part.c b/filter/e-filter-part.c
index 50d6d13..3128f58 100644
--- a/filter/e-filter-part.c
+++ b/filter/e-filter-part.c
@@ -105,7 +105,7 @@ e_filter_part_new (void)
 
 gboolean
 e_filter_part_validate (EFilterPart *part,
-                        GtkWindow *error_parent)
+                        EError **error)
 {
 	GList *link;
 
@@ -115,7 +115,7 @@ e_filter_part_validate (EFilterPart *part,
 	for (link = part->elements; link != NULL; link = g_list_next (link)) {
 		EFilterElement *element = link->data;
 
-		if (!e_filter_element_validate (element, error_parent))
+		if (!e_filter_element_validate (element, error))
 			return FALSE;
 	}
 
diff --git a/filter/e-filter-part.h b/filter/e-filter-part.h
index 697cf8f..fe1f3cc 100644
--- a/filter/e-filter-part.h
+++ b/filter/e-filter-part.h
@@ -71,7 +71,7 @@ struct _EFilterPartClass {
 GType		e_filter_part_get_type		(void);
 EFilterPart *	e_filter_part_new		(void);
 gboolean	e_filter_part_validate		(EFilterPart *part,
-						 GtkWindow *error_parent);
+						 EError **error);
 gint		e_filter_part_eq		(EFilterPart *part_a,
 						 EFilterPart *part_b);
 gint		e_filter_part_xml_create	(EFilterPart *part,
diff --git a/filter/e-filter-rule.c b/filter/e-filter-rule.c
index f60230d..fb496a5 100644
--- a/filter/e-filter-rule.c
+++ b/filter/e-filter-rule.c
@@ -239,11 +239,14 @@ more_parts (GtkWidget *button,
 	if (data->rule->parts) {
 		EFilterPart *part;
 		GList *l;
+		EError *error = NULL;
 
 		l = g_list_last (data->rule->parts);
 		part = l->data;
-		if (!e_filter_part_validate (part, GTK_WINDOW (gtk_widget_get_toplevel (button))))
+		if (!e_filter_part_validate (part, &error)) {
+			e_error_run_dialog (GTK_WINDOW (gtk_widget_get_toplevel (button)), error);
 			return;
+		}
 	}
 
 	/* create a new rule entry, use the first type of rule */
@@ -353,13 +356,15 @@ filter_rule_finalize (GObject *object)
 
 static gint
 filter_rule_validate (EFilterRule *rule,
-                      GtkWindow *error_parent)
+                      EError **error)
 {
 	gint valid = TRUE;
 	GList *parts;
 
+	g_warn_if_fail (error == NULL || *error == NULL);
 	if (!rule->name || !*rule->name) {
-		e_error_run (error_parent, "filter:no-name", NULL);
+		if (error)
+			*error = e_error_new ("filter:no-name", NULL);
 
 		return FALSE;
 	}
@@ -368,7 +373,7 @@ filter_rule_validate (EFilterRule *rule,
 	parts = rule->parts;
 	valid = parts != NULL;
 	while (parts && valid) {
-		valid = e_filter_part_validate ((EFilterPart *) parts->data, error_parent);
+		valid = e_filter_part_validate ((EFilterPart *) parts->data, error);
 		parts = parts->next;
 	}
 
@@ -907,7 +912,7 @@ e_filter_rule_set_source (EFilterRule *rule,
 
 gint
 e_filter_rule_validate (EFilterRule *rule,
-                        GtkWindow *error_parent)
+                        EError **error)
 {
 	EFilterRuleClass *class;
 
@@ -916,7 +921,7 @@ e_filter_rule_validate (EFilterRule *rule,
 	class = E_FILTER_RULE_GET_CLASS (rule);
 	g_return_val_if_fail (class->validate != NULL, FALSE);
 
-	return class->validate (rule, error_parent);
+	return class->validate (rule, error);
 }
 
 gint
diff --git a/filter/e-filter-rule.h b/filter/e-filter-rule.h
index c84cdef..5f0c9a5 100644
--- a/filter/e-filter-rule.h
+++ b/filter/e-filter-rule.h
@@ -96,7 +96,7 @@ struct _EFilterRuleClass {
 
 	/* virtual methods */
 	gint		(*validate)		(EFilterRule *rule,
-						 GtkWindow *error_parent);
+						 EError **error);
 	gint		(*eq)			(EFilterRule *rule_a,
 						 EFilterRule *rule_b);
 
@@ -126,7 +126,7 @@ void		e_filter_rule_set_name		(EFilterRule *rule,
 void		e_filter_rule_set_source	(EFilterRule *rule,
 						 const gchar *source);
 gint		e_filter_rule_validate		(EFilterRule *rule,
-						 GtkWindow *error_parent);
+						 EError **error);
 gint		e_filter_rule_eq		(EFilterRule *rule_a,
 						 EFilterRule *rule_b);
 xmlNodePtr	e_filter_rule_xml_encode	(EFilterRule *rule);
diff --git a/filter/e-rule-context.c b/filter/e-rule-context.c
index 5366858..67a1df2 100644
--- a/filter/e-rule-context.c
+++ b/filter/e-rule-context.c
@@ -92,14 +92,17 @@ new_rule_response (GtkWidget *dialog,
 	if (button == GTK_RESPONSE_OK) {
 		EFilterRule *rule = g_object_get_data ((GObject *) dialog, "rule");
 		gchar *user = g_object_get_data ((GObject *) dialog, "path");
+		EError *error = NULL;
 
-		if (!e_filter_rule_validate (rule, GTK_WINDOW (dialog))) {
-			/* no need to popup a dialog because the validate code does that. */
-			return;
+		if (!e_filter_rule_validate (rule, &error)) {
+			e_error_run_dialog (GTK_WINDOW (dialog), error);
+			e_error_free (error);
 		}
 
 		if (e_rule_context_find_rule (context, rule->name, rule->source)) {
-			e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", rule->name, NULL);
+			e_error_run_dialog_for_args ((GtkWindow *)dialog,
+						     "filter:bad-name-notunique",
+						     rule->name, NULL);
 
 			return;
 		}
diff --git a/filter/e-rule-editor.c b/filter/e-rule-editor.c
index fe4c1e1..a919fad 100644
--- a/filter/e-rule-editor.c
+++ b/filter/e-rule-editor.c
@@ -143,13 +143,17 @@ add_editor_response (GtkWidget *dialog, gint button, ERuleEditor *editor)
 	GtkTreeIter iter;
 
 	if (button == GTK_RESPONSE_OK) {
-		if (!e_filter_rule_validate (editor->edit, GTK_WINDOW (dialog))) {
-			/* no need to popup a dialog because the validate code does that. */
+		EError *error = NULL;
+		if (!e_filter_rule_validate (editor->edit, &error)) {
+			e_error_run_dialog (GTK_WINDOW (dialog), error);
+			e_error_free (error);
 			return;
 		}
 
 		if (e_rule_context_find_rule (editor->context, editor->edit->name, editor->edit->source)) {
-			e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", editor->edit->name, NULL);
+			e_error_run_dialog_for_args ((GtkWindow *)dialog,
+						     "filter:bad-name-notunique",
+						     editor->edit->name, NULL);
 			return;
 		}
 
@@ -287,14 +291,18 @@ edit_editor_response (GtkWidget *dialog, gint button, ERuleEditor *editor)
 	gint pos;
 
 	if (button == GTK_RESPONSE_OK) {
-		if (!e_filter_rule_validate (editor->edit, GTK_WINDOW (dialog))) {
-			/* no need to popup a dialog because the validate code does that. */
+		EError *error = NULL;
+		if (!e_filter_rule_validate (editor->edit, &error)) {
+			e_error_run_dialog (GTK_WINDOW (dialog), error);
+			e_error_free (error);
 			return;
 		}
 
 		rule = e_rule_context_find_rule (editor->context, editor->edit->name, editor->edit->source);
 		if (rule != NULL && rule != editor->current) {
-			e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", rule->name, NULL);
+			e_error_run_dialog_for_args ((GtkWindow *)dialog,
+						     "filter:bad-name-notunique",
+						     rule->name, NULL);
 
 			return;
 		}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]