@@ -459,6 +459,7 @@ void SettingsDialog::loadShortcutSettings() {
459459 ui->shortcutLoadingProgressBar ->setVisible (true );
460460
461461 int menuIndex = 0 ;
462+ QSet<QString> processedActionObjectNames;
462463
463464 // loop through all top-level menus and build the tree recursively
464465 for (const QMenu *menu : menus) {
@@ -471,7 +472,7 @@ void SettingsDialog::loadShortcutSettings() {
471472
472473 buildShortcutTreeForMenu (menu, nullptr , settings, shortcutButtonActiveColor,
473474 shortcutButtonInactiveColor, disableShortcutButtonIcon,
474- clearButtonIcon, disabledMenuNames);
475+ clearButtonIcon, disabledMenuNames, processedActionObjectNames );
475476 }
476477
477478 ui->shortcutLoadingProgressBar ->setVisible (false );
@@ -493,30 +494,11 @@ void SettingsDialog::loadShortcutSettings() {
493494 * @param clearButtonIcon Icon for the clear button
494495 * @param disabledMenuNames List of menu object names to skip
495496 */
496- void SettingsDialog::buildShortcutTreeForMenu (const QMenu *menu, QTreeWidgetItem *parentItem,
497- SettingsService &settings,
498- const QColor &shortcutButtonActiveColor,
499- const QColor &shortcutButtonInactiveColor,
500- const QIcon &disableShortcutButtonIcon,
501- const QIcon &clearButtonIcon,
502- const QStringList &disabledMenuNames) {
503- // Count eligible actions first to decide whether to add this menu at all
504- int actionCount = 0 ;
505-
506- foreach (QAction *action, menu->actions ()) {
507- if (action->menu () != nullptr ) {
508- if (!disabledMenuNames.contains (action->menu ()->objectName ())) {
509- actionCount++;
510- }
511- } else if (!action->objectName ().isEmpty ()) {
512- actionCount++;
513- }
514- }
515-
516- if (actionCount == 0 ) {
517- return ;
518- }
519-
497+ void SettingsDialog::buildShortcutTreeForMenu (
498+ const QMenu *menu, QTreeWidgetItem *parentItem, SettingsService &settings,
499+ const QColor &shortcutButtonActiveColor, const QColor &shortcutButtonInactiveColor,
500+ const QIcon &disableShortcutButtonIcon, const QIcon &clearButtonIcon,
501+ const QStringList &disabledMenuNames, QSet<QString> &processedActionObjectNames) {
520502 // Add the menu item to the tree before populating children so that
521503 // setItemWidget() works correctly (items must be in the tree first)
522504 auto *menuItem = new QTreeWidgetItem ();
@@ -543,7 +525,8 @@ void SettingsDialog::buildShortcutTreeForMenu(const QMenu *menu, QTreeWidgetItem
543525
544526 buildShortcutTreeForMenu (subMenu, menuItem, settings, shortcutButtonActiveColor,
545527 shortcutButtonInactiveColor, disableShortcutButtonIcon,
546- clearButtonIcon, disabledMenuNames);
528+ clearButtonIcon, disabledMenuNames,
529+ processedActionObjectNames);
547530 continue ;
548531 }
549532
@@ -554,6 +537,11 @@ void SettingsDialog::buildShortcutTreeForMenu(const QMenu *menu, QTreeWidgetItem
554537 continue ;
555538 }
556539
540+ if (processedActionObjectNames.contains (actionObjectName)) {
541+ continue ;
542+ }
543+ processedActionObjectNames.insert (actionObjectName);
544+
557545 // create the tree widget item
558546 auto *actionItem = new QTreeWidgetItem ();
559547 actionItem->setText (0 , action->text ().remove (QStringLiteral (" &" )));
@@ -677,6 +665,16 @@ void SettingsDialog::buildShortcutTreeForMenu(const QMenu *menu, QTreeWidgetItem
677665
678666 ui->shortcutTreeWidget ->setItemWidget (actionItem, 2 , globalShortcutKeyWidget);
679667 }
668+
669+ if (menuItem->childCount () == 0 ) {
670+ if (parentItem == nullptr ) {
671+ const int index = ui->shortcutTreeWidget ->indexOfTopLevelItem (menuItem);
672+ delete ui->shortcutTreeWidget ->takeTopLevelItem (index);
673+ } else {
674+ parentItem->removeChild (menuItem);
675+ delete menuItem;
676+ }
677+ }
680678}
681679
682680/* *
0 commit comments