aboutsummaryrefslogtreecommitdiff
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-05-27 08:58:10 -0400
committerGitHub <noreply@github.com>2018-05-27 08:58:10 -0400
commita372852c4421d21fa4cdd70014b0174319f3c2db (patch)
tree3ea7ea85566b02169d4643f6a8d634ef0ec504f7 /sway/criteria.c
parentb350e8ec820bcea6096f733d1d0be4de15bbab09 (diff)
parente4c54b04ce90d2d051ba7343ec5b9dce1bbb6755 (diff)
downloadsway-a372852c4421d21fa4cdd70014b0174319f3c2db.tar.xz
Merge branch 'master' into xdg-shell-tiled
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index 4295cacc..dec5fed7 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -13,6 +13,7 @@
bool criteria_is_empty(struct criteria *criteria) {
return !criteria->title
+ && !criteria->shell
&& !criteria->app_id
&& !criteria->class
&& !criteria->instance
@@ -29,6 +30,7 @@ bool criteria_is_empty(struct criteria *criteria) {
void criteria_destroy(struct criteria *criteria) {
pcre_free(criteria->title);
+ pcre_free(criteria->shell);
pcre_free(criteria->app_id);
pcre_free(criteria->class);
pcre_free(criteria->instance);
@@ -53,6 +55,13 @@ static bool criteria_matches_view(struct criteria *criteria,
}
}
+ if (criteria->shell) {
+ const char *shell = view_get_shell(view);
+ if (!shell || regex_cmp(shell, criteria->shell) != 0) {
+ return false;
+ }
+ }
+
if (criteria->app_id) {
const char *app_id = view_get_app_id(view);
if (!app_id || regex_cmp(app_id, criteria->app_id) != 0) {
@@ -206,6 +215,7 @@ enum criteria_token {
T_FLOATING,
T_ID,
T_INSTANCE,
+ T_SHELL,
T_TILING,
T_TITLE,
T_URGENT,
@@ -229,6 +239,8 @@ static enum criteria_token token_from_name(char *name) {
return T_ID;
} else if (strcmp(name, "instance") == 0) {
return T_INSTANCE;
+ } else if (strcmp(name, "shell") == 0) {
+ return T_SHELL;
} else if (strcmp(name, "title") == 0) {
return T_TITLE;
} else if (strcmp(name, "urgent") == 0) {
@@ -271,6 +283,9 @@ static char *get_focused_prop(enum criteria_token token) {
case T_INSTANCE:
value = view_get_instance(view);
break;
+ case T_SHELL:
+ value = view_get_shell(view);
+ break;
case T_TITLE:
value = view_get_class(view);
break;
@@ -332,6 +347,9 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
case T_TITLE:
generate_regex(&criteria->title, effective_value);
break;
+ case T_SHELL:
+ generate_regex(&criteria->shell, effective_value);
+ break;
case T_APP_ID:
generate_regex(&criteria->app_id, effective_value);
break;