X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fmatch.c;h=9ed4d434f14e7c1e86983401531d3f2db8f39068;hb=b0e871e0cfdc35f2147c4497136c5b74c9ebafe7;hp=42eba26ea9ffda46a054365f1979f10f27829821;hpb=160c12ed9a1c0ee2f30ed8f71d75fb174242eaf9;p=i3%2Fi3 diff --git a/src/match.c b/src/match.c index 42eba26e..9ed4d434 100644 --- a/src/match.c +++ b/src/match.c @@ -2,7 +2,7 @@ * vim:ts=4:sw=4:expandtab * * i3 - an improved dynamic tiling window manager - * © 2009-2010 Michael Stapelberg and contributors (see also: LICENSE) + * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE) * * A "match" is a data structure which acts like a mask or expression to match * certain windows or not. For example, when using commands, you can specify a @@ -67,7 +67,12 @@ bool match_matches_window(Match *match, i3Window *window) { } LOG("match->dock = %d, window->dock = %d\n", match->dock, window->dock); - if (match->dock != -1 && window->dock == match->dock) { + if (match->dock != -1 && + ((window->dock == W_DOCK_TOP && match->dock == M_DOCK_TOP) || + (window->dock == W_DOCK_BOTTOM && match->dock == M_DOCK_BOTTOM) || + ((window->dock == W_DOCK_TOP || window->dock == W_DOCK_BOTTOM) && + match->dock == M_DOCK_ANY) || + (window->dock == W_NODOCK && match->dock == M_NODOCK))) { LOG("match made by dock\n"); return true; } @@ -77,3 +82,19 @@ bool match_matches_window(Match *match, i3Window *window) { return false; } +/* + * Returns the first match in 'assignments' that matches the given window. + * + */ +Match *match_by_assignment(i3Window *window) { + Match *match; + + TAILQ_FOREACH(match, &assignments, assignments) { + if (!match_matches_window(match, window)) + continue; + DLOG("got a matching assignment (to %s)\n", match->target_ws); + return match; + } + + return NULL; +}