Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52645)
@@ -582,4 +582,5 @@
         case UIExtraDataMetaDefs::RuntimeMenuViewActionType_MenuBar:           strResult = "MenuBar"; break;
         case UIExtraDataMetaDefs::RuntimeMenuViewActionType_MenuBarSettings:   strResult = "MenuBarSettings"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuViewActionType_ToggleMenuBar:     strResult = "ToggleMenuBar"; break;
         case UIExtraDataMetaDefs::RuntimeMenuViewActionType_StatusBar:         strResult = "StatusBar"; break;
         case UIExtraDataMetaDefs::RuntimeMenuViewActionType_StatusBarSettings: strResult = "StatusBarSettings"; break;
@@ -610,4 +611,5 @@
     keys << "MenuBar";           values << UIExtraDataMetaDefs::RuntimeMenuViewActionType_MenuBar;
     keys << "MenuBarSettings";   values << UIExtraDataMetaDefs::RuntimeMenuViewActionType_MenuBarSettings;
+    keys << "ToggleMenuBar";     values << UIExtraDataMetaDefs::RuntimeMenuViewActionType_ToggleMenuBar;
     keys << "StatusBar";         values << UIExtraDataMetaDefs::RuntimeMenuViewActionType_StatusBar;
     keys << "StatusBarSettings"; values << UIExtraDataMetaDefs::RuntimeMenuViewActionType_StatusBarSettings;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52645)
@@ -78,4 +78,5 @@
 const char* UIExtraDataDefs::GUI_LastScaleWindowPosition = "GUI/LastScaleWindowPosition";
 const char* UIExtraDataDefs::GUI_Geometry_State_Max = "max";
+const char* UIExtraDataDefs::GUI_MenuBar_Enabled = "GUI/MenuBar/Enabled";
 const char* UIExtraDataDefs::GUI_RestrictedRuntimeMenus = "GUI/RestrictedRuntimeMenus";
 #ifdef Q_WS_MAC
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52645)
@@ -142,4 +142,6 @@
         /** Holds machine-window geometry maximized state flag. */
         extern const char* GUI_Geometry_State_Max;
+        /** Holds Runtime UI menu-bar availability status. */
+        extern const char* GUI_MenuBar_Enabled;
         /** Holds restricted Runtime UI menu types. */
         extern const char* GUI_RestrictedRuntimeMenus;
@@ -368,9 +370,10 @@
         RuntimeMenuViewActionType_MenuBar           = RT_BIT(5),
         RuntimeMenuViewActionType_MenuBarSettings   = RT_BIT(6),
-        RuntimeMenuViewActionType_StatusBar         = RT_BIT(7),
-        RuntimeMenuViewActionType_StatusBarSettings = RT_BIT(8),
-        RuntimeMenuViewActionType_ToggleStatusBar   = RT_BIT(9),
-        RuntimeMenuViewActionType_Resize            = RT_BIT(10),
-        RuntimeMenuViewActionType_Multiscreen       = RT_BIT(11),
+        RuntimeMenuViewActionType_ToggleMenuBar     = RT_BIT(7),
+        RuntimeMenuViewActionType_StatusBar         = RT_BIT(8),
+        RuntimeMenuViewActionType_StatusBarSettings = RT_BIT(9),
+        RuntimeMenuViewActionType_ToggleStatusBar   = RT_BIT(10),
+        RuntimeMenuViewActionType_Resize            = RT_BIT(11),
+        RuntimeMenuViewActionType_Multiscreen       = RT_BIT(12),
         RuntimeMenuViewActionType_All               = 0xFFFF
     };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52645)
@@ -2489,4 +2489,16 @@
 }
 
+bool UIExtraDataManager::menuBarEnabled(const QString &strID)
+{
+    /* 'True' unless feature restricted: */
+    return !isFeatureRestricted(GUI_MenuBar_Enabled, strID);
+}
+
+void UIExtraDataManager::setMenuBarEnabled(bool fEnabled, const QString &strID)
+{
+    /* 'False' if feature restricted, null-string otherwise: */
+    setExtraDataString(GUI_MenuBar_Enabled, toFeatureRestricted(!fEnabled), strID);
+}
+
 UIExtraDataMetaDefs::MenuType UIExtraDataManager::restrictedRuntimeMenuTypes(const QString &strID)
 {
@@ -3441,5 +3453,6 @@
     {
         /* Status-bar configuration change: */
-        if (strKey == GUI_RestrictedRuntimeMenus ||
+        if (strKey == GUI_MenuBar_Enabled ||
+            strKey == GUI_RestrictedRuntimeMenus ||
 #ifdef Q_WS_MAC
             strKey == GUI_RestrictedRuntimeApplicationMenuActions ||
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52645)
@@ -286,4 +286,9 @@
         void setMachineWindowGeometry(UIVisualStateType visualStateType, ulong uScreenIndex, const QRect &geometry, bool fMaximized, const QString &strID);
 
+        /** Returns whether Runtime UI menu-bar is enabled. */
+        bool menuBarEnabled(const QString &strID);
+        /** Defines whether Runtime UI menu-bar is @a fEnabled. */
+        void setMenuBarEnabled(bool fEnabled, const QString &strID);
+
         /** Returns restricted Runtime UI menu types. */
         UIExtraDataMetaDefs::MenuType restrictedRuntimeMenuTypes(const QString &strID);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52645)
@@ -875,4 +875,35 @@
         setName(QApplication::translate("UIActionPool", "&Menu Bar Settings..."));
         setStatusTip(QApplication::translate("UIActionPool", "Opens window to configure menu-bar"));
+    }
+};
+
+class UIActionToggleMenuBar : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionToggleMenuBar(UIActionPool *pParent)
+        : UIActionToggle(pParent, ":/menubar_on_16px.png", ":/menubar_16px.png",
+                                  ":/menubar_on_disabled_16px.png", ":/menubar_disabled_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuViewActionType_ToggleMenuBar; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuViewActionType_ToggleMenuBar); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuView(UIExtraDataMetaDefs::RuntimeMenuViewActionType_ToggleMenuBar); }
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("ToggleMenuBar");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "Show Menu &Bar"));
+        setStatusTip(QApplication::translate("UIActionPool", "Toggle menu-bar visibility for this machine"));
     }
 };
@@ -1910,4 +1941,5 @@
     m_pool[UIActionIndexRT_M_View_M_MenuBar] = new UIActionMenuMenuBar(this);
     m_pool[UIActionIndexRT_M_View_M_MenuBar_S_Settings] = new UIActionSimpleShowMenuBarSettingsWindow(this);
+    m_pool[UIActionIndexRT_M_View_M_MenuBar_T_Visibility] = new UIActionToggleMenuBar(this);
     m_pool[UIActionIndexRT_M_View_M_StatusBar] = new UIActionMenuStatusBar(this);
     m_pool[UIActionIndexRT_M_View_M_StatusBar_S_Settings] = new UIActionSimpleShowStatusBarSettingsWindow(this);
@@ -2377,4 +2409,6 @@
     /* 'Menu Bar Settings' action: */
     addAction(pMenu, action(UIActionIndexRT_M_View_M_MenuBar_S_Settings));
+    /* 'Toggle Menu Bar' action: */
+    addAction(pMenu, action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility));
 
     /* Mark menu as valid: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52645)
@@ -72,4 +72,5 @@
     UIActionIndexRT_M_View_M_MenuBar,
     UIActionIndexRT_M_View_M_MenuBar_S_Settings,
+    UIActionIndexRT_M_View_M_MenuBar_T_Visibility,
     UIActionIndexRT_M_View_M_StatusBar,
     UIActionIndexRT_M_View_M_StatusBar_S_Settings,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52645)
@@ -868,4 +868,5 @@
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings));
+    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 52645)
@@ -1189,14 +1189,29 @@
         pGuestAutoresizeSwitch->setChecked(gEDataManager->guestScreenAutoResizeEnabled(strMachineID));
 
+        /* Menu-bar options: */
+        {
+            const bool fEnabledGlobally = !vboxGlobal().settings().isFeatureActive("noMenuBar");
+            const bool fEnabledForMachine = gEDataManager->menuBarEnabled(strMachineID);
+            const bool fEnabled = fEnabledGlobally && fEnabledForMachine;
+            QAction *pActionMenuBarSettings = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings);
+            pActionMenuBarSettings->setEnabled(fEnabled);
+            QAction *pActionMenuBarSwitch = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility);
+            pActionMenuBarSwitch->blockSignals(true);
+            pActionMenuBarSwitch->setChecked(fEnabled);
+            pActionMenuBarSwitch->blockSignals(false);
+        }
+
         /* Status-bar options: */
-        const bool fEnabledGlobally = !vboxGlobal().settings().isFeatureActive("noStatusBar");
-        const bool fEnabledForMachine = gEDataManager->statusBarEnabled(strMachineID);
-        const bool fEnabled = fEnabledGlobally && fEnabledForMachine;
-        QAction *pActionStatusBarSettings = actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings);
-        pActionStatusBarSettings->setEnabled(fEnabled);
-        QAction *pActionStatusBarSwitch = actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_T_Visibility);
-        pActionStatusBarSwitch->blockSignals(true);
-        pActionStatusBarSwitch->setChecked(fEnabled);
-        pActionStatusBarSwitch->blockSignals(false);
+        {
+            const bool fEnabledGlobally = !vboxGlobal().settings().isFeatureActive("noStatusBar");
+            const bool fEnabledForMachine = gEDataManager->statusBarEnabled(strMachineID);
+            const bool fEnabled = fEnabledGlobally && fEnabledForMachine;
+            QAction *pActionStatusBarSettings = actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings);
+            pActionStatusBarSettings->setEnabled(fEnabled);
+            QAction *pActionStatusBarSwitch = actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_T_Visibility);
+            pActionStatusBarSwitch->blockSignals(true);
+            pActionStatusBarSwitch->setChecked(fEnabled);
+            pActionStatusBarSwitch->blockSignals(false);
+        }
 
         /* What is the default close action and the restricted are? */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp	(revision 52645)
@@ -81,6 +81,11 @@
     AssertReturnVoid(isMachineWindowsCreated());
 
-    /* Prevent user from opening another one editor: */
+    /* Make sure menu-bar is enabled: */
+    const bool fEnabled = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility)->isChecked();
+    AssertReturnVoid(fEnabled);
+
+    /* Prevent user from opening another one editor or toggle menu-bar: */
     actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings)->setEnabled(false);
+    actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility)->setEnabled(false);
     /* Create menu-bar editor: */
     UIMenuBarEditorWindow *pMenuBarEditor = new UIMenuBarEditorWindow(activeMachineWindow(), actionPool());
@@ -101,6 +106,21 @@
 void UIMachineLogicNormal::sltMenuBarSettingsClosed()
 {
-    /* Allow user to open editor again: */
+    /* Make sure menu-bar is enabled: */
+    const bool fEnabled = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility)->isChecked();
+    AssertReturnVoid(fEnabled);
+
+    /* Allow user to open editor and toggle menu-bar again: */
     actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings)->setEnabled(true);
+    actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility)->setEnabled(true);
+}
+
+void UIMachineLogicNormal::sltToggleMenuBar()
+{
+    /* Do not process if window(s) missed! */
+    AssertReturnVoid(isMachineWindowsCreated());
+
+    /* Invert menu-bar availability option: */
+    const bool fEnabled = gEDataManager->menuBarEnabled(vboxGlobal().managedVMUuid());
+    gEDataManager->setMenuBarEnabled(!fEnabled, vboxGlobal().managedVMUuid());
 }
 
@@ -196,4 +216,6 @@
     connect(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings), SIGNAL(triggered(bool)),
             this, SLOT(sltOpenMenuBarSettings()));
+    connect(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility), SIGNAL(triggered(bool)),
+            this, SLOT(sltToggleMenuBar()));
     connect(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings), SIGNAL(triggered(bool)),
             this, SLOT(sltOpenStatusBarSettings()));
@@ -262,4 +284,6 @@
     disconnect(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings), SIGNAL(triggered(bool)),
                this, SLOT(sltOpenMenuBarSettings()));
+    disconnect(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility), SIGNAL(triggered(bool)),
+               this, SLOT(sltToggleMenuBar()));
     disconnect(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings), SIGNAL(triggered(bool)),
                this, SLOT(sltOpenStatusBarSettings()));
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h	(revision 52645)
@@ -42,11 +42,21 @@
     void sltCheckForRequestedVisualStateType();
 
-    /* View menu functionality: */
+    /** Opens menu-bar editor.*/
     void sltOpenMenuBarSettings();
+    /** Handles menu-bar editor closing.*/
     void sltMenuBarSettingsClosed();
+    /** Toggles menu-bar presence.*/
+    void sltToggleMenuBar();
+
+    /** Opens status-bar editor.*/
     void sltOpenStatusBarSettings();
+    /** Handles status-bar editor closing.*/
     void sltStatusBarSettingsClosed();
+    /** Toggles status-bar presence.*/
     void sltToggleStatusBar();
+
+    /** Handles guest-screen toggle requests. */
     void sltHandleActionTriggerViewScreenToggle(int iIndex, bool fEnabled);
+    /** Handles guest-screen resize requests. */
     void sltHandleActionTriggerViewScreenResize(int iIndex, const QSize &size);
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52645)
@@ -118,6 +118,28 @@
 void UIMachineWindowNormal::sltHandleMenuBarConfigurationChange()
 {
+    /* Check whether menu-bar is enabled: */
+    const bool fEnabled = gEDataManager->menuBarEnabled(vboxGlobal().managedVMUuid());
+    /* Update settings action 'enable' state: */
+    QAction *pActionMenuBarSettings = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_S_Settings);
+    pActionMenuBarSettings->setEnabled(fEnabled);
+    /* Update switch action 'checked' state: */
+    QAction *pActionMenuBarSwitch = actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility);
+    pActionMenuBarSwitch->blockSignals(true);
+    pActionMenuBarSwitch->setChecked(fEnabled);
+    pActionMenuBarSwitch->blockSignals(false);
+
+    /* Update menu-bar visibility: */
+    menuBar()->setVisible(pActionMenuBarSwitch->isChecked());
     /* Update menu-bar: */
     updateMenu();
+
+    /* Normalize geometry without moving: */
+    normalizeGeometry(false /* adjust position */);
+}
+
+void UIMachineWindowNormal::sltHandleMenuBarContextMenuRequest(const QPoint &position)
+{
+    /* Raise action's context-menu: */
+    actionPool()->action(UIActionIndexRT_M_View_M_MenuBar)->menu()->exec(menuBar()->mapToGlobal(position));
 }
 #endif /* !RT_OS_DARWIN */
@@ -138,4 +160,5 @@
     /* Update status-bar visibility: */
     statusBar()->setVisible(pActionStatusBarSwitch->isChecked());
+    /* Update status-bar indicators-pool: */
     m_pIndicatorsPool->setAutoUpdateIndicatorStates(statusBar()->isVisible());
 
@@ -214,5 +237,8 @@
     AssertPtrReturnVoid(menuBar());
     {
-        /* Post-configure menu-bar: */
+        /* Configure menu-bar: */
+        menuBar()->setContextMenuPolicy(Qt::CustomContextMenu);
+        connect(menuBar(), SIGNAL(customContextMenuRequested(const QPoint&)),
+                this, SLOT(sltHandleMenuBarContextMenuRequest(const QPoint&)));
         connect(gEDataManager, SIGNAL(sigMenuBarConfigurationChange()),
                 this, SLOT(sltHandleMenuBarConfigurationChange()));
@@ -284,5 +310,5 @@
 #ifndef Q_WS_MAC
         /* Update menu-bar visibility: */
-        menuBar()->setHidden(vboxGlobal().settings().isFeatureActive("noMenuBar"));
+        menuBar()->setVisible(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar_T_Visibility)->isChecked());
 #endif /* !Q_WS_MAC */
         /* Update status-bar visibility: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h	(revision 52644)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h	(revision 52645)
@@ -62,4 +62,6 @@
     /** Handles menu-bar configuration-change. */
     void sltHandleMenuBarConfigurationChange();
+    /** Handles menu-bar context-menu-request. */
+    void sltHandleMenuBarContextMenuRequest(const QPoint &position);
 #endif /* !RT_OS_DARWIN */
 
