Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 73823)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 73841)
@@ -513,4 +513,5 @@
         RuntimeMenuInputActionType_Mouse              = RT_BIT(8),
         RuntimeMenuInputActionType_MouseIntegration   = RT_BIT(9),
+        RuntimeMenuInputActionType_TypeHostKeyCombo   = RT_BIT(10),
         RuntimeMenuInputActionType_All                = 0xFFFF
     };
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp	(revision 73823)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp	(revision 73841)
@@ -1813,4 +1813,62 @@
         setName(QApplication::translate("UIActionPool", "&Insert %1", "that means send the %1 key sequence to the virtual machine").arg("Alt Print Screen"));
         setStatusTip(QApplication::translate("UIActionPool", "Send the %1 sequence to the virtual machine").arg("Alt Print Screen"));
+    }
+};
+
+/** Toggle action extension, used as 'Perform Host Key Combo press/release' action class. */
+class UIActionToggleRuntimePerformTypeHostKeyCombo : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionToggleRuntimePerformTypeHostKeyCombo(UIActionPool *pParent)
+        : UIActionToggle
+          (pParent,
+           ":/vm_pause_on_16px.png", ":/vm_pause_16px.png",
+           ":/vm_pause_on_disabled_16px.png", ":/vm_pause_disabled_16px.png",
+           true)
+    {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const /* override */
+    {
+        return UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeHostKeyCombo;
+    }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const /* override */
+    {
+        return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeHostKeyCombo);
+    }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const /* override */
+    {
+        return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeHostKeyCombo);
+    }
+
+    /** Returns shortcut extra-data ID. */
+    virtual QString shortcutExtraDataID() const /* override */
+    {
+        return QString("TypeHostKeyCode");
+    }
+
+    /** Returns default shortcut. */
+    virtual QKeySequence defaultShortcut(UIActionPoolType) const /* override */
+    {
+#ifdef VBOX_WS_MAC
+        return QKeySequence("Insert");
+#else
+        return QKeySequence("Insert");
+#endif
+    }
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */
+    {
+        setName(QApplication::translate("UIActionPool", "&Insert %1", "that means send the %1 key sequence to the virtual machine").arg("Home Key Combo"));
+        setStatusTip(QApplication::translate("UIActionPool", "Send the %1 sequence to the virtual machine").arg("Home Key Combo"));
     }
 };
@@ -3212,4 +3270,5 @@
     m_pool[UIActionIndexRT_M_Input_M_Keyboard_S_TypePrintScreen] = new UIActionSimpleRuntimePerformTypePrintScreen(this);
     m_pool[UIActionIndexRT_M_Input_M_Keyboard_S_TypeAltPrintScreen] = new UIActionSimpleRuntimePerformTypeAltPrintScreen(this);
+    m_pool[UIActionIndexRT_M_Input_M_Keyboard_T_TypeHostKeyCombo] = new UIActionToggleRuntimePerformTypeHostKeyCombo(this);
     m_pool[UIActionIndexRT_M_Input_M_Mouse] = new UIActionMenuRuntimeMouse(this);
     m_pool[UIActionIndexRT_M_Input_M_Mouse_T_Integration] = new UIActionToggleRuntimeMouseIntegration(this);
@@ -3975,4 +4034,5 @@
     /* 'Type Alt Print Screen' action: */
     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard_S_TypeAltPrintScreen)) || fSeparator;
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard_T_TypeHostKeyCombo)) || fSeparator;
 
     /* Mark menu as valid: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h	(revision 73823)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h	(revision 73841)
@@ -91,4 +91,5 @@
     UIActionIndexRT_M_Input_M_Keyboard_S_TypePrintScreen,
     UIActionIndexRT_M_Input_M_Keyboard_S_TypeAltPrintScreen,
+    UIActionIndexRT_M_Input_M_Keyboard_T_TypeHostKeyCombo,
     UIActionIndexRT_M_Input_M_Mouse,
     UIActionIndexRT_M_Input_M_Mouse_T_Integration,
@@ -327,3 +328,2 @@
 
 #endif /* !___UIActionPoolRuntime_h___ */
-
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 73823)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 73841)
@@ -41,4 +41,5 @@
 #  include "UIDownloaderAdditions.h"
 # endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
+# include "UIHostComboEditor.h"
 # include "UIIconPool.h"
 # include "UIKeyboardHandler.h"
@@ -1030,4 +1031,5 @@
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_TypePrintScreen));
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_TypeAltPrintScreen));
+    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_T_TypeHostKeyCombo));
 
     /* Move actions into running-n-paused actions group: */
@@ -1149,4 +1151,6 @@
     connect(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_TypeAltPrintScreen), SIGNAL(triggered()),
             this, SLOT(sltTypeAltPrintScreen()));
+    connect(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_T_TypeHostKeyCombo), SIGNAL(toggled(bool)),
+            this, SLOT(sltTypeHostKeyComboPressRelease(bool)));
     connect(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration), SIGNAL(toggled(bool)),
             this, SLOT(sltToggleMouseIntegration(bool)));
@@ -1677,4 +1681,29 @@
 }
 
+void UIMachineLogic::sltTypeHostKeyComboPressRelease(bool actionToggle)
+{
+    QList<unsigned> shortCodes = UIHostCombo::modifiersToScanCodes(gEDataManager->hostKeyCombination());
+    QVector <LONG> codes;
+    foreach (unsigned idxCode, shortCodes)
+    {
+        /* Check if we need to include extend code for this key: */
+        if (idxCode & 0x100)
+            codes << 0xE0;
+        if (actionToggle)
+        {
+            /* Add the press code: */
+             codes << (idxCode & 0x7F);
+        }
+        else
+        {
+            /* Add the release code: */
+            codes << ((idxCode & 0x7F) | 0x80);
+        }
+    }
+
+    keyboard().PutScancodes(codes);
+    AssertWrapperOk(keyboard());
+}
+
 void UIMachineLogic::sltTakeSnapshot()
 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 73823)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 73841)
@@ -269,4 +269,5 @@
     void sltTypePrintScreen();
     void sltTypeAltPrintScreen();
+    void sltTypeHostKeyComboPressRelease(bool);
     void sltTakeSnapshot();
     void sltShowInformationDialog();
