diff --git a/sway/criteria.c b/sway/criteria.c index dd995c4b..2fa9878b 100644 --- a/sway/criteria.c +++ b/sway/criteria.c @@ -361,8 +361,17 @@ static char *get_focused_prop(enum criteria_token token) { } } break; - case T_CON_ID: // These do not support __focused__ - case T_CON_MARK: + case T_CON_ID: + if (view->swayc == NULL) { + return NULL; + } + size_t id = view->swayc->id; + int len = snprintf(NULL, 0, "%zu", id) + 1; + char *id_str = malloc(len); + snprintf(id_str, len, "%zu", id); + value = id_str; + break; + case T_CON_MARK: // These do not support __focused__ case T_FLOATING: #ifdef HAVE_XWAYLAND case T_ID: @@ -425,7 +434,7 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) { case T_CON_ID: criteria->con_id = strtoul(effective_value, &endptr, 10); if (*endptr != 0) { - error = strdup("The value for 'con_id' should be numeric"); + error = strdup("The value for 'con_id' should be '__focused__' or numeric"); } break; case T_CON_MARK: diff --git a/sway/sway.5.scd b/sway/sway.5.scd index 2d35f5d0..b639653a 100644 --- a/sway/sway.5.scd +++ b/sway/sway.5.scd @@ -582,7 +582,9 @@ The following attributes may be matched with: the currently focused window. *con\_id* - Compare against the internal container ID, which you can find via IPC. + Compare against the internal container ID, which you can find via IPC. If + value is \_\_focused\_\_, then the id must be the same as that of the + currently focused window. *con\_mark* Compare against the window marks. Can be a regular expression.