User can focus neighboring columns using Left and Right shortcuts.
Columns will remember the current focus, and will restore it if column
is focused using the shortcuts.
This is a much nicer way to control access to data and functions than
directly passing whole objects. Public-private simply doesn't work, and
it feels awkward to pass around whole layer internally.
* This fixes the regression where "Window to Screen" shortcut fails
because of Krohnkite. This worked in some previous revisions
* The cause of the problem was minimizeRest feature implemented
recently. Originally, Krohnkite arranged windows as soon as a window is
move to another screen, but the new feature delayed this re-arragement.
This caused KWin to fire subsequent `geometryChanged` signal, causing
`enforceSize` to be called to revert any changes to the window.
* This patch both fixes the regression and keeps the feature, but might
face some race conditions, which is inevitable due to how KWin operates.
KWin emits `clientUnminimized` as soon as user gives the order, but the
unminimized window can get focus only after unminimize aninmation is
finished.
The feature itself works nicely, but damages window states by minimizing
windows. To mitigate this, Krohnkite should track minimization.
In fact, minimization was intentionally excluded from the initial
design to reduce the complexity of window state management, but should
be managable anyway.
* THAT was a hard ride, really. It took so many experiements, but ended
up with this simple elegant hack.
* The trick is to delay arranging on window unminimize. Without this
delay, KWin doesn't register the unminimized window as the current
window, no matter what you do.
* KWin raises events as soon as a change is made to window. This causes
KWin to call event handlers of already running scripts, resulting in a
situation similar to nested interruption. It's a highly complicated
problem, thus should be avoided from the beginning.
* This commit workarounds this simply by adding a boolean flag to mark
if the script is already running or not. Any nested entry will be
refused.
* remove access to `basis.actualGeometry.height` to make the
algorithm orientation independent.
* using relative-size allows handling possible corner case where
window is shrunk/grown on both sides
* implements feature suggested in #27
* tiles have different height based on their weights
* implements a new tile stacking function `stackTilesWithWeight`
* implements weight adjustment