From 60c8311451411f2cbd1634375d13eabcd6a62eca Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Sun, 5 May 2024 10:55:29 +0200 Subject: [PATCH] Fix showing global shortcut in tray menu Fixes #2382 --- src/gui/mainwindow.cpp | 46 ++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 36a206eb45..000ec03493 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -419,6 +419,21 @@ bool menuItemMatches(const QModelIndex &index, const QString &searchText) return false; } +QList getUniqueShortcuts(const QStringList &shortcuts, QList *usedShortcuts) +{ + QList uniqueShortcuts; + + for (const auto &shortcutText : shortcuts) { + const QKeySequence shortcut(shortcutText, QKeySequence::PortableText); + if ( !shortcut.isEmpty() && !usedShortcuts->contains(shortcut) ) { + usedShortcuts->append(shortcut); + uniqueShortcuts.append(shortcut); + } + } + + return uniqueShortcuts; +} + } // namespace #ifdef WITH_NATIVE_NOTIFICATIONS @@ -1573,11 +1588,17 @@ void MainWindow::addCommandsToTrayMenu(const QVariantMap &clipboardData, QListgetTitle() ); const auto commands = commandsForMenu(data, placeholder->tabName(), m_trayMenuCommands); + QList usedShortcuts; for (const auto &command : commands) { QString name = command.name; QMenu *currentMenu = createSubMenus(&name, m_trayMenu); auto act = new CommandAction(command, name, currentMenu); + + const QList uniqueShortcuts = getUniqueShortcuts( + command.globalShortcuts, &usedShortcuts); + act->setShortcuts(uniqueShortcuts); + actions->append(act); addMenuMatchCommand(&m_trayMenuMatchCommands, command.matchCmd, act); @@ -1766,26 +1787,17 @@ void MainWindow::updateActionShortcuts() continue; const Command &command = act->command(); - QList uniqueShortcuts; - - const auto addShortuct = [&](const QString &shortcutText) { - const QKeySequence shortcut(shortcutText, QKeySequence::PortableText); - if ( !shortcut.isEmpty() && !usedShortcuts.contains(shortcut) ) { - usedShortcuts.append(shortcut); - uniqueShortcuts.append(shortcut); + const QList uniqueShortcuts = getUniqueShortcuts( + command.shortcuts + command.globalShortcuts, &usedShortcuts); - if ( !isItemMenuDefaultActionValid() && isItemActivationShortcut(shortcut) ) - m_menuItem->setDefaultAction(act); + for (const auto &shortcut : uniqueShortcuts) { + if ( !isItemMenuDefaultActionValid() && isItemActivationShortcut(shortcut) ) { + m_menuItem->setDefaultAction(act); + break; } - }; - - for (const auto &shortcutText : command.shortcuts) - addShortuct(shortcutText); - for (const auto &shortcutText : command.globalShortcuts) - addShortuct(shortcutText); + } - if (!uniqueShortcuts.isEmpty()) - act->setShortcuts(uniqueShortcuts); + act->setShortcuts(uniqueShortcuts); } for (int id = 0; id < m_actions.size(); ++id) {