diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp index b602dc54cd9..637e76ab03b 100644 --- a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp +++ b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp @@ -263,20 +263,25 @@ void ActionContainerPrivate::addMenu(ActionContainer *menu, Id groupId) scheduleUpdate(); } -void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *menu, Id groupId) +void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *menu) { auto containerPrivate = static_cast(menu); if (!containerPrivate->canBeAddedToMenu()) return; - auto container = static_cast(containerPrivate); - const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO); - QList::const_iterator groupIt = findGroup(actualGroupId); - QTC_ASSERT(groupIt != m_groups.constEnd(), return); - QAction *beforeAction = before->menu()->menuAction(); - m_groups[groupIt-m_groups.constBegin()].items.append(menu); + QMutableListIterator it(m_groups); + while (it.hasNext()) { + Group &group = it.next(); + const int insertionPoint = group.items.indexOf(before); + if (insertionPoint >= 0) { + group.items.insert(insertionPoint, menu); + break; + } + } connect(menu, &QObject::destroyed, this, &ActionContainerPrivate::itemDestroyed); + auto container = static_cast(containerPrivate); + QAction *beforeAction = before->menu()->menuAction(); insertMenu(beforeAction, container->menu()); scheduleUpdate(); } diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.h b/src/plugins/coreplugin/actionmanager/actioncontainer.h index a20962430bd..531d01ccdbb 100644 --- a/src/plugins/coreplugin/actionmanager/actioncontainer.h +++ b/src/plugins/coreplugin/actionmanager/actioncontainer.h @@ -64,7 +64,7 @@ public: virtual void insertGroup(Id before, Id group) = 0; virtual void addAction(Command *action, Id group = Id()) = 0; virtual void addMenu(ActionContainer *menu, Id group = Id()) = 0; - virtual void addMenu(ActionContainer *before, ActionContainer *menu, Id group = Id()) = 0; + virtual void addMenu(ActionContainer *before, ActionContainer *menu) = 0; Command *addSeparator(Id group = Id()); virtual Command *addSeparator(const Context &context, Id group = Id(), QAction **outSeparator = nullptr) = 0; diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h index ffa24eecddc..c78310b7b2a 100644 --- a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h +++ b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h @@ -56,7 +56,7 @@ public: void insertGroup(Id before, Id groupId) override; void addAction(Command *action, Id group = Id()) override; void addMenu(ActionContainer *menu, Id group = Id()) override; - void addMenu(ActionContainer *before, ActionContainer *menu, Id group = Id()) override; + void addMenu(ActionContainer *before, ActionContainer *menu) override; Command *addSeparator(const Context &context, Id group = Id(), QAction **outSeparator = nullptr) override; void clear() override;