Forbid Duplicate Key Bindings
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.
This commit is contained in:
parent
1ad579ce03
commit
46e78520c4
@ -1687,6 +1687,42 @@ class PrefsEditor:
|
||||
if key_with_shift.level != 0 and keyval_lower == keyval_upper:
|
||||
mods = Gdk.ModifierType(mods & ~Gdk.ModifierType.SHIFT_MASK)
|
||||
|
||||
accel = Gtk.accelerator_name(key, mods)
|
||||
current_binding = liststore.get_value(liststore.get_iter(path), 0)
|
||||
|
||||
duplicate_bindings = []
|
||||
for conf_binding, conf_accel in self.config["keybindings"].items():
|
||||
parsed_accel = Gtk.accelerator_parse(accel)
|
||||
parsed_conf_accel = Gtk.accelerator_parse(conf_accel)
|
||||
|
||||
if (
|
||||
parsed_accel == parsed_conf_accel
|
||||
and current_binding != conf_binding
|
||||
):
|
||||
duplicate_bindings.append((conf_binding, conf_accel))
|
||||
|
||||
if duplicate_bindings:
|
||||
dialog = Gtk.MessageDialog(
|
||||
transient_for=self.window,
|
||||
flags=Gtk.DialogFlags.MODAL,
|
||||
message_type=Gtk.MessageType.ERROR,
|
||||
buttons=Gtk.ButtonsType.CLOSE,
|
||||
text="Duplicate Key Bindings Are Not Allowed",
|
||||
)
|
||||
|
||||
accel_label = Gtk.accelerator_get_label(key, mods)
|
||||
# get the first found duplicate
|
||||
duplicate_keybinding_name = duplicate_bindings[0][0]
|
||||
|
||||
message = (
|
||||
"Key binding `{0}` is already in use to trigger the `{1}` action."
|
||||
).format(accel_label, self.keybindingnames[duplicate_keybinding_name])
|
||||
dialog.format_secondary_text(message)
|
||||
|
||||
dialog.run()
|
||||
dialog.destroy()
|
||||
return
|
||||
|
||||
celliter = liststore.get_iter_from_string(path)
|
||||
liststore.set(celliter, 2, key, 3, mods)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user