Match on all criteria even if con_id or con_mark are given.
Previously, if a match specification contained the con_id or con_mark criterion, all other criteria were ignored. However, a user may want to specify one of those two unique identifiers and still specify others as well, for example to match the currently focused window, but only if it has a certain WM_CLASS: [con_id=__focused__ class=special] kill We now check all specified criteria. fixes #2111
This commit is contained in:
22
src/match.c
22
src/match.c
@ -223,11 +223,25 @@ bool match_matches_window(Match *match, i3Window *window) {
|
||||
}
|
||||
}
|
||||
|
||||
/* We don’t check the mark because this function is not even called when
|
||||
* the mark would have matched - it is checked in cmdparse.y itself */
|
||||
if (match->mark != NULL) {
|
||||
LOG("mark does not match\n");
|
||||
return false;
|
||||
if ((con = con_by_window_id(window->id)) == NULL)
|
||||
return false;
|
||||
|
||||
bool matched = false;
|
||||
mark_t *mark;
|
||||
TAILQ_FOREACH(mark, &(con->marks_head), marks) {
|
||||
if (regex_matches(match->mark, mark->name)) {
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (matched) {
|
||||
LOG("mark matches\n");
|
||||
} else {
|
||||
LOG("mark does not match\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
Reference in New Issue
Block a user