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).
Indicator bars now store their current color. This fixes issues where bars get
updated and need to figure out which mode `hikari` is in so they can color
themselves correctly. This way the bar just "knows" the right color.
Bindings should get configured when devices are attached. Not when the
configuration is loaded. This patch lays the groundwork for more flexible
keyboard configuration.
By doing this all the relevant rendering code is now in one compilation unit. We
can also make very mode take complete control of its rendering while maintaining
efficient code.
During move mode we should not draw the indicator when the view is hidden for a
short amount of time during the transition to another output. Otherwise this
leads to the indicator being drawn on the wrong spot at the other monitor.
The `cancel` function only damaged the indicator. This leads to the view border
not being properly redrawn as well as group indication when the mode gets
cancelled.
This patch reworks entirely how `hikari` marks areas as damaged. Instead of
damaging all views during indication just the views that actually change
indication get damaged.
The code for entering each mode is currently in the server module, moving those
into the appropriate mode modules allows for more optimizations (like properly
refreshing indicators).