CVS: sylpheed-claws/src filtering.c,1.60.2.15,1.60.2.16 filtering.h,1.21.2.6,1.21.2.7 matcher.c,1.75.2.21,1.75.2.22 matcher_parser_lex.l,1.16.2.5,1.16.2.6 matcher_parser_parse.y,1.25.2.13,1.25.2.14 prefs_filtering.c,1.59.2.33,1.59.2.34

wwp <[email protected]>
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /cvsroot/sylpheed-claws/sylpheed-claws/src
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv2599/src

Modified Files:
      Tag: gtk2
	filtering.c filtering.h matcher.c matcher_parser_lex.l 
	matcher_parser_parse.y prefs_filtering.c 
Log Message:
2006-05-13 [wwp]	2.2.0cvs13

	* src/filtering.c
	* src/filtering.h
	* src/matcher.c
	* src/matcher_parser_lex.l
	* src/matcher_parser_parse.y
	* src/prefs_filtering.c
		new feature: provide the ability to disable filtering and processing
		rules. Patch by Fabien Vantard <[email protected]>, w/ some minor
		adaptations.

Index: filtering.c
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/filtering.c,v
retrieving revision 1.60.2.15
retrieving revision 1.60.2.16
diff -u -r1.60.2.15 -r1.60.2.16
--- filtering.c	6 Apr 2006 10:58:02 -0000	1.60.2.15
+++ filtering.c	13 May 2006 13:04:54 -0000	1.60.2.16
@@ -82,13 +82,15 @@
 	g_free(action);
 }
 
-FilteringProp * filteringprop_new(const gchar *name,
+FilteringProp * filteringprop_new(gboolean enabled,
+				  const gchar *name,
 				  MatcherList * matchers,
 				  GSList * action_list)
 {
 	FilteringProp * filtering;
 
 	filtering = g_new0(FilteringProp, 1);
+	filtering->enabled = enabled;
 	filtering->name = name ? g_strdup(name): NULL;
 	filtering->matchers = matchers;
 	filtering->action_list = action_list;
@@ -143,6 +145,7 @@
                     filteringaction_copy(filtering_action));
         }
 
+	new->enabled = src->enabled;
 	new->name = g_strdup(src->name);
 
 	return new;
@@ -469,7 +472,7 @@
 	for (l = filtering_list, final = FALSE, apply_next = FALSE; l != NULL; l = g_slist_next(l)) {
 		FilteringProp * filtering = (FilteringProp *) l->data;
 
-		if (filtering_match_condition(filtering, info)) {
+		if (filtering->enabled && filtering_match_condition(filtering, info)) {
 			apply_next = filtering_apply_rule(filtering, info, &final);
                         if (final)
                                 break;

Index: filtering.h
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/filtering.h,v
retrieving revision 1.21.2.6
retrieving revision 1.21.2.7
diff -u -r1.21.2.6 -r1.21.2.7
--- filtering.h	6 Feb 2006 19:22:08 -0000	1.21.2.6
+++ filtering.h	13 May 2006 13:04:54 -0000	1.21.2.7
@@ -36,6 +36,7 @@
 typedef struct _FilteringAction FilteringAction;
 
 struct _FilteringProp {
+	gboolean enabled;
 	gchar *name;
 	MatcherList * matchers;
 	GSList * action_list;
@@ -53,7 +54,8 @@
 FilteringAction * filteringaction_parse(gchar **str);
 gboolean filteringaction_apply_action_list (GSList *action_list, MsgInfo *info);
 
-FilteringProp * filteringprop_new(const gchar *name,
+FilteringProp * filteringprop_new(gboolean enabled,
+				  const gchar *name,
 				  MatcherList *matchers,
 				  GSList *action_list);
 void filteringprop_free(FilteringProp *prop);

Index: matcher.c
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/matcher.c,v
retrieving revision 1.75.2.21
retrieving revision 1.75.2.22
diff -u -r1.75.2.21 -r1.75.2.22
--- matcher.c	28 Apr 2006 09:21:10 -0000	1.75.2.21
+++ matcher.c	13 May 2006 13:04:54 -0000	1.75.2.22
@@ -1438,7 +1438,19 @@
 		
 		if (NULL == (filtering_str = filteringprop_to_string(prop)))
 			continue;
-				
+
+		if (prop->enabled) {
+			if (fputs("enabled ", fp) == EOF) {
+				FILE_OP_ERROR("filtering config", "fputs || fputc");
+				return;
+			}
+		} else {
+			if (fputs("disabled ", fp) == EOF) {
+				FILE_OP_ERROR("filtering config", "fputs || fputc");
+				return;
+			}
+		}
+
 		if (fputs("rulename \"", fp) == EOF) {
 			FILE_OP_ERROR("filtering config", "fputs || fputc");
 			g_free(filtering_str);

Index: matcher_parser_lex.l
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/matcher_parser_lex.l,v
retrieving revision 1.16.2.5
retrieving revision 1.16.2.6
diff -u -r1.16.2.5 -r1.16.2.6
--- matcher_parser_lex.l	21 Sep 2005 18:22:21 -0000	1.16.2.5
+++ matcher_parser_lex.l	13 May 2006 13:04:55 -0000	1.16.2.6
@@ -113,5 +113,11 @@
 rulename	{
 		return MATCHER_RULENAME;
 		}
+disabled	{
+		return MATCHER_DISABLED;
+		}
+enabled	{
+		return MATCHER_ENABLED;
+		}
 
 %%

Index: matcher_parser_parse.y
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/matcher_parser_parse.y,v
retrieving revision 1.25.2.13
retrieving revision 1.25.2.14
diff -u -r1.25.2.13 -r1.25.2.14
--- matcher_parser_parse.y	8 Feb 2006 17:23:34 -0000	1.25.2.13
+++ matcher_parser_parse.y	13 May 2006 13:04:55 -0000	1.25.2.14
@@ -43,6 +43,7 @@
 
 static GSList *matchers_list = NULL;
 
+static gboolean enabled = TRUE;
 static gchar *name = NULL;
 static MatcherList *cond;
 static GSList *action_list = NULL;
@@ -56,6 +57,7 @@
 enum {
         MATCHER_PARSE_FILE,
         MATCHER_PARSE_NO_EOL,
+	MATCHER_PARSE_ENABLED,
 	MATCHER_PARSE_NAME,
         MATCHER_PARSE_CONDITION,
         MATCHER_PARSE_FILTERING_ACTION,
@@ -279,6 +281,7 @@
 
 %start file
 
+%token MATCHER_ENABLED MATCHER_DISABLED
 %token MATCHER_RULENAME
 %token <str> MATCHER_STRING
 %token <str> MATCHER_SECTION
@@ -344,7 +347,9 @@
 ;
 
 instruction:
-name condition filtering MATCHER_EOL
+enabled name condition filtering MATCHER_EOL
+| enabled name condition filtering
+| name condition filtering MATCHER_EOL
 | name condition filtering
 {
 	if (matcher_parse_op == MATCHER_PARSE_NO_EOL)
@@ -354,6 +359,15 @@
 		YYERROR;
 	}
 }
+| enabled
+{
+	if (matcher_parse_op == MATCHER_PARSE_ENABLED)
+		YYACCEPT;
+	else {
+		matcher_parsererror("parse error enabled");
+		YYERROR;
+	}
+}
 | name
 {
 	if (matcher_parse_op == MATCHER_PARSE_NAME)
@@ -384,6 +398,17 @@
 | MATCHER_EOL
 ;
 
+enabled:
+MATCHER_ENABLED
+{
+	enabled = TRUE;
+}
+| MATCHER_DISABLED
+{
+	enabled = FALSE;
+}
+;
+
 name:
 MATCHER_RULENAME MATCHER_STRING
 {
@@ -394,8 +419,9 @@
 filtering:
 filtering_action_list
 {
-	filtering = filteringprop_new(name, cond, action_list);
-        g_free(name);
+	filtering = filteringprop_new(enabled, name, cond, action_list);
+	enabled = TRUE;
+	g_free(name);
 	name = NULL;
         if (enable_compatibility) {
                 prefs_filtering = &filtering_rules;

Index: prefs_filtering.c
===================================================================
RCS file: /cvsroot/sylpheed-claws/sylpheed-claws/src/prefs_filtering.c,v
retrieving revision 1.59.2.33
retrieving revision 1.59.2.34
diff -u -r1.59.2.33 -r1.59.2.34
--- prefs_filtering.c	6 Apr 2006 10:50:29 -0000	1.59.2.33
+++ prefs_filtering.c	13 May 2006 13:04:55 -0000	1.59.2.34
@@ -55,6 +55,7 @@
 #include "prefs_filtering_action.h"
 
 enum {
+	PREFS_FILTERING_ENABLED,
 	PREFS_FILTERING_NAME,
 	PREFS_FILTERING_RULE,
 	PREFS_FILTERING_PROP,
@@ -112,13 +113,16 @@
 static GtkListStore* prefs_filtering_create_data_store	(void);
 static gint prefs_filtering_list_view_insert_rule	(GtkListStore *list_store,
 							 gint row,
+							 gboolean enabled,
 							 const gchar *name, 
 							 const gchar *rule, 
 							 gboolean prop);
 static gchar *prefs_filtering_list_view_get_rule	(GtkWidget *list, 
 							 gint row);
-static gchar *prefs_filtering_list_view_get_rule_name	(GtkWidget *list, 
-							 gint row);
+static void prefs_filtering_list_view_get_rule_name	(GtkWidget *list, 
+							 gint row,
+							 gboolean *enabled,
+							 gchar **name);
 
 static GtkWidget *prefs_filtering_list_view_create	(void);
 static void prefs_filtering_create_list_view_columns	(GtkWidget *list_view);
@@ -644,6 +648,7 @@
 
 	/* add the place holder (New) at row 0 */
 	prefs_filtering_list_view_insert_rule(list_store, -1, 
+					      FALSE,
 					      _("(New)"),
 					      _("(New)"),
 					      FALSE);
@@ -657,6 +662,7 @@
 		subst_char(cond_str, '\t', ':');
 
 		prefs_filtering_list_view_insert_rule(list_store, -1, 
+						      prop->enabled,
 						      prop->name,
 						      cond_str, TRUE);
 		
@@ -707,10 +713,16 @@
 		/* FIXME: this strcmp() is bogus: "(New)" should never
 		 * be inserted in the storage */
 		if (strcmp(filtering_str, _("(New)")) != 0) {
-			gchar *name = prefs_filtering_list_view_get_rule_name(filtering.cond_list_view, row);
+			gboolean enabled;
+			gchar *name;
+
+			prefs_filtering_list_view_get_rule_name(
+					filtering.cond_list_view, row,
+					&enabled, &name);
 			prop = matcher_parser_get_filtering(filtering_str);
 			g_free(filtering_str);
 			if (prop) {
+				prop->enabled = enabled;
 				prop->name = name;
 				prefs_filtering = 
 					g_slist_append(prefs_filtering, prop);
@@ -729,17 +741,25 @@
 	gchar *str;
 	GtkListStore *list_store;
 	gchar *name = NULL;
-	
+	gboolean enabled = TRUE;
+
 	str = filteringprop_to_string(prop);
 	if (str == NULL)
 		return -1;
-	
-	if (prop && prop->name)
-		name = prop->name;
+
+	if (prop) {
+		if (prop->name)
+			name = prop->name;
+		enabled = prop->enabled;
+	}
 
 	list_store = GTK_LIST_STORE(gtk_tree_view_get_model(list_view));
 
-	row = prefs_filtering_list_view_insert_rule(list_store, row, name, str, prop != NULL);
+	row = prefs_filtering_list_view_insert_rule(list_store, row,
+						    enabled,
+						    name,
+						    str,
+						    prop != NULL);
 
 	g_free(str);
 
@@ -830,6 +850,7 @@
 static FilteringProp * prefs_filtering_dialog_to_filtering(gboolean alert)
 {
 	MatcherList * cond;
+	gboolean enabled = TRUE;
 	gchar * name = NULL;
 	gchar * cond_str = NULL;
 	gchar * action_str = NULL;
@@ -865,7 +886,7 @@
 		goto fail;
 	}
 
-	prop = filteringprop_new(name, cond, action_list);
+	prop = filteringprop_new(enabled, name, cond, action_list);
 
 fail:
 	g_free(name);
@@ -1128,6 +1149,7 @@
 static GtkListStore* prefs_filtering_create_data_store(void)
 {
 	return gtk_list_store_new(N_PREFS_FILTERING_COLUMNS,
+				  G_TYPE_BOOLEAN,
 				  G_TYPE_STRING,
 				  G_TYPE_STRING,
 				  G_TYPE_BOOLEAN,
@@ -1142,6 +1164,8 @@
  *\param	list_store Store to operate on
  *\param	row -1 to add a new rule to store, else change an existing
  *		row
+ *\param	enabled TRUE if rule is enabled
+ *\param	name The Name of rule
  *\param	rule String representation of rule
  *\param	prop TRUE if valid filtering rule; if FALSE it's the first
  *		entry in the store ("(New)").
@@ -1150,6 +1174,7 @@
  */
 static gint prefs_filtering_list_view_insert_rule(GtkListStore *list_store,
 						  gint row,
+						  gboolean enabled,
 						  const gchar *name,
 						  const gchar *rule,
 						  gboolean prop) 
@@ -1167,6 +1192,7 @@
 		/* append new */
 		gtk_list_store_append(list_store, &iter);
 		gtk_list_store_set(list_store, &iter, 
+				   PREFS_FILTERING_ENABLED, enabled,
 				   PREFS_FILTERING_NAME, name,
 				   PREFS_FILTERING_RULE, rule,
 				   PREFS_FILTERING_PROP, prop,
@@ -1176,6 +1202,7 @@
 	} else {
 		/* change existing */
 		gtk_list_store_set(list_store, &iter, 
+				   PREFS_FILTERING_ENABLED, enabled,
 				   PREFS_FILTERING_NAME, name,
 				   PREFS_FILTERING_RULE, rule,
 				   -1);
@@ -1203,21 +1230,21 @@
 	return result;
 }
 
-static gchar *prefs_filtering_list_view_get_rule_name(GtkWidget *list, gint row)
+static void prefs_filtering_list_view_get_rule_name(GtkWidget *list, gint row, gboolean *enabled, gchar **name)
 {	
 	GtkTreeView *list_view = GTK_TREE_VIEW(list);
 	GtkTreeModel *model = gtk_tree_view_get_model(list_view);
 	GtkTreeIter iter;
-	gchar *result = NULL;
 
-	if (!gtk_tree_model_iter_nth_child(model, &iter, NULL, row))
-		return NULL;
-	
-	gtk_tree_model_get(model, &iter, 
-			   PREFS_FILTERING_NAME, &result,
-			   -1);
-	
-	return result;
+	*enabled = TRUE;
+	*name = NULL;
+
+	if (gtk_tree_model_iter_nth_child(model, &iter, NULL, row)) {
+		gtk_tree_model_get(model, &iter, 
+				   PREFS_FILTERING_ENABLED, enabled,
+				   PREFS_FILTERING_NAME, name,
+				   -1);
+	}
 }
 
 /*!
@@ -1245,11 +1272,46 @@
 	return GTK_WIDGET(list_view);
 }
 
+static void prefs_filtering_enable_toggled(GtkCellRendererToggle *widget,
+		gchar *path,
+		GtkWidget *list_view)
+{
+	GtkTreeIter iter;
+	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list_view));
+	gboolean enabled = TRUE;
+
+	if (!gtk_tree_model_get_iter_from_string(model, &iter, path))
+		return;
+
+	gtk_tree_model_get(model, &iter,
+			   PREFS_FILTERING_ENABLED, &enabled,
+			   -1);
+
+	gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+			   PREFS_FILTERING_ENABLED, !enabled,
+			   -1);
+}
+
 static void prefs_filtering_create_list_view_columns(GtkWidget *list_view)
 {
 	GtkTreeViewColumn *column;
 	GtkCellRenderer *renderer;
 
+	renderer = gtk_cell_renderer_toggle_new();
+	g_object_set(renderer,
+		     "radio", FALSE,
+		     "activatable", TRUE,
+		     NULL);
+	column = gtk_tree_view_column_new_with_attributes
+		(_("Enable"), /* FIXME : Enable, Enabled, or 'E' ? */
+		 renderer,
+		 "active", PREFS_FILTERING_ENABLED,
+		 NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
+	g_signal_connect(G_OBJECT(renderer), "toggled",
+			 G_CALLBACK(prefs_filtering_enable_toggled),
+			 list_view);
+
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes
 		(_("Name"),



-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.