aboutsummaryrefslogtreecommitdiffstats
path: root/sway/criteria.c
diff options
context:
space:
mode:
authorLibravatar Pascal Pascher <aur@clouddrop.de>2018-09-03 11:13:50 +0200
committerLibravatar Pascal Pascher <aur@clouddrop.de>2018-09-03 11:13:50 +0200
commit587e320cd85b3c635b653b6e16b21ce5fb7bade0 (patch)
tree56ef04a99f1f6309967df0c0e4ea245b4d914b17 /sway/criteria.c
parentMerge pull request #2553 from emersion/disabled-no-modeset (diff)
downloadsway-587e320cd85b3c635b653b6e16b21ce5fb7bade0.tar.gz
sway-587e320cd85b3c635b653b6e16b21ce5fb7bade0.tar.zst
sway-587e320cd85b3c635b653b6e16b21ce5fb7bade0.zip
Fixed window_type with disabled xwayland support.
Diffstat (limited to 'sway/criteria.c')
-rw-r--r--sway/criteria.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/sway/criteria.c b/sway/criteria.c
index 13176fa1..4fad45bc 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -24,9 +24,9 @@ bool criteria_is_empty(struct criteria *criteria) {
24 && !criteria->con_id 24 && !criteria->con_id
25#ifdef HAVE_XWAYLAND 25#ifdef HAVE_XWAYLAND
26 && !criteria->id 26 && !criteria->id
27 && criteria->window_type == ATOM_LAST
27#endif 28#endif
28 && !criteria->window_role 29 && !criteria->window_role
29 && criteria->window_type == ATOM_LAST
30 && !criteria->floating 30 && !criteria->floating
31 && !criteria->tiling 31 && !criteria->tiling
32 && !criteria->urgent 32 && !criteria->urgent
@@ -51,8 +51,8 @@ static int regex_cmp(const char *item, const pcre *regex) {
51 return pcre_exec(regex, NULL, item, strlen(item), 0, 0, NULL, 0); 51 return pcre_exec(regex, NULL, item, strlen(item), 0, 0, NULL, 0);
52} 52}
53 53
54static bool view_has_window_type(struct sway_view *view, enum atom_name name) {
55#ifdef HAVE_XWAYLAND 54#ifdef HAVE_XWAYLAND
55static bool view_has_window_type(struct sway_view *view, enum atom_name name) {
56 if (view->type != SWAY_VIEW_XWAYLAND) { 56 if (view->type != SWAY_VIEW_XWAYLAND) {
57 return false; 57 return false;
58 } 58 }
@@ -64,9 +64,9 @@ static bool view_has_window_type(struct sway_view *view, enum atom_name name) {
64 return true; 64 return true;
65 } 65 }
66 } 66 }
67#endif
68 return false; 67 return false;
69} 68}
69#endif
70 70
71static int cmp_urgent(const void *_a, const void *_b) { 71static int cmp_urgent(const void *_a, const void *_b) {
72 struct sway_view *a = *(void **)_a; 72 struct sway_view *a = *(void **)_a;
@@ -162,11 +162,13 @@ static bool criteria_matches_view(struct criteria *criteria,
162 // TODO 162 // TODO
163 } 163 }
164 164
165#ifdef HAVE_XWAYLAND
165 if (criteria->window_type != ATOM_LAST) { 166 if (criteria->window_type != ATOM_LAST) {
166 if (!view_has_window_type(view, criteria->window_type)) { 167 if (!view_has_window_type(view, criteria->window_type)) {
167 return false; 168 return false;
168 } 169 }
169 } 170 }
171#endif
170 172
171 if (criteria->floating) { 173 if (criteria->floating) {
172 if (!container_is_floating(view->swayc)) { 174 if (!container_is_floating(view->swayc)) {
@@ -271,6 +273,7 @@ static bool generate_regex(pcre **regex, char *value) {
271 return true; 273 return true;
272} 274}
273 275
276#ifdef HAVE_XWAYLAND
274static enum atom_name parse_window_type(const char *type) { 277static enum atom_name parse_window_type(const char *type) {
275 if (strcasecmp(type, "normal") == 0) { 278 if (strcasecmp(type, "normal") == 0) {
276 return NET_WM_WINDOW_TYPE_NORMAL; 279 return NET_WM_WINDOW_TYPE_NORMAL;
@@ -285,6 +288,7 @@ static enum atom_name parse_window_type(const char *type) {
285 } 288 }
286 return ATOM_LAST; // ie. invalid 289 return ATOM_LAST; // ie. invalid
287} 290}
291#endif
288 292
289enum criteria_token { 293enum criteria_token {
290 T_APP_ID, 294 T_APP_ID,
@@ -294,6 +298,7 @@ enum criteria_token {
294 T_FLOATING, 298 T_FLOATING,
295#ifdef HAVE_XWAYLAND 299#ifdef HAVE_XWAYLAND
296 T_ID, 300 T_ID,
301 T_WINDOW_TYPE,
297#endif 302#endif
298 T_INSTANCE, 303 T_INSTANCE,
299 T_SHELL, 304 T_SHELL,
@@ -301,7 +306,6 @@ enum criteria_token {
301 T_TITLE, 306 T_TITLE,
302 T_URGENT, 307 T_URGENT,
303 T_WINDOW_ROLE, 308 T_WINDOW_ROLE,
304 T_WINDOW_TYPE,
305 T_WORKSPACE, 309 T_WORKSPACE,
306 310
307 T_INVALID, 311 T_INVALID,
@@ -319,6 +323,8 @@ static enum criteria_token token_from_name(char *name) {
319#ifdef HAVE_XWAYLAND 323#ifdef HAVE_XWAYLAND
320 } else if (strcmp(name, "id") == 0) { 324 } else if (strcmp(name, "id") == 0) {
321 return T_ID; 325 return T_ID;
326 } else if (strcmp(name, "window_type") == 0) {
327 return T_WINDOW_TYPE;
322#endif 328#endif
323 } else if (strcmp(name, "instance") == 0) { 329 } else if (strcmp(name, "instance") == 0) {
324 return T_INSTANCE; 330 return T_INSTANCE;
@@ -330,8 +336,6 @@ static enum criteria_token token_from_name(char *name) {
330 return T_URGENT; 336 return T_URGENT;
331 } else if (strcmp(name, "window_role") == 0) { 337 } else if (strcmp(name, "window_role") == 0) {
332 return T_WINDOW_ROLE; 338 return T_WINDOW_ROLE;
333 } else if (strcmp(name, "window_type") == 0) {
334 return T_WINDOW_TYPE;
335 } else if (strcmp(name, "workspace") == 0) { 339 } else if (strcmp(name, "workspace") == 0) {
336 return T_WORKSPACE; 340 return T_WORKSPACE;
337 } 341 }
@@ -397,10 +401,10 @@ static char *get_focused_prop(enum criteria_token token) {
397 case T_FLOATING: 401 case T_FLOATING:
398#ifdef HAVE_XWAYLAND 402#ifdef HAVE_XWAYLAND
399 case T_ID: 403 case T_ID:
404 case T_WINDOW_TYPE:
400#endif 405#endif
401 case T_TILING: 406 case T_TILING:
402 case T_URGENT: 407 case T_URGENT:
403 case T_WINDOW_TYPE:
404 case T_INVALID: 408 case T_INVALID:
405 break; 409 break;
406 } 410 }
@@ -465,10 +469,10 @@ static bool parse_token(struct criteria *criteria, char *name, char *value) {
465 case T_WINDOW_ROLE: 469 case T_WINDOW_ROLE:
466 generate_regex(&criteria->window_role, effective_value); 470 generate_regex(&criteria->window_role, effective_value);
467 break; 471 break;
472#ifdef HAVE_XWAYLAND
468 case T_WINDOW_TYPE: 473 case T_WINDOW_TYPE:
469 criteria->window_type = parse_window_type(effective_value); 474 criteria->window_type = parse_window_type(effective_value);
470 break; 475 break;
471#ifdef HAVE_XWAYLAND
472 case T_ID: 476 case T_ID:
473 criteria->id = strtoul(effective_value, &endptr, 10); 477 criteria->id = strtoul(effective_value, &endptr, 10);
474 if (*endptr != 0) { 478 if (*endptr != 0) {
@@ -559,7 +563,9 @@ struct criteria *criteria_parse(char *raw, char **error_arg) {
559 ++head; 563 ++head;
560 564
561 struct criteria *criteria = calloc(1, sizeof(struct criteria)); 565 struct criteria *criteria = calloc(1, sizeof(struct criteria));
566#ifdef HAVE_XWAYLAND
562 criteria->window_type = ATOM_LAST; // default value 567 criteria->window_type = ATOM_LAST; // default value
568#endif
563 char *name = NULL, *value = NULL; 569 char *name = NULL, *value = NULL;
564 bool in_quotes = false; 570 bool in_quotes = false;
565 571