aboutsummaryrefslogtreecommitdiff
path: root/sway/criteria.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c22
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;