diff options
author | Pascal Pascher <aur@clouddrop.de> | 2018-09-03 11:13:50 +0200 |
---|---|---|
committer | Pascal Pascher <aur@clouddrop.de> | 2018-09-03 11:13:50 +0200 |
commit | 587e320cd85b3c635b653b6e16b21ce5fb7bade0 (patch) | |
tree | 56ef04a99f1f6309967df0c0e4ea245b4d914b17 /sway/criteria.c | |
parent | Merge pull request #2553 from emersion/disabled-no-modeset (diff) | |
download | sway-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.c | 22 |
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 | ||
54 | static bool view_has_window_type(struct sway_view *view, enum atom_name name) { | ||
55 | #ifdef HAVE_XWAYLAND | 54 | #ifdef HAVE_XWAYLAND |
55 | static 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 | ||
71 | static int cmp_urgent(const void *_a, const void *_b) { | 71 | static 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 | ||
274 | static enum atom_name parse_window_type(const char *type) { | 277 | static 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 | ||
289 | enum criteria_token { | 293 | enum 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 | ||