diff options
Diffstat (limited to 'sway/criteria.c')
-rw-r--r-- | sway/criteria.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sway/criteria.c b/sway/criteria.c index 2c8e1644..02b04fc8 100644 --- a/sway/criteria.c +++ b/sway/criteria.c | |||
@@ -31,7 +31,8 @@ bool criteria_is_empty(struct criteria *criteria) { | |||
31 | && !criteria->floating | 31 | && !criteria->floating |
32 | && !criteria->tiling | 32 | && !criteria->tiling |
33 | && !criteria->urgent | 33 | && !criteria->urgent |
34 | && !criteria->workspace; | 34 | && !criteria->workspace |
35 | && !criteria->pid; | ||
35 | } | 36 | } |
36 | 37 | ||
37 | // The error pointer is used for parsing functions, and saves having to pass it | 38 | // The error pointer is used for parsing functions, and saves having to pass it |
@@ -370,6 +371,12 @@ static bool criteria_matches_view(struct criteria *criteria, | |||
370 | } | 371 | } |
371 | } | 372 | } |
372 | 373 | ||
374 | if (criteria->pid) { | ||
375 | if (criteria->pid != view->pid) { | ||
376 | return false; | ||
377 | } | ||
378 | } | ||
379 | |||
373 | return true; | 380 | return true; |
374 | } | 381 | } |
375 | 382 | ||
@@ -458,6 +465,7 @@ enum criteria_token { | |||
458 | T_TITLE, | 465 | T_TITLE, |
459 | T_URGENT, | 466 | T_URGENT, |
460 | T_WORKSPACE, | 467 | T_WORKSPACE, |
468 | T_PID, | ||
461 | 469 | ||
462 | T_INVALID, | 470 | T_INVALID, |
463 | }; | 471 | }; |
@@ -493,6 +501,8 @@ static enum criteria_token token_from_name(char *name) { | |||
493 | return T_TILING; | 501 | return T_TILING; |
494 | } else if (strcmp(name, "floating") == 0) { | 502 | } else if (strcmp(name, "floating") == 0) { |
495 | return T_FLOATING; | 503 | return T_FLOATING; |
504 | } else if (strcmp(name, "pid") == 0) { | ||
505 | return T_PID; | ||
496 | } | 506 | } |
497 | return T_INVALID; | 507 | return T_INVALID; |
498 | } | 508 | } |
@@ -587,6 +597,12 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) { | |||
587 | case T_WORKSPACE: | 597 | case T_WORKSPACE: |
588 | pattern_create(&criteria->workspace, value); | 598 | pattern_create(&criteria->workspace, value); |
589 | break; | 599 | break; |
600 | case T_PID: | ||
601 | criteria->pid = strtoul(value, &endptr, 10); | ||
602 | if (*endptr != 0) { | ||
603 | error = strdup("The value for 'pid' should be numeric"); | ||
604 | } | ||
605 | break; | ||
590 | case T_INVALID: | 606 | case T_INVALID: |
591 | break; | 607 | break; |
592 | } | 608 | } |