mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
Detect when one tries to bind a lfun to a prefix of longer commands
Change KeyMap::getBinding to return FuncRequest::prefix in this case. Add handling of this case in PrefShortcuts::validateNewShortcut. What does not seem to work is that if, for example, accent-acute is bound to M-s (which is a prefix for size-related bindings), and then the binding is removed, the functions are not visibly restored. Part of bug #10131.
This commit is contained in:
parent
d59046512c
commit
c8c589353a
@ -203,7 +203,7 @@ FuncRequest KeyMap::getBinding(KeySequence const & seq, unsigned int r)
|
|||||||
&& mod1 == it->mod.first
|
&& mod1 == it->mod.first
|
||||||
&& mod2 == it->mod.second) {
|
&& mod2 == it->mod.second) {
|
||||||
if (r + 1 == seq.length())
|
if (r + 1 == seq.length())
|
||||||
return it->func;
|
return (it->prefixes) ? FuncRequest::prefix : it->func;
|
||||||
else if (it->prefixes)
|
else if (it->prefixes)
|
||||||
return it->prefixes->getBinding(seq, r + 1);
|
return it->prefixes->getBinding(seq, r + 1);
|
||||||
}
|
}
|
||||||
|
@ -65,8 +65,9 @@ public:
|
|||||||
unsigned int r = 0);
|
unsigned int r = 0);
|
||||||
|
|
||||||
|
|
||||||
/// returns the function bound to this key sequence, or
|
/// returns the function bound to this key sequence, or:
|
||||||
/// FuncRequest::unknown if no binding exists for it.
|
/// * FuncRequest::unknown if no binding exists for it;
|
||||||
|
/// * FuncRequest::prefix if this is the start of longer keysequences
|
||||||
/// @param r an internal recursion counter
|
/// @param r an internal recursion counter
|
||||||
// FIXME Surely there's a better way to do that?
|
// FIXME Surely there's a better way to do that?
|
||||||
FuncRequest getBinding(KeySequence const & seq, unsigned int r = 0);
|
FuncRequest getBinding(KeySequence const & seq, unsigned int r = 0);
|
||||||
|
@ -3408,6 +3408,23 @@ bool PrefShortcuts::validateNewShortcut(FuncRequest const & func,
|
|||||||
// nothing to change
|
// nothing to change
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Check whether the key sequence is a prefix for other shortcuts.
|
||||||
|
if (oldBinding == FuncRequest::prefix) {
|
||||||
|
docstring const new_action_string = makeCmdString(func);
|
||||||
|
docstring const text = bformat(_("Shortcut `%1$s' is already a prefix for other commands.\n"
|
||||||
|
"Are you sure you want to unbind these commands and bind it to %2$s?"),
|
||||||
|
k.print(KeySequence::ForGui), new_action_string);
|
||||||
|
int ret = Alert::prompt(_("Redefine shortcut?"),
|
||||||
|
text, 0, 1, _("&Redefine"), _("&Cancel"));
|
||||||
|
if (ret != 0)
|
||||||
|
return false;
|
||||||
|
QString const sequence_text = toqstr(k.print(KeySequence::ForGui));
|
||||||
|
QList<QTreeWidgetItem*> items = shortcutsTW->findItems(sequence_text,
|
||||||
|
Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchRecursive), 1);
|
||||||
|
deactivateShortcuts(items);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// make sure this key isn't already bound---and, if so, prompt user
|
// make sure this key isn't already bound---and, if so, prompt user
|
||||||
// (exclude the lfun the user already wants to modify)
|
// (exclude the lfun the user already wants to modify)
|
||||||
docstring const action_string = makeCmdString(oldBinding);
|
docstring const action_string = makeCmdString(oldBinding);
|
||||||
|
Loading…
Reference in New Issue
Block a user