aboutsummaryrefslogtreecommitdiff
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorJohan Sköld <git@johan.skold.cc>2023-09-01 21:28:09 -0700
committerSimon Ser <contact@emersion.fr>2023-09-07 10:42:54 +0900
commitd952ce403e63a1d91f07b72d971500d583609223 (patch)
tree21782cf134499ebc3d4fffd41c50a582adb55990 /sway/criteria.c
parent3dd2f4a67fb2ac45f336f075779cc3bccec2aac3 (diff)
i3 compat: Adding support for the `all` criteria
Matches all views. i3 PR: https://github.com/i3/i3/pull/4460 Fixes #7110
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index d7326bea..78ea8b8a 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -19,6 +19,7 @@
bool criteria_is_empty(struct criteria *criteria) {
return !criteria->title
&& !criteria->shell
+ && !criteria->all
&& !criteria->app_id
&& !criteria->con_mark
&& !criteria->con_id
@@ -456,6 +457,7 @@ static enum atom_name parse_window_type(const char *type) {
#endif
enum criteria_token {
+ T_ALL,
T_APP_ID,
T_CON_ID,
T_CON_MARK,
@@ -478,7 +480,9 @@ enum criteria_token {
};
static enum criteria_token token_from_name(char *name) {
- if (strcmp(name, "app_id") == 0) {
+ if (strcmp(name, "all") == 0) {
+ return T_ALL;
+ } else if (strcmp(name, "app_id") == 0) {
return T_APP_ID;
} else if (strcmp(name, "con_id") == 0) {
return T_CON_ID;
@@ -524,8 +528,8 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
return false;
}
- // Require value, unless token is floating or tiled
- if (!value && token != T_FLOATING && token != T_TILING) {
+ // Require value, unless token is all, floating or tiled
+ if (!value && token != T_ALL && token != T_FLOATING && token != T_TILING) {
const char *fmt = "Token '%s' requires a value";
int len = strlen(fmt) + strlen(name) - 1;
error = malloc(len);
@@ -535,6 +539,9 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
char *endptr = NULL;
switch (token) {
+ case T_ALL:
+ criteria->all = true;
+ break;
case T_TITLE:
pattern_create(&criteria->title, value);
break;