aboutsummaryrefslogtreecommitdiffstats
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorLibravatar Pascal Pascher <aur@clouddrop.de>2018-09-03 14:25:48 +0200
committerLibravatar Pascal Pascher <aur@clouddrop.de>2018-09-03 14:25:48 +0200
commit93673095f093a286a506415764f736d2dd62ebe9 (patch)
tree7d4e7f1ab5c7ec93f7dc075c75101424764641d5 /sway/criteria.c
parentfix window_type with disabled xwayland support (diff)
downloadsway-93673095f093a286a506415764f736d2dd62ebe9.tar.gz
sway-93673095f093a286a506415764f736d2dd62ebe9.tar.zst
sway-93673095f093a286a506415764f736d2dd62ebe9.zip
move criteria "instance", "class" and "window_role" inside HAVE_XWAYLAND ifdefs"
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c100
1 files changed, 50 insertions, 50 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index 4fad45bc..acc70d1b 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -18,15 +18,15 @@ bool criteria_is_empty(struct criteria *criteria) {
18 return !criteria->title 18 return !criteria->title
19 && !criteria->shell 19 && !criteria->shell
20 && !criteria->app_id 20 && !criteria->app_id
21 && !criteria->class
22 && !criteria->instance
23 && !criteria->con_mark 21 && !criteria->con_mark
24 && !criteria->con_id 22 && !criteria->con_id
25#ifdef HAVE_XWAYLAND 23#ifdef HAVE_XWAYLAND
24 && !criteria->class
26 && !criteria->id 25 && !criteria->id
26 && !criteria->instance
27 && !criteria->window_role
27 && criteria->window_type == ATOM_LAST 28 && criteria->window_type == ATOM_LAST
28#endif 29#endif
29 && !criteria->window_role
30 && !criteria->floating 30 && !criteria->floating
31 && !criteria->tiling 31 && !criteria->tiling
32 && !criteria->urgent 32 && !criteria->urgent
@@ -37,10 +37,12 @@ void criteria_destroy(struct criteria *criteria) {
37 pcre_free(criteria->title); 37 pcre_free(criteria->title);
38 pcre_free(criteria->shell); 38 pcre_free(criteria->shell);
39 pcre_free(criteria->app_id); 39 pcre_free(criteria->app_id);
40#ifdef HAVE_XWAYLAND
40 pcre_free(criteria->class); 41 pcre_free(criteria->class);
41 pcre_free(criteria->instance); 42 pcre_free(criteria->instance);
42 pcre_free(criteria->con_mark);
43 pcre_free(criteria->window_role); 43 pcre_free(criteria->window_role);
44#endif
45 pcre_free(criteria->con_mark);
44 free(criteria->workspace); 46 free(criteria->workspace);
45 free(criteria->cmdlist); 47 free(criteria->cmdlist);
46 free(criteria->raw); 48 free(criteria->raw);
@@ -115,21 +117,7 @@ static bool criteria_matches_view(struct criteria *criteria,
115 return false; 117 return false;
116 } 118 }
117 } 119 }
118 120
119 if (criteria->class) {
120 const char *class = view_get_class(view);
121 if (!class || regex_cmp(class, criteria->class) != 0) {
122 return false;
123 }
124 }
125
126 if (criteria->instance) {
127 const char *instance = view_get_instance(view);
128 if (!instance || regex_cmp(instance, criteria->instance) != 0) {
129 return false;
130 }
131 }
132
133 if (criteria->con_mark) { 121 if (criteria->con_mark) {
134 bool exists = false; 122 bool exists = false;
135 for (int i = 0; i < view->marks->length; ++i) { 123 for (int i = 0; i < view->marks->length; ++i) {
@@ -156,13 +144,25 @@ static bool criteria_matches_view(struct criteria *criteria,
156 return false; 144 return false;
157 } 145 }
158 } 146 }
159#endif 147
148 if (criteria->class) {
149 const char *class = view_get_class(view);
150 if (!class || regex_cmp(class, criteria->class) != 0) {
151 return false;
152 }
153 }
154
155 if (criteria->instance) {
156 const char *instance = view_get_instance(view);
157 if (!instance || regex_cmp(instance, criteria->instance) != 0) {
158 return false;
159 }
160 }
160 161
161 if (criteria->window_role) { 162 if (criteria->window_role) {
162 // TODO 163 // TODO
163 } 164 }
164 165
165#ifdef HAVE_XWAYLAND
166 if (criteria->window_type != ATOM_LAST) { 166 if (criteria->window_type != ATOM_LAST) {
167 if (!view_has_window_type(view, criteria->window_type)) { 167 if (!view_has_window_type(view, criteria->window_type)) {
168 return false; 168 return false;
@@ -292,20 +292,20 @@ static enum atom_name parse_window_type(const char *type) {
292 292
293enum criteria_token { 293enum criteria_token {
294 T_APP_ID, 294 T_APP_ID,
295 T_CLASS,
296 T_CON_ID, 295 T_CON_ID,
297 T_CON_MARK, 296 T_CON_MARK,
298 T_FLOATING, 297 T_FLOATING,
299#ifdef HAVE_XWAYLAND 298#ifdef HAVE_XWAYLAND
299 T_CLASS,
300 T_ID, 300 T_ID,
301 T_INSTANCE,
302 T_WINDOW_ROLE,
301 T_WINDOW_TYPE, 303 T_WINDOW_TYPE,
302#endif 304#endif
303 T_INSTANCE,
304 T_SHELL, 305 T_SHELL,
305 T_TILING, 306 T_TILING,
306 T_TITLE, 307 T_TITLE,
307 T_URGENT, 308 T_URGENT,
308 T_WINDOW_ROLE,
309 T_WORKSPACE, 309 T_WORKSPACE,
310 310
311 T_INVALID, 311 T_INVALID,
@@ -314,28 +314,28 @@ enum criteria_token {
314static enum criteria_token token_from_name(char *name) { 314static enum criteria_token token_from_name(char *name) {
315 if (strcmp(name, "app_id") == 0) { 315 if (strcmp(name, "app_id") == 0) {
316 return T_APP_ID; 316 return T_APP_ID;
317 } else if (strcmp(name, "class") == 0) {
318 return T_CLASS;
319 } else if (strcmp(name, "con_id") == 0) { 317 } else if (strcmp(name, "con_id") == 0) {
320 return T_CON_ID; 318 return T_CON_ID;
321 } else if (strcmp(name, "con_mark") == 0) { 319 } else if (strcmp(name, "con_mark") == 0) {
322 return T_CON_MARK; 320 return T_CON_MARK;
323#ifdef HAVE_XWAYLAND 321#ifdef HAVE_XWAYLAND
322 } else if (strcmp(name, "class") == 0) {
323 return T_CLASS;
324 } else if (strcmp(name, "id") == 0) { 324 } else if (strcmp(name, "id") == 0) {
325 return T_ID; 325 return T_ID;
326 } else if (strcmp(name, "instance") == 0) {
327 return T_INSTANCE;
328 } else if (strcmp(name, "window_role") == 0) {
329 return T_WINDOW_ROLE;
326 } else if (strcmp(name, "window_type") == 0) { 330 } else if (strcmp(name, "window_type") == 0) {
327 return T_WINDOW_TYPE; 331 return T_WINDOW_TYPE;
328#endif 332#endif
329 } else if (strcmp(name, "instance") == 0) {
330 return T_INSTANCE;
331 } else if (strcmp(name, "shell") == 0) { 333 } else if (strcmp(name, "shell") == 0) {
332 return T_SHELL; 334 return T_SHELL;
333 } else if (strcmp(name, "title") == 0) { 335 } else if (strcmp(name, "title") == 0) {
334 return T_TITLE; 336 return T_TITLE;
335 } else if (strcmp(name, "urgent") == 0) { 337 } else if (strcmp(name, "urgent") == 0) {
336 return T_URGENT; 338 return T_URGENT;
337 } else if (strcmp(name, "window_role") == 0) {
338 return T_WINDOW_ROLE;
339 } else if (strcmp(name, "workspace") == 0) { 339 } else if (strcmp(name, "workspace") == 0) {
340 return T_WORKSPACE; 340 return T_WORKSPACE;
341 } 341 }
@@ -364,21 +364,12 @@ static char *get_focused_prop(enum criteria_token token) {
364 case T_APP_ID: 364 case T_APP_ID:
365 value = view_get_app_id(view); 365 value = view_get_app_id(view);
366 break; 366 break;
367 case T_CLASS:
368 value = view_get_class(view);
369 break;
370 case T_INSTANCE:
371 value = view_get_instance(view);
372 break;
373 case T_SHELL: 367 case T_SHELL:
374 value = view_get_shell(view); 368 value = view_get_shell(view);
375 break; 369 break;
376 case T_TITLE: 370 case T_TITLE:
377 value = view_get_class(view); 371 value = view_get_class(view);
378 break; 372 break;
379 case T_WINDOW_ROLE:
380 value = view_get_class(view);
381 break;
382 case T_WORKSPACE: 373 case T_WORKSPACE:
383 { 374 {
384 struct sway_container *ws = container_parent(focus, C_WORKSPACE); 375 struct sway_container *ws = container_parent(focus, C_WORKSPACE);
@@ -400,7 +391,16 @@ static char *get_focused_prop(enum criteria_token token) {
400 case T_CON_MARK: // These do not support __focused__ 391 case T_CON_MARK: // These do not support __focused__
401 case T_FLOATING: 392 case T_FLOATING:
402#ifdef HAVE_XWAYLAND 393#ifdef HAVE_XWAYLAND
394 case T_CLASS:
395 value = view_get_class(view);
396 break;
403 case T_ID: 397 case T_ID:
398 case T_INSTANCE:
399 value = view_get_instance(view);
400 break;
401 case T_WINDOW_ROLE:
402 value = view_get_class(view);
403 break;
404 case T_WINDOW_TYPE: 404 case T_WINDOW_TYPE:
405#endif 405#endif
406 case T_TILING: 406 case T_TILING:
@@ -451,12 +451,6 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
451 case T_APP_ID: 451 case T_APP_ID:
452 generate_regex(&criteria->app_id, effective_value); 452 generate_regex(&criteria->app_id, effective_value);
453 break; 453 break;
454 case T_CLASS:
455 generate_regex(&criteria->class, effective_value);
456 break;
457 case T_INSTANCE:
458 generate_regex(&criteria->instance, effective_value);
459 break;
460 case T_CON_ID: 454 case T_CON_ID:
461 criteria->con_id = strtoul(effective_value, &endptr, 10); 455 criteria->con_id = strtoul(effective_value, &endptr, 10);
462 if (*endptr != 0) { 456 if (*endptr != 0) {
@@ -466,12 +460,9 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
466 case T_CON_MARK: 460 case T_CON_MARK:
467 generate_regex(&criteria->con_mark, effective_value); 461 generate_regex(&criteria->con_mark, effective_value);
468 break; 462 break;
469 case T_WINDOW_ROLE:
470 generate_regex(&criteria->window_role, effective_value);
471 break;
472#ifdef HAVE_XWAYLAND 463#ifdef HAVE_XWAYLAND
473 case T_WINDOW_TYPE: 464 case T_CLASS:
474 criteria->window_type = parse_window_type(effective_value); 465 generate_regex(&criteria->class, effective_value);
475 break; 466 break;
476 case T_ID: 467 case T_ID:
477 criteria->id = strtoul(effective_value, &endptr, 10); 468 criteria->id = strtoul(effective_value, &endptr, 10);
@@ -479,6 +470,15 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
479 error = strdup("The value for 'id' should be numeric"); 470 error = strdup("The value for 'id' should be numeric");
480 } 471 }
481 break; 472 break;
473 case T_INSTANCE:
474 generate_regex(&criteria->instance, effective_value);
475 break;
476 case T_WINDOW_ROLE:
477 generate_regex(&criteria->window_role, effective_value);
478 break;
479 case T_WINDOW_TYPE:
480 criteria->window_type = parse_window_type(effective_value);
481 break;
482#endif 482#endif
483 case T_FLOATING: 483 case T_FLOATING:
484 criteria->floating = true; 484 criteria->floating = true;