From be257336b995085829cece793a11a0214930deae Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 18 Jan 2019 00:55:34 +0100 Subject: [PATCH] fixes 0001673: Assign already assigned keyboard shortcuts without searching old assigned action --- src/Gui/DlgKeyboardImp.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Gui/DlgKeyboardImp.cpp b/src/Gui/DlgKeyboardImp.cpp index 8b2ead6ed2..be6233e2e9 100644 --- a/src/Gui/DlgKeyboardImp.cpp +++ b/src/Gui/DlgKeyboardImp.cpp @@ -360,10 +360,11 @@ void DlgCustomKeyboardImp::on_editShortcut_textChanged(const QString& sc) buttonAssign->setEnabled(true); QKeySequence ks(sc); - if (!ks.isEmpty()) { + if (!ks.isEmpty() && !editShortcut->isNone()) { int countAmbiguous = 0; QString ambiguousCommand; QString ambiguousMenu; + std::vector ambiguousCommands; CommandManager & cCmdMgr = Application::Instance->commandManager(); std::vector cmds = cCmdMgr.getAllCommands(); @@ -375,6 +376,7 @@ void DlgCustomKeyboardImp::on_editShortcut_textChanged(const QString& sc) for (QList::iterator jt = acts.begin(); jt != acts.end(); ++jt) { if ((*jt)->shortcut() == ks) { ++countAmbiguous; + ambiguousCommands.push_back(*it); ambiguousCommand = QString::fromLatin1((*it)->getName()); // store the last one ambiguousMenu = qApp->translate((*it)->className(), (*it)->getMenuText()); @@ -399,16 +401,28 @@ void DlgCustomKeyboardImp::on_editShortcut_textChanged(const QString& sc) tr("The shortcut '%1' is defined more than once. This could result into unexpected behaviour.").arg(sc) ); editShortcut->setFocus(); buttonAssign->setEnabled(false); - } else if (countAmbiguous == 1 && ambiguousCommand != QLatin1String(name)) { - QMessageBox::warning(this, tr("Already defined shortcut"), - tr("The shortcut '%1' is already assigned to '%2'.\n\nPlease define another shortcut.").arg(sc).arg(ambiguousMenu) ); - editShortcut->setFocus(); - buttonAssign->setEnabled(false); - } else { + } + else if (countAmbiguous == 1 && ambiguousCommand != QLatin1String(name)) { + int ret = QMessageBox::warning(this, tr("Already defined shortcut"), + tr("The shortcut '%1' is already assigned to '%2'.\n\nDo you want to override it?") + .arg(sc).arg(ambiguousMenu), QMessageBox::Yes | QMessageBox::No); + if (ret == QMessageBox::Yes) { + for (auto* cmd : ambiguousCommands) { + Action* action = cmd->getAction(); + action->setShortcut(QString()); + } + } + else { + editShortcut->setFocus(); + buttonAssign->setEnabled(false); + } + } + else { if (cmd && cmd->getAction() && cmd->getAction()->shortcut() == ks) buttonAssign->setEnabled(false); } - } else { + } + else { if (cmd && cmd->getAction() && cmd->getAction()->shortcut().isEmpty()) buttonAssign->setEnabled(false); // both key sequences are empty }