From 9ac34f6010a778f6f33f995b1ed877bbce37564c Mon Sep 17 00:00:00 2001 From: Sascha Kruse Date: Sun, 18 Mar 2012 07:04:12 +0100 Subject: [PATCH] make rules linked list instead of array --- config.def.h | 15 --------------- dunst.c | 44 +++++++++++++++++++++++++++++++++----------- dunst.h | 2 ++ 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/config.def.h b/config.def.h index 3b35019..0f488a8 100644 --- a/config.def.h +++ b/config.def.h @@ -36,19 +36,4 @@ KeySym mask = 0; * 3 -> print everything above + debug info */ int verbosity = 0; - -/* You can use shell-like wildcards to match and . */ -const rule_t rules[] = { - /* appname, summary, body, icon, timeout, urgency, fg, bg, format */ - { NULL, NULL, NULL, NULL, -1, -1, NULL, NULL, NULL }, - /* { "notify-send", NULL, NULL, NULL, -1, -1, NULL, NULL, "%s %b" }, */ - /* { "Pidgin", NULL, NULL, NULL, -1, -1, NULL, NULL, "%s %b" }, */ - /* { "Pidgin", "*signed on*", NULL, NULL, -1, LOW, NULL, NULL, "%s %b" }, */ - /* { "Pidgin", "*signed off*", NULL, NULL, -1, LOW, NULL, NULL, "%s %b" }, */ - /* { "Pidgin", "*says*", NULL, NULL, -1, CRIT, NULL, NULL, "%s %b" }, */ - /* { "Pidgin", "twitter.com*", NULL, NULL, -1, NORM, NULL, NULL, "%s %b" }, */ -}; - - - #endif diff --git a/dunst.c b/dunst.c index a6ac681..5263b29 100644 --- a/dunst.c +++ b/dunst.c @@ -37,6 +37,8 @@ typedef struct _screen_info { /* global variables */ + +rule_t *rules = NULL; /* index of colors fit to urgency level */ static unsigned long colors[3][ColLast]; static Atom utf8; @@ -68,6 +70,7 @@ void free_msgqueue_t(msg_queue_t *elem); void handle_mouse_click(XEvent ev); void handleXEvents(void); void initmsg(msg_queue_t *msg); +rule_t *initrule(void); char *string_replace(const char *needle, const char *replacement, char *haystack); void run(void); void setup(void); @@ -116,18 +119,20 @@ add(msg_queue_t *queue, msg_queue_t *new) { void apply_rules(msg_queue_t *msg) { - int i; - for(i = 0; i < LENGTH(rules); i++) { - if((!rules[i].appname || !fnmatch(rules[i].appname, msg->appname, 0)) - && (!rules[i].summary || !fnmatch(rules[i].summary, msg->summary, 0)) - && (!rules[i].body || !fnmatch(rules[i].body, msg->body, 0)) - && (!rules[i].icon || !fnmatch(rules[i].icon, msg->icon, 0))) { - msg->timeout = rules[i].timeout != -1 ? rules[i].timeout : msg->timeout; - msg->urgency = rules[i].urgency != -1 ? rules[i].urgency : msg->urgency; - msg->color_strings[ColFG] = rules[i].fg ? rules[i].fg : msg->color_strings[ColFG]; - msg->color_strings[ColBG] = rules[i].bg ? rules[i].bg : msg->color_strings[ColBG]; - msg->format = rules[i].format ? rules[i].format : msg->format; + rule_t *cur = rules; + while(cur != NULL) { + if((!cur->appname || !fnmatch(cur->appname, msg->appname, 0)) + && (!cur->summary || !fnmatch(cur->summary, msg->summary, 0)) + && (!cur->body || !fnmatch(cur->body, msg->body, 0)) + && (!cur->icon || !fnmatch(cur->icon, msg->icon, 0))) { + msg->timeout = cur->timeout != -1 ? cur->timeout : msg->timeout; + msg->urgency = cur->urgency != -1 ? cur->urgency : msg->urgency; + msg->color_strings[ColFG] = cur->fg ? cur->fg : msg->color_strings[ColFG]; + msg->color_strings[ColBG] = cur->bg ? cur->bg : msg->color_strings[ColBG]; + msg->format = cur->format ? cur->format : msg->format; } + + cur = cur->next; } } @@ -483,6 +488,23 @@ initmsg(msg_queue_t *msg) { } +rule_t * +initrule(void) { + rule_t *r = malloc(sizeof(rule_t)); + r->appname = NULL; + r->summary = NULL; + r->body = NULL; + r->icon = NULL; + r->timeout = -1; + r->urgency = -1; + r->fg = NULL; + r->bg = NULL; + r->format = NULL; + r->next = NULL; + + return r; +} + char * string_replace(const char *needle, const char *replacement, char *haystack) { char *tmp, *start; diff --git a/dunst.h b/dunst.h index 8a4d9f9..9151a79 100644 --- a/dunst.h +++ b/dunst.h @@ -20,6 +20,8 @@ typedef struct _rule_t { char *fg; char *bg; const char *format; + + struct _rule_t *next; } rule_t; typedef struct _msg_queue_t {