We only need to calculate visible windows when we're ready to show window
actors again. This makes the tracking more robust as it should always be called
at the correct time.
`fixVisible` is replaced by `space.isPlaceable(metaWindow)` which checks if the
window actor can be placed at its clone's position. We simply call isPlaceable
from the main `moveDone` loop.
This way we won't have to compute dX all over the place, instead the clones are
correctly aligned with the window frame by default.
This also seems to mostly fix the resize problem on wayland, so we no longer
need to update the clone size on `size-changed`.
`monitor.index` is a number, not a function. So the guard doesn't seem to work
as it just happened to prevent moving windows to other monitors/workspaces.
This is a bit cleaner, and makes it possible to deal with previous-workspace
etc. the same way as switch-next etc. ie. mostly handled through it's action
handler, instead of special casing in navigator.js.
Another benefit is that we now actually keep track of the workspace mru
directly, eg. empty workspaces doesn't just drop off for no reason.
This will focus the last _selected_ neighbour when closing focus, instead of the
last focused neighbour. This pick should be more obvious, eg. when selecting the
left window, closing focus, and then suddenly going to the right window (since
it happened to be the last focus).
Also add noise by default
To set a background:
```
space.settings.set_string('background', '/path/to/image.png')
```
To reset:
```
space.settings.set_string('background', '')
```
Per workspace settings can be accessed through `space.settings`.
A setting's path is stored under its uuid in
`/org/gnome/shell/extensions/paperwm/workspaces/${uuid}/`. When modifying a
workspace setting the uuid will be recorded in
`org.gnome.Shell.Extensions.PaperWM.WorkspaceList`.
Spaces get their settings by looking for an uuid with an `index` key
corrosponding to its `workspace.index()`. If such a setting can't be found the
space will be given a fresh uuid and the name and color will be assigned as
before.
Guard against syncing and showing window actors if we're not at `space.targetX`,
ie. if we're still animating.
Also correctly set `space.moving` only when we're actually animating.