Extend tiling/floating criteria with optional auto/user values (#4006)
The default `tiling` and `floating` behavior is preserved and matches both cases. Adds a new handler to `remanage_window` on A_I3_FLOATING_WINDOW change. Mainly in order to `run_assignments`, this makes `for_window [floating]` directives to work for windows which where initially opened as tiling. Now, when floating is enabled, `for_window` will trigger correctly. Same applies to `for_window [tiling]`. The obvious solution of `run_assignments` after `floating_{enable,disable}` doesn't work because `run_assignments` modifies the parser state in src/assignments.c:51. Fixes #3588 Co-Authored-By: Michael Stapelberg <michael@stapelberg.de>
This commit is contained in:
@ -98,18 +98,53 @@ is(parser_calls($config),
|
||||
################################################################################
|
||||
|
||||
$config = <<'EOT';
|
||||
for_window [] nop empty
|
||||
for_window [class="^Chrome"] floating enable
|
||||
for_window [class=^Chrome] floating enable
|
||||
for_window [floating_from = "auto" class= ==Class== ] nop floating
|
||||
for_window [tiling_from=auto class="==Class=="]nop floating
|
||||
EOT
|
||||
|
||||
$expected = <<'EOT';
|
||||
cfg_for_window(nop empty)
|
||||
cfg_criteria_add(class, ^Chrome)
|
||||
cfg_for_window(floating enable)
|
||||
cfg_criteria_add(class, ^Chrome)
|
||||
cfg_for_window(floating enable)
|
||||
cfg_criteria_add(floating_from, auto)
|
||||
cfg_criteria_add(class, ==Class==)
|
||||
cfg_for_window(nop floating)
|
||||
cfg_criteria_add(tiling_from, auto)
|
||||
cfg_criteria_add(class, ==Class==)
|
||||
cfg_for_window(nop floating)
|
||||
EOT
|
||||
|
||||
is(parser_calls($config),
|
||||
$expected,
|
||||
'for_window okay');
|
||||
|
||||
$config = <<'EOT';
|
||||
for_window [tiling_from=typo] nop typo
|
||||
for_window [tiling_from="typo"] nop typo
|
||||
EOT
|
||||
|
||||
$expected = <<'EOT';
|
||||
ERROR: CONFIG: Expected one of these tokens: '"', 'auto', 'user'
|
||||
ERROR: CONFIG: (in file <stdin>)
|
||||
ERROR: CONFIG: Line 1: for_window [tiling_from=typo] nop typo
|
||||
ERROR: CONFIG: ^^^^^^^^^^^^^^
|
||||
ERROR: CONFIG: Line 2: for_window [tiling_from="typo"] nop typo
|
||||
ERROR: CONFIG: Expected one of these tokens: 'auto', 'user'
|
||||
ERROR: CONFIG: (in file <stdin>)
|
||||
ERROR: CONFIG: Line 1: for_window [tiling_from=typo] nop typo
|
||||
ERROR: CONFIG: Line 2: for_window [tiling_from="typo"] nop typo
|
||||
ERROR: CONFIG: ^^^^^^^^^^^^^^^
|
||||
EOT
|
||||
|
||||
is(parser_calls($config),
|
||||
$expected,
|
||||
'for_window errors okay');
|
||||
|
||||
################################################################################
|
||||
# assign
|
||||
################################################################################
|
||||
|
Reference in New Issue
Block a user