It's possible to pick up schema changes without a full reload. If the new
bindings conflicts with gnome-shell we will try to override. But since we have
registered no action, this will fail.
Simply guard against actionless bindings.
fixes#190
We override these methods so this will work from the typical launchers:
Shell.App.open_new_window
Shell.App.launch_action('new-window', ...)
Gio.DesktopAppInfo.launch
Gio.DesktopAppInfo.launch_action('new-window', ...)
NOTE: overridden `launch` can act somewhat strange with single process many
window apps if the process. If the process is launched with a specific directory
new windows might inherit this on non-overridden `new-window`. (seen in Tilix)
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.
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.