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.
Try to make it a bit more "action oriented":
An action exists independently of its binding. It could conceivable be invoked
by other means too.
Some weirdness from the marriage remain to weed out, but this is a working
stepping stone.
A typical case is mpv which preseerves its aspect ratio, resulting in a
completely different width than requested. This would cause `resize` to call
layout recursively running the first layout call last.
While we might need to steal some actions from gnome, we should support using
both actions if the user wants it.
Also add all the correct default bindings to the schema, and don't touch gesettings
at all. This should make it simpler to get #66 done.
Only look at the neighbours of the closed window when selecting a new window.
Also raise the window on ensure, this way the stacking order works like an mru
for selectedWindow.
When a window actor is hidden its clone won't properly update its size, so we
manually fix it up in resizeHandler.
To complicate matters this bugs out the new window animation so we need to delay
connecting the `size-changed` signal.