diff options
author | Martin T. H. Sandsmark <martin.sandsmark@kde.org> | 2019-10-09 12:45:10 +0200 |
---|---|---|
committer | Orestis Floros <orestisflo@gmail.com> | 2019-12-25 15:42:47 +0100 |
commit | afab4d67891337527c499c7a5618445bc223b1af (patch) | |
tree | 9ac2a5c8a2523128d4c1097c46d5e150f97b5f9e | |
parent | 942a33d0ec69a34dbaa352dcca2dcc51737f2ee0 (diff) | |
download | i3-afab4d67891337527c499c7a5618445bc223b1af.tar.gz i3-afab4d67891337527c499c7a5618445bc223b1af.zip |
Allow matching on empty properties (class, title, etc.)
Fixes #3308
-rw-r--r-- | src/match.c | 8 | ||||
-rw-r--r-- | testcases/t/119-match.t | 18 |
2 files changed, 18 insertions, 8 deletions
diff --git a/src/match.c b/src/match.c index 83e37327..f65d8059 100644 --- a/src/match.c +++ b/src/match.c @@ -92,11 +92,9 @@ bool match_matches_window(Match *match, i3Window *window) { #define CHECK_WINDOW_FIELD(match_field, window_field, type) \ do { \ if (match->match_field != NULL) { \ - if (window->window_field == NULL) { \ - return false; \ - } \ - \ - const char *window_field_str = GET_FIELD_##type(window->window_field); \ + const char *window_field_str = window->window_field == NULL \ + ? "" \ + : GET_FIELD_##type(window->window_field); \ if (strcmp(match->match_field->pattern, "__focused__") == 0 && \ focused && focused->window && focused->window->window_field && \ strcmp(window_field_str, GET_FIELD_##type(focused->window->window_field)) == 0) { \ diff --git a/testcases/t/119-match.t b/testcases/t/119-match.t index 64ffa4ed..65c41f1f 100644 --- a/testcases/t/119-match.t +++ b/testcases/t/119-match.t @@ -33,9 +33,7 @@ my $win = $content->[0]; # not match it ###################################################################### # TODO: specify more match types -# we can match on any (non-empty) class here since that window does not have -# WM_CLASS set -cmd q|[class=".*"] kill|; +# Try matching with an empty pattern since there isn't a WM_CLASS set. cmd q|[con_id="99999"] kill|; is_num_children($tmp, 1, 'window still there'); @@ -103,4 +101,18 @@ cmd '[title="^\w [3]$"] kill'; wait_for_unmap $left; is_num_children($tmp, 0, 'window killed'); +###################################################################### +# check that we can match empty properties +###################################################################### + +$tmp = fresh_workspace; + +$left = open_window(name => 'class is empty', wm_class => ''); +ok($left->mapped, 'left window mapped'); +is_num_children($tmp, 1, 'window opened'); + +cmd '[class="^$"] kill'; +wait_for_unmap $left; +is_num_children($tmp, 0, 'window killed'); + done_testing; |