diff options
Diffstat (limited to 'sway/criteria.c')
-rw-r--r-- | sway/criteria.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sway/criteria.c b/sway/criteria.c index e2b248de..39d300ea 100644 --- a/sway/criteria.c +++ b/sway/criteria.c @@ -10,6 +10,7 @@ #include "stringop.h" #include "list.h" #include "log.h" +#include "config.h" bool criteria_is_empty(struct criteria *criteria) { return !criteria->title @@ -19,7 +20,9 @@ bool criteria_is_empty(struct criteria *criteria) { && !criteria->instance && !criteria->con_mark && !criteria->con_id +#ifdef HAVE_XWAYLAND && !criteria->id +#endif && !criteria->window_role && !criteria->window_type && !criteria->floating @@ -127,12 +130,14 @@ static bool criteria_matches_view(struct criteria *criteria, } } +#ifdef HAVE_XWAYLAND if (criteria->id) { // X11 window ID uint32_t x11_window_id = view_get_x11_window_id(view); if (!x11_window_id || x11_window_id != criteria->id) { return false; } } +#endif if (criteria->window_role) { // TODO @@ -225,6 +230,15 @@ list_t *criteria_get_views(struct criteria *criteria) { }; container_for_each_descendant_dfs(&root_container, criteria_get_views_iterator, &data); + + // Scratchpad items which are hidden are not in the tree. + for (int i = 0; i < root_container.sway_root->scratchpad->length; ++i) { + struct sway_container *con = + root_container.sway_root->scratchpad->items[i]; + if (!con->parent) { + criteria_get_views_iterator(con, &data); + } + } return matches; } @@ -256,7 +270,9 @@ enum criteria_token { T_CON_ID, T_CON_MARK, T_FLOATING, +#ifdef HAVE_XWAYLAND T_ID, +#endif T_INSTANCE, T_SHELL, T_TILING, @@ -278,8 +294,10 @@ static enum criteria_token token_from_name(char *name) { return T_CON_ID; } else if (strcmp(name, "con_mark") == 0) { return T_CON_MARK; +#ifdef HAVE_XWAYLAND } else if (strcmp(name, "id") == 0) { return T_ID; +#endif } else if (strcmp(name, "instance") == 0) { return T_INSTANCE; } else if (strcmp(name, "shell") == 0) { @@ -346,7 +364,9 @@ static char *get_focused_prop(enum criteria_token token) { case T_CON_ID: // These do not support __focused__ case T_CON_MARK: case T_FLOATING: +#ifdef HAVE_XWAYLAND case T_ID: +#endif case T_TILING: case T_URGENT: case T_WINDOW_TYPE: @@ -417,12 +437,14 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) { case T_WINDOW_TYPE: // TODO: This is a string but will be stored as an enum or integer break; +#ifdef HAVE_XWAYLAND case T_ID: criteria->id = strtoul(effective_value, &endptr, 10); if (*endptr != 0) { error = strdup("The value for 'id' should be numeric"); } break; +#endif case T_FLOATING: criteria->floating = true; break; |