Skip to content

Commit

Permalink
Fix showing global shortcut in tray menu
Browse files Browse the repository at this point in the history
Fixes #2382
  • Loading branch information
hluk committed May 5, 2024
1 parent af5daa3 commit 60c8311
Showing 1 changed file with 29 additions and 17 deletions.
46 changes: 29 additions & 17 deletions src/gui/mainwindow.cpp
Expand Up @@ -419,6 +419,21 @@ bool menuItemMatches(const QModelIndex &index, const QString &searchText)
return false;
}

QList<QKeySequence> getUniqueShortcuts(const QStringList &shortcuts, QList<QKeySequence> *usedShortcuts)
{
QList<QKeySequence> 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
Expand Down Expand Up @@ -1573,11 +1588,17 @@ void MainWindow::addCommandsToTrayMenu(const QVariantMap &clipboardData, QList<Q
data.insert( mimeWindowTitle, m_windowForMenuPaste->getTitle() );

const auto commands = commandsForMenu(data, placeholder->tabName(), m_trayMenuCommands);
QList<QKeySequence> 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<QKeySequence> uniqueShortcuts = getUniqueShortcuts(
command.globalShortcuts, &usedShortcuts);
act->setShortcuts(uniqueShortcuts);

actions->append(act);

addMenuMatchCommand(&m_trayMenuMatchCommands, command.matchCmd, act);
Expand Down Expand Up @@ -1766,26 +1787,17 @@ void MainWindow::updateActionShortcuts()
continue;

const Command &command = act->command();
QList<QKeySequence> 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<QKeySequence> 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) {
Expand Down

0 comments on commit 60c8311

Please sign in to comment.