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