@@ -765,53 +765,63 @@ void CDockAreaTitleBar::contextMenuEvent(QContextMenuEvent* ev)
765765 return ;
766766 }
767767
768- const bool isAutoHide = d->DockArea ->isAutoHide ();
768+ auto Menu = buildContextMenu (nullptr );
769+ Menu->exec (ev->globalPos ());
770+ delete Menu;
771+ }
772+
773+ QMenu* CDockAreaTitleBar::buildContextMenu (QMenu *Menu)
774+ {
775+ const bool isAutoHide = d->DockArea ->isAutoHide ();
769776 const bool isTopLevelArea = d->DockArea ->isTopLevelArea ();
770777 QAction* Action;
771- QMenu Menu (this );
772- if (!isTopLevelArea)
778+ if (Menu == nullptr )
779+ {
780+ Menu = new QMenu (this );
781+ }
782+
783+ if (!isTopLevelArea)
773784 {
774- Action = Menu. addAction (isAutoHide ? tr (" Detach" ) : tr (" Detach Group" ),
785+ Action = Menu-> addAction (isAutoHide ? tr (" Detach" ) : tr (" Detach Group" ),
775786 this , SLOT (onUndockButtonClicked ()));
776787 Action->setEnabled (d->DockArea ->features ().testFlag (CDockWidget::DockWidgetFloatable));
777788 if (CDockManager::testAutoHideConfigFlag (CDockManager::AutoHideFeatureEnabled))
778789 {
779- Action = Menu. addAction (isAutoHide ? tr (" Unpin (Dock)" ) : tr (" Pin Group" ), this , SLOT (onAutoHideDockAreaActionClicked ()));
790+ Action = Menu-> addAction (isAutoHide ? tr (" Unpin (Dock)" ) : tr (" Pin Group" ), this , SLOT (onAutoHideDockAreaActionClicked ()));
780791 auto AreaIsPinnable = d->DockArea ->features ().testFlag (CDockWidget::DockWidgetPinnable);
781792 Action->setEnabled (AreaIsPinnable);
782793
783794 if (!isAutoHide)
784795 {
785- auto menu = Menu. addMenu (tr (" Pin Group To..." ));
796+ auto menu = Menu-> addMenu (tr (" Pin Group To..." ));
786797 menu->setEnabled (AreaIsPinnable);
787798 d->createAutoHideToAction (tr (" Top" ), SideBarTop, menu);
788799 d->createAutoHideToAction (tr (" Left" ), SideBarLeft, menu);
789800 d->createAutoHideToAction (tr (" Right" ), SideBarRight, menu);
790801 d->createAutoHideToAction (tr (" Bottom" ), SideBarBottom, menu);
791802 }
792803 }
793- Menu. addSeparator ();
804+ Menu-> addSeparator ();
794805 }
795806
796807 if (isAutoHide)
797808 {
798- Action = Menu. addAction (tr (" Minimize" ), this , SLOT (minimizeAutoHideContainer ()));
799- Action = Menu. addAction (tr (" Close" ), this , SLOT (onAutoHideCloseActionTriggered ()));
809+ Action = Menu-> addAction (tr (" Minimize" ), this , SLOT (minimizeAutoHideContainer ()));
810+ Action = Menu-> addAction (tr (" Close" ), this , SLOT (onAutoHideCloseActionTriggered ()));
800811 }
801812 else
802813 {
803- Action = Menu. addAction (isAutoHide ? tr (" Close" ) : tr (" Close Group" ), this , SLOT (onCloseButtonClicked ()));
814+ Action = Menu-> addAction (isAutoHide ? tr (" Close" ) : tr (" Close Group" ), this , SLOT (onCloseButtonClicked ()));
804815 }
805816
806817 Action->setEnabled (d->DockArea ->features ().testFlag (CDockWidget::DockWidgetClosable));
807818 if (!isAutoHide && !isTopLevelArea)
808819 {
809- Action = Menu. addAction (tr (" Close Other Groups" ), d->DockArea , SLOT (closeOtherAreas ()));
820+ Action = Menu-> addAction (tr (" Close Other Groups" ), d->DockArea , SLOT (closeOtherAreas ()));
810821 }
811- Menu. exec (ev-> globalPos ()) ;
822+ return Menu;
812823}
813824
814-
815825// ============================================================================
816826void CDockAreaTitleBar::insertWidget (int index, QWidget *widget)
817827{
0 commit comments