Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 84634)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 84635)
@@ -63,7 +63,4 @@
     , m_pMouseHandler(0)
     , m_pKeyboardHandler(0)
-    , m_pContextMenuGlobal(0)
-    , m_pContextMenuGroup(0)
-    , m_pContextMenuMachine(0)
     , m_iCurrentSearchResultIndex(-1)
     , m_iScrollingTokenSize(30)
@@ -1235,6 +1232,6 @@
 {
     /* Context menu for global(s): */
-    m_pContextMenuGlobal = new QMenu;
-    if (m_pContextMenuGlobal)
+    m_menus[UIChooserNodeType_Global] = new QMenu;
+    if (QMenu *pMenuGlobal = m_menus.value(UIChooserNodeType_Global))
     {
         /* Check if Ext Pack is ready, some of actions my depend on it: */
@@ -1243,38 +1240,38 @@
 
 #ifdef VBOX_WS_MAC
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_About));
-        m_pContextMenuGlobal->addSeparator();
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_Preferences));
-        m_pContextMenuGlobal->addSeparator();
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_NewCloudVM));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_About));
+        pMenuGlobal->addSeparator();
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_Preferences));
+        pMenuGlobal->addSeparator();
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_NewCloudVM));
 # ifdef VBOX_GUI_WITH_EXTRADATA_MANAGER_UI
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowExtraDataManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowExtraDataManager));
 # endif
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
         if (fExtPackAccessible)
-            m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowCloudProfileManager));
+            pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowCloudProfileManager));
 
 #else /* !VBOX_WS_MAC */
 
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_Preferences));
-        m_pContextMenuGlobal->addSeparator();
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_NewCloudVM));
-        m_pContextMenuGlobal->addSeparator();
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_Preferences));
+        pMenuGlobal->addSeparator();
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_NewCloudVM));
+        pMenuGlobal->addSeparator();
 # ifdef VBOX_GUI_WITH_EXTRADATA_MANAGER_UI
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowExtraDataManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowExtraDataManager));
 # endif
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowVirtualMediumManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowHostNetworkManager));
         if (fExtPackAccessible)
-            m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowCloudProfileManager));
+            pMenuGlobal->addAction(actionPool()->action(UIActionIndexST_M_File_S_ShowCloudProfileManager));
 # ifdef VBOX_GUI_WITH_NETWORK_MANAGER
-        m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_NetworkAccessManager));
+        pMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_NetworkAccessManager));
         if (gEDataManager->applicationUpdateEnabled())
-            m_pContextMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_CheckForUpdates));
+            pMenuGlobal->addAction(actionPool()->action(UIActionIndex_M_Application_S_CheckForUpdates));
 # endif
 #endif /* !VBOX_WS_MAC */
@@ -1282,54 +1279,54 @@
 
     /* Context menu for group(s): */
-    m_pContextMenuGroup = new QMenu;
-    if (m_pContextMenuGroup)
-    {
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Add));
-        m_pContextMenuGroup->addSeparator();
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Rename));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Remove));
-        m_pContextMenuGroup->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_MoveToGroup)->menu());
-        m_pContextMenuGroup->addSeparator();
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_M_StartOrShow));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_T_Pause));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Reset));
-        m_pContextMenuGroup->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu());
-        m_pContextMenuGroup->addSeparator();
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Discard));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowLogDialog));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
-        m_pContextMenuGroup->addSeparator();
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowInFileManager));
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_CreateShortcut));
-        m_pContextMenuGroup->addSeparator();
-        m_pContextMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Sort));
+    m_menus[UIChooserNodeType_Group] = new QMenu;
+    if (QMenu *pMenuGroup = m_menus.value(UIChooserNodeType_Group))
+    {
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Add));
+        pMenuGroup->addSeparator();
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Rename));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Remove));
+        pMenuGroup->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_MoveToGroup)->menu());
+        pMenuGroup->addSeparator();
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_M_StartOrShow));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_T_Pause));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Reset));
+        pMenuGroup->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu());
+        pMenuGroup->addSeparator();
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Discard));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowLogDialog));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
+        pMenuGroup->addSeparator();
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowInFileManager));
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_CreateShortcut));
+        pMenuGroup->addSeparator();
+        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Sort));
     }
 
     /* Context menu for machine(s): */
-    m_pContextMenuMachine = new QMenu;
-    if (m_pContextMenuMachine)
-    {
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ExportToOCI));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
-        m_pContextMenuMachine->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_MoveToGroup)->menu());
-        m_pContextMenuMachine->addSeparator();
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Pause));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Reset));
-        m_pContextMenuMachine->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu());
-        m_pContextMenuMachine->addSeparator();
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Discard));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowLogDialog));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Refresh));
-        m_pContextMenuMachine->addSeparator();
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowInFileManager));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_CreateShortcut));
-        m_pContextMenuMachine->addSeparator();
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_SortParent));
-        m_pContextMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
+    m_menus[UIChooserNodeType_Machine] = new QMenu;
+    if (QMenu *pMenuMachine = m_menus.value(UIChooserNodeType_Machine))
+    {
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ExportToOCI));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
+        pMenuMachine->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_MoveToGroup)->menu());
+        pMenuMachine->addSeparator();
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Pause));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Reset));
+        pMenuMachine->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu());
+        pMenuMachine->addSeparator();
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Discard));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowLogDialog));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Refresh));
+        pMenuMachine->addSeparator();
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowInFileManager));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_CreateShortcut));
+        pMenuMachine->addSeparator();
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_SortParent));
+        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
     }
 }
@@ -1381,10 +1378,6 @@
 void UIChooserModel::cleanupContextMenu()
 {
-    delete m_pContextMenuGlobal;
-    m_pContextMenuGlobal = 0;
-    delete m_pContextMenuGroup;
-    m_pContextMenuGroup = 0;
-    delete m_pContextMenuMachine;
-    m_pContextMenuMachine = 0;
+    qDeleteAll(m_menus);
+    m_menus.clear();
 }
 
@@ -1409,15 +1402,14 @@
         case QGraphicsSceneContextMenuEvent::Mouse:
         {
-            /* First of all we should look for an item under cursor: */
+            /* Look for an item under cursor: */
             if (QGraphicsItem *pItem = itemAt(pEvent->scenePos()))
             {
-                /* If this item of known type? */
                 switch (pItem->type())
                 {
                     case UIChooserNodeType_Global:
                     {
-                        /* Global context menu for global item cases: */
-                        popupContextMenu(UIGraphicsSelectorContextMenuType_Global, pEvent->screenPos());
-                        return true;
+                        /* Global context menu for all global item cases: */
+                        m_menus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
+                        break;
                     }
                     case UIChooserNodeType_Group:
@@ -1425,13 +1417,13 @@
                         /* Get group-item: */
                         UIChooserItem *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItem);
-                        /* Make sure thats not root: */
+                        /* Don't show context menu for root-item: */
                         if (pGroupItem->isRoot())
-                            return false;
-                        /* Is this group-item only the one selected? */
+                            break;
+                        /* Make sure we have group-item selected exclusively: */
                         if (selectedItems().contains(pGroupItem) && selectedItems().size() == 1)
                         {
                             /* Group context menu in that case: */
-                            popupContextMenu(UIGraphicsSelectorContextMenuType_Group, pEvent->screenPos());
-                            return true;
+                            m_menus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
+                            break;
                         }
                     }
@@ -1440,6 +1432,6 @@
                     {
                         /* Machine context menu for other Group/Machine cases: */
-                        popupContextMenu(UIGraphicsSelectorContextMenuType_Machine, pEvent->screenPos());
-                        return true;
+                        m_menus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
+                        break;
                     }
                     default:
@@ -1447,4 +1439,5 @@
                 }
             }
+            /* Filter out by default: */
             return true;
         }
@@ -1454,21 +1447,20 @@
             if (UIChooserItem *pItem = firstSelectedItem())
             {
-                /* If this item of known type? */
                 switch (pItem->type())
                 {
                     case UIChooserNodeType_Global:
                     {
-                        /* Global context menu for global item cases: */
-                        popupContextMenu(UIGraphicsSelectorContextMenuType_Machine, pEvent->screenPos());
-                        return true;
+                        /* Global context menu for all global item cases: */
+                        m_menus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
+                        break;
                     }
                     case UIChooserNodeType_Group:
                     {
-                        /* Is this group-item only the one selected? */
+                        /* Make sure we have group-item selected exclusively: */
                         if (selectedItems().size() == 1)
                         {
                             /* Group context menu in that case: */
-                            popupContextMenu(UIGraphicsSelectorContextMenuType_Group, pEvent->screenPos());
-                            return true;
+                            m_menus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
+                            break;
                         }
                     }
@@ -1477,6 +1469,6 @@
                     {
                         /* Machine context menu for other Group/Machine cases: */
-                        popupContextMenu(UIGraphicsSelectorContextMenuType_Machine, pEvent->screenPos());
-                        return true;
+                        m_menus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
+                        break;
                     }
                     default:
@@ -1484,4 +1476,5 @@
                 }
             }
+            /* Filter out by default: */
             return true;
         }
@@ -1491,30 +1484,4 @@
     /* Pass others context menu events: */
     return false;
-}
-
-void UIChooserModel::popupContextMenu(UIGraphicsSelectorContextMenuType enmType, QPoint point)
-{
-    /* Which type of context-menu requested? */
-    switch (enmType)
-    {
-        /* For global item? */
-        case UIGraphicsSelectorContextMenuType_Global:
-        {
-            m_pContextMenuGlobal->exec(point);
-            break;
-        }
-        /* For group? */
-        case UIGraphicsSelectorContextMenuType_Group:
-        {
-            m_pContextMenuGroup->exec(point);
-            break;
-        }
-        /* For machine(s)? */
-        case UIGraphicsSelectorContextMenuType_Machine:
-        {
-            m_pContextMenuMachine->exec(point);
-            break;
-        }
-    }
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 84634)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h	(revision 84635)
@@ -45,14 +45,4 @@
 class UIChooserView;
 class UIVirtualMachineItem;
-
-
-/** Context-menu types. */
-enum UIGraphicsSelectorContextMenuType
-{
-    UIGraphicsSelectorContextMenuType_Global,
-    UIGraphicsSelectorContextMenuType_Group,
-    UIGraphicsSelectorContextMenuType_Machine
-};
-
 
 /** UIChooserAbstractModel extension used as VM Chooser-pane model.
@@ -340,6 +330,4 @@
         /** Handles context-menu @a pEvent. */
         bool processContextMenuEvent(QGraphicsSceneContextMenuEvent *pEvent);
-        /** Popups context-menu of certain @a enmType in specified @a point. */
-        void popupContextMenu(UIGraphicsSelectorContextMenuType enmType, QPoint point);
     /** @} */
 
@@ -389,10 +377,6 @@
         UIChooserHandlerKeyboard *m_pKeyboardHandler;
 
-        /** Holds the global item context menu instance. */
-        QMenu *m_pContextMenuGlobal;
-        /** Holds the group item context menu instance. */
-        QMenu *m_pContextMenuGroup;
-        /** Holds the machine item context menu instance. */
-        QMenu *m_pContextMenuMachine;
+        /** Holds the map of context-menu instances. */
+        QMap<UIChooserNodeType, QMenu*>  m_menus;
     /** @} */
 
@@ -428,4 +412,3 @@
 };
 
-
 #endif /* !FEQT_INCLUDED_SRC_manager_chooser_UIChooserModel_h */
