This commit adds a function that resets key bindings to the default in
`test_keybinding_edit_produce_expected_accels` test.
Note that this function needs to run at the end of every test that
modifies the key bindings as they are not automatically reset after
the test has run.
This commit adds
`test_keybinding_successfully_reassigned_after_clearing` test,
which checks that a key binding is successfully reassigned after it
has been cleared.
When a key binding is cleared its value is now set to "" (an empty
string) instead of `None` as before.
This change is introduced because `Gtk.accelerator_parse` does not
allow `None` to be used as a value, which in turn breaks
`on_cellrenderer_accel_edited` function in
`terminatorlib/prefseditor.py` by raising a `TypeError` every time a
new key binding is introduced. Note that this only happens if at
least one key binding has been cleared first.
This commit allows to assign the `Shift+Tab` key binding to an action in
`Preferences>Keybindings`.
In GTK the Tab key can be modified by the Shift key. Such a key combination
has a special key value - `Gdk.KEY_ISO_Left_Tab`.
To allow it, `key = key_with_shift.keyval` was added to the code.
However, `Gdk.KEY_ISO_Left_Tab` key value is displayed as `Left Tab` in
`Preferences>Keybindings`, which is confusing as it is not obvious that it
corresponds to the `Shift+Tab` key combination. To make sure that `Shift+Tab`
is displayed as `Shift+Tab`, the `Shift+Tab` case is treated as if no Shift
was pressed at all.
This commit adds tests that check that:
1) Default key binding accelerators are distinct.
2) Message dialog appears when a duplicate key binding accelerator is
attempted to be assigned to a different action.
3) Duplicate key binding accelerator cannot refer to more than one action.
Also, `active_message_dialog` attribute was added to `PrefsEditor`, so
that tests could get a reference to a message dialog window.
This commit forbids setting duplicate key bindings in
`Preferences > Keybindings` tab.
If a duplicate key binding is detected upon editing, such a key binding
is not assigned and instead a message dialog is displayed saying that the
key binding is a duplicate.