diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c index 2fe6068b..153a7a15 100644 --- a/src/fe-common/core/hilight-text.c +++ b/src/fe-common/core/hilight-text.c @@ -244,8 +244,11 @@ HILIGHT_REC *hilight_match(SERVER_REC *server, const char *channel, GSList *tmp; CHANNEL_REC *chanrec; NICK_REC *nickrec; + HILIGHT_REC *tmprec; + int priority = -1; g_return_val_if_fail(str != NULL, NULL); + tmprec = NULL; if ((never_hilight_level & level) == level) return NULL; @@ -270,15 +273,17 @@ HILIGHT_REC *hilight_match(SERVER_REC *server, const char *channel, for (tmp = hilights; tmp != NULL; tmp = tmp->next) { HILIGHT_REC *rec = tmp->data; - if (!rec->nickmask && hilight_match_level(rec, level) && - hilight_match_channel(rec, channel) && - (rec->servertag == NULL || - (server != NULL && g_ascii_strcasecmp(rec->servertag, server->tag) == 0)) && - hilight_match_text(rec, str, match_beg, match_end)) - return rec; + if (rec->priority > priority && !rec->nickmask && hilight_match_level(rec, level) && + hilight_match_channel(rec, channel) && + (rec->servertag == NULL || + (server != NULL && g_ascii_strcasecmp(rec->servertag, server->tag) == 0)) && + hilight_match_text(rec, str, match_beg, match_end)) { + tmprec = rec; + priority = rec->priority; + } } - return NULL; + return tmprec; } static char *hilight_get_act_color(HILIGHT_REC *rec) @@ -670,6 +675,7 @@ static void hilight_nick_cache(GHashTable *list, CHANNEL_REC *channel, HILIGHT_REC *match; char *nickmask; int len, best_match; + int priority = -1; if (nick->host == NULL) return; /* don't check until host is known */ @@ -680,11 +686,12 @@ static void hilight_nick_cache(GHashTable *list, CHANNEL_REC *channel, for (tmp = hilights; tmp != NULL; tmp = tmp->next) { HILIGHT_REC *rec = tmp->data; - if (rec->nickmask && - hilight_match_channel(rec, channel->name) && - match_wildcards(rec->text, nickmask)) { + if (rec->priority > priority && rec->nickmask && + hilight_match_channel(rec, channel->name) && + match_wildcards(rec->text, nickmask)) { len = strlen(rec->text); if (best_match < len) { + priority = rec->priority; best_match = len; match = rec; }