Add a new function `swayc_is_tabbed_or_stacked()` to determine whether or not
the given container has layout of stacked or tabbed. This is done commonly
enough that it should have its own method to help readability and code quality.
No logic changes.
When switching back to a workspace after new window creation, it is now
necessary to descend the focus stack into the focused container of the
workspace to determine which container should get the focus. This is because
the `set_focused_container()` function no longer automatically descends into
the focus stack to find the correct view to focus.
Replace `update_view_border()` with `update_container_border()`. The latter
should handle both the case where the container is a view or if the container
has children.
The previous implementation of focus handling assumed that only views can be
focused. Containers can also be focused with a command like `focus parent` or
`focus child`.
Change `set_focused_container()` to handle the case of the given container
being a container with children and update borders accordingly.
Deeply nested containers which had their layouts changed didn't update
their actual_geometry, this messed up their child containers. Those got
width and height of 0, which was then decreased for stacked/tabbed
containers by title height. Underflow ensued, these containers suddenly
had height 4294967273. In short, not updating actual_geometry didn't
play nicely with nested containers.
When titlebar is hidden, top border of the topmost view inside
tabbed/stacked container will not be drawn. This is changed in layout.c
On the other hand, top border should be drawn sometimes, for example
when titlebar is hidden on a view that is not the topmost inside
tabbed/stacked container. This is changed in border.c
Previously, cmd_kill only closed a focused view, while containers were
not affected. Now it closes all views that are children of the focused
container.
Whenever a stacked or tabbed container has focused, paint the titlebars of all
its child windows to be focused as well to indicate the parent stack/tab
container has the focus.
In `move_focus()`, when given an output, set the focus to the workspace of that
output instead of the output itself.
This fixes a bug that did not allow users to switch between outputs introduced
in afc6ad6.
It also fixes other issues before that commit when a workspace with children
was selected and the user tried to switch focus in the direction of another
output.
In the `focus parent` command, do not set focus above the workspace level.
These containers are not meant to be focused.
This prevents a crash on repeated `focus parent` commands.