summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2017-01-18 22:54:19 -0500
committerLibravatar GitHub <noreply@github.com>2017-01-18 22:54:19 -0500
commit7cc6f288d9cdb85eead948f78237848b2d479004 (patch)
tree9c2767b010da4451f53491356c7fee1ab53a6c74
parentMerge pull request #1052 from Hummer12007/instance (diff)
parentSupport __focused__ as a valid criterion (diff)
downloadsway-7cc6f288d9cdb85eead948f78237848b2d479004.tar.gz
sway-7cc6f288d9cdb85eead948f78237848b2d479004.tar.zst
sway-7cc6f288d9cdb85eead948f78237848b2d479004.zip
Merge pull request #1053 from Hummer12007/__focused__
Support __focused__ as a valid criterion
-rw-r--r--sway/criteria.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index fd1ea64b..5c305193 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -204,7 +204,12 @@ static char *generate_regex(regex_t **regex, char *value) {
204 return NULL; 204 return NULL;
205} 205}
206 206
207// Pouplate list with crit_tokens extracted from criteria string, returns error 207// Test whether the criterion corresponds to the currently focused window
208static bool crit_is_focused(const char *value) {
209 return !strcmp(value, "focused") || !strcmp(value, "__focused__");
210}
211
212// Populate list with crit_tokens extracted from criteria string, returns error
208// string or NULL if successful. 213// string or NULL if successful.
209char *extract_crit_tokens(list_t *tokens, const char * const criteria) { 214char *extract_crit_tokens(list_t *tokens, const char * const criteria) {
210 int argc; 215 int argc;
@@ -220,7 +225,7 @@ char *extract_crit_tokens(list_t *tokens, const char * const criteria) {
220 if ((error = parse_criteria_name(&token->type, name))) { 225 if ((error = parse_criteria_name(&token->type, name))) {
221 free_crit_token(token); 226 free_crit_token(token);
222 goto ect_cleanup; 227 goto ect_cleanup;
223 } else if (token->type == CRIT_URGENT || strcmp(value, "focused") == 0) { 228 } else if (token->type == CRIT_URGENT || crit_is_focused(value)) {
224 sway_log(L_DEBUG, "%s -> \"%s\"", name, value); 229 sway_log(L_DEBUG, "%s -> \"%s\"", name, value);
225 list_add(tokens, token); 230 list_add(tokens, token);
226 } else if((error = generate_regex(&token->regex, value))) { 231 } else if((error = generate_regex(&token->regex, value))) {
@@ -249,7 +254,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
249 case CRIT_CLASS: 254 case CRIT_CLASS:
250 if (!cont->class) { 255 if (!cont->class) {
251 // ignore 256 // ignore
252 } else if (strcmp(crit->raw, "focused") == 0) { 257 } else if (crit_is_focused(crit->raw)) {
253 swayc_t *focused = get_focused_view(&root_container); 258 swayc_t *focused = get_focused_view(&root_container);
254 if (focused->class && strcmp(cont->class, focused->class) == 0) { 259 if (focused->class && strcmp(cont->class, focused->class) == 0) {
255 matches++; 260 matches++;
@@ -280,7 +285,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
280 case CRIT_TITLE: 285 case CRIT_TITLE:
281 if (!cont->name) { 286 if (!cont->name) {
282 // ignore 287 // ignore
283 } else if (strcmp(crit->raw, "focused") == 0) { 288 } else if (crit_is_focused(crit->raw)) {
284 swayc_t *focused = get_focused_view(&root_container); 289 swayc_t *focused = get_focused_view(&root_container);
285 if (focused->name && strcmp(cont->name, focused->name) == 0) { 290 if (focused->name && strcmp(cont->name, focused->name) == 0) {
286 matches++; 291 matches++;
@@ -300,7 +305,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
300 swayc_t *cont_ws = swayc_parent_by_type(cont, C_WORKSPACE); 305 swayc_t *cont_ws = swayc_parent_by_type(cont, C_WORKSPACE);
301 if (!cont_ws || !cont_ws->name) { 306 if (!cont_ws || !cont_ws->name) {
302 // ignore 307 // ignore
303 } else if (strcmp(crit->raw, "focused") == 0) { 308 } else if (crit_is_focused(crit->raw)) {
304 swayc_t *focused_ws = swayc_active_workspace(); 309 swayc_t *focused_ws = swayc_active_workspace();
305 if (focused_ws->name && strcmp(cont_ws->name, focused_ws->name) == 0) { 310 if (focused_ws->name && strcmp(cont_ws->name, focused_ws->name) == 0) {
306 matches++; 311 matches++;