Show conflicting shortcut in error message (#5287)

This commit is contained in:
RickyRister 2024-12-21 17:58:55 -08:00 committed by GitHub
parent 23099f7e8b
commit 4823cce622
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 91 additions and 44 deletions

View file

@ -154,26 +154,49 @@ int SequenceEdit::translateModifiers(Qt::KeyboardModifiers state, const QString
return result;
}
/**
*Validates that shortcut is valid (is a valid shortcut key sequence and doesn't conflict with any other shortcuts).
*Displays warning messages if it's not valid.
*
* @param sequence The shortcut key sequence
* @return True if the sequence isn't already self-contained
*/
bool SequenceEdit::validateShortcut(const QKeySequence &sequence)
{
if (sequence.isEmpty() || !valid) {
return true;
}
const auto &shortcutsSettings = SettingsCache::instance().shortcuts();
const QString sequenceString = sequence.toString();
if (!shortcutsSettings.isKeyAllowed(shortcutName, sequenceString)) {
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Invalid key"));
return true;
}
if (!shortcutsSettings.isValid(shortcutName, sequenceString)) {
auto overlaps = shortcutsSettings.findOverlaps(shortcutName, sequenceString);
QToolTip::showText(lineEdit->mapToGlobal(QPoint()),
tr("Shortcut already in use by:") + " " + overlaps.join(", "));
return true;
}
if (!lineEdit->text().isEmpty()) {
if (lineEdit->text().contains(sequenceString)) {
return false;
}
lineEdit->setText(lineEdit->text() + ";");
}
lineEdit->setText(lineEdit->text() + sequenceString);
return true;
}
void SequenceEdit::finishShortcut()
{
QKeySequence sequence(keys);
if (!sequence.isEmpty() && valid) {
QString sequenceString = sequence.toString();
if (SettingsCache::instance().shortcuts().isKeyAllowed(shortcutName, sequenceString)) {
if (SettingsCache::instance().shortcuts().isValid(shortcutName, sequenceString)) {
if (!lineEdit->text().isEmpty()) {
if (lineEdit->text().contains(sequenceString)) {
return;
}
lineEdit->setText(lineEdit->text() + ";");
}
lineEdit->setText(lineEdit->text() + sequenceString);
} else {
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Shortcut already in use"));
}
} else {
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Invalid key"));
}
if (!validateShortcut(QKeySequence(keys))) {
return;
}
currentKey = 0;