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 means we can get rid of more cases in the ugly switch in navigator.
Guard against non mutter action names, but apply the override even when we can't
get the id.
For some reason restore-shortcuts (`<Super>Escape`) returns
KeybindingsAction.NONE.
Also remove setKeybinding
This is the common functions needed for both the extension side and prefence UI
side, so it goes in `settings.js`.
`Settings.findConflicts` searches for keycombo conflicts between our own
bindings and the built in Gnome Shell and mutter bindings, returning an array
like this:
```
[{ name: our own action name,
conflicts: array of conflicting names
settings: the settings schema the conflicting are part of
combo: the key combo as generated by keystrToKeycombo},
...]
```
keystrToKeycombo now handles `Above_Tab` properly.
NB: get this log message when removing a binding:
Gtk-CRITICAL **: 00:19:47.333: gtk_tree_model_filter_get_path: assertion
'GTK_TREE_MODEL_FILTER (model)->priv->stamp == iter->stamp' failed
But it doesn't really seem to be CRITICAL.
Note: ideally we should subscribe to settings changes and update the TreeModel
in the listener instead of updating it directly in the signal handler for the
accel editor.
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.