]> git.sur5r.net Git - i3/i3/commit
con_set_layout: always use the parent container, handle workspaces properly
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 4 Sep 2012 22:22:38 +0000 (00:22 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 4 Sep 2012 22:22:38 +0000 (00:22 +0200)
commit4976fa33504907510f1ee9e44884c116af0d801b
tree7f21a2405c60f2995f821bcfc23d4792ab51c637
parent2a37089ad109efd4c5fd8d1b4c32f60b8fc82978
con_set_layout: always use the parent container, handle workspaces properly

Previously, in case 'layout stacked' (for example) had been called
interactively, con_set_layout would be called with focused->parent,
while with for_window, it’d be called on the actual matching container.

This difference in behavior was the cause for the inability to use
'for_window [class="XTerm"] layout tabbed', which now works \o/, but
more on that below.

The change also allows us to handle the case of the user selecting a
CT_WORKSPACE container properly, that is, by using the special case and
creating a new split container on the workspace which gets all the
contents, but a new layout.

Now, before you are enthusiastic about the change and try to use
for_window magic in your config file, keep in mind: The 'layout' command
acts on the parent split container. That is, when using a line such as
this one:

    for_window [class="XTerm"] layout tabbed

…and opening an XTerm when on a workspace with one single other window,
the whole workspace will be set tabbed (just as previously when you
opened an XTerm and sent 'layout tabbed' manually).

Therefore, to open XTerm in its own tabbed split container, you need to
split before:

    for_window [class="XTerm"] split v, layout tabbed

The comma here is important! It says that the second command should not
be treated as an entirely unrelated command, but it should also relate
the matching window (while it does work with a ';', that is prone to
race-conditions and should be avoided).

fixes #358
src/commands.c
src/con.c
testcases/t/122-split.t