From 28278864b4eef87782918f6ad76e2f0452d16f1a Mon Sep 17 00:00:00 2001 From: Mykyta Holubakha Date: Thu, 19 Jan 2017 03:58:31 +0200 Subject: [PATCH] Support __focused__ as a valid criterion This reflects i3 behavior (see i3/i3#1770) Scrapping focused support will probably break some existing configs --- sway/criteria.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sway/criteria.c b/sway/criteria.c index 739a183e8..c4fe6eccd 100644 --- a/sway/criteria.c +++ b/sway/criteria.c @@ -205,7 +205,12 @@ static char *generate_regex(regex_t **regex, char *value) { return NULL; } -// Pouplate list with crit_tokens extracted from criteria string, returns error +// Test whether the criterion corresponds to the currently focused window +static bool crit_is_focused(const char *value) { + return !strcmp(value, "focused") || !strcmp(value, "__focused__"); +} + +// Populate list with crit_tokens extracted from criteria string, returns error // string or NULL if successful. char *extract_crit_tokens(list_t *tokens, const char * const criteria) { int argc; @@ -221,7 +226,7 @@ char *extract_crit_tokens(list_t *tokens, const char * const criteria) { if ((error = parse_criteria_name(&token->type, name))) { free_crit_token(token); goto ect_cleanup; - } else if (token->type == CRIT_URGENT || strcmp(value, "focused") == 0) { + } else if (token->type == CRIT_URGENT || crit_is_focused(value)) { sway_log(L_DEBUG, "%s -> \"%s\"", name, value); list_add(tokens, token); } else if((error = generate_regex(&token->regex, value))) { @@ -250,7 +255,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) { case CRIT_CLASS: if (!cont->class) { // ignore - } else if (strcmp(crit->raw, "focused") == 0) { + } else if (crit_is_focused(crit->raw)) { swayc_t *focused = get_focused_view(&root_container); if (focused->class && strcmp(cont->class, focused->class) == 0) { matches++; @@ -271,7 +276,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) { case CRIT_TITLE: if (!cont->name) { // ignore - } else if (strcmp(crit->raw, "focused") == 0) { + } else if (crit_is_focused(crit->raw)) { swayc_t *focused = get_focused_view(&root_container); if (focused->name && strcmp(cont->name, focused->name) == 0) { matches++; @@ -291,7 +296,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) { swayc_t *cont_ws = swayc_parent_by_type(cont, C_WORKSPACE); if (!cont_ws || !cont_ws->name) { // ignore - } else if (strcmp(crit->raw, "focused") == 0) { + } else if (crit_is_focused(crit->raw)) { swayc_t *focused_ws = swayc_active_workspace(); if (focused_ws->name && strcmp(cont_ws->name, focused_ws->name) == 0) { matches++;