Damage is not handled properly when subsurfaces have subsurfaces. Of course
`firefox` is doing this because, why not. Anyway, those need to know their
parent as well to figure out the right location for the damage.
Subsurfaces have been handled somewhat incorrectly. With the release of Firefox
87 this happens to trigger a couple of rendering bugs. Damage is not tracked
properly for those subsurfaces.
There is an issue with sending a resize event to surfaces which would not
require them to actually resize. In that case the serial of these operations
would be `0`. This way the commit logic would not recognize a surface update and
handle it wrongly.
This can be reproduced when trying to `fullscreen` a surface that already has
its maximum size.
Group operations tend to break with multiple outputs and some frankly do not
make a lot of sense.
* `raise` and `lower` group may and up looping
* `group-only` should clear all workspaces
When sending a view to a different sheet we need to compute the focus, otherwise
an obscured view would not gain focus if it is revealed after the pinning.
Recalculating unmanaged view geometry is has been moved into a helper function
which should be used across the implementation for unmanaged Xwayland views.
Unmanaged views currently do not get evacuated at all. This means they are still
referring to a deallocated output if they happen to be have been there during
deallocation. We now evacuate them alongside regular views on workspace merging.
This simplifies the API for output disabling and enabling. We do not need to
check beforehand if the invariants hold but can bail out if we happen to find
out during enable/disable of a monitor (e.g. double disable/enable).
This makes it more clear that we are inside of a mode. Ultimately indicating the
views that are going to get tiled would be the best solution but for now this is
good enough.
When applying a layout we raise all floating views to prevent them from being
covered up by the tiles. There is currently a missing check for hidden views
which should not get raised.
Xwayland views need to know their layout coordinates communicated to them via a
configure. Detaching an output changes the layout coordinate system and we
therefore need to re-configure all Xwayland views once the layout has changed.
Not doing this can lead to Xwayland views being placed outside the viewport
since they assume the wrong layout coordinates.
Evacuating forced views needs to take into account that forced visible views are
not linked to the workspace related lists. With hidden visible views it is the
other way around. This needs to be handled when evacuating views in the case of
an output getting destroyed. Hidden forced views need to be removed from lists
and added correctly and vice versa.
We now assert being in normal mode when calling `hikari_workspace_focus_view`.
This should prevent `hikari` from exiting protected modes (e.g. lock mode) when
something forces a focus change.
With recent changes view migration became more of an operation of its own. This
led to evacuation breaking. To fix this evacuation is no longer a special case
of view pinning but rather a separate operation.
Merging output configurations with each other leads to all `background` pointers
referencing the same string which leads to multiple free operations on cleanup.
Sheet pinning could also function as view migration. This is now removed since
it leads to two possible code paths for migration. We now decide at the call
site if we are doing a migration or a different operation (e.g. pinning,
moving).
Vertically and horizontally maximized views should be resizable along their
unmaximized axis. This resizing should also propagate to the original view
geometry.
Shutting down `hikari` now sends a `quit` action to each active view. And waits
for all of them to quit before exiting. Sending a quit again during shutdown
will terminate `hikari` right away.
Currently we are assuming that the usable area covers the entire screen which is
only correct when there are no layers present. Once a layer with an exclusive
area has been added this changes.