Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 59344)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 59345)
@@ -436,5 +436,5 @@
 #endif /* VBOX_WITH_DEBUGGER_GUI */
 
-#if defined(Q_WS_WIN)
+#ifdef Q_WS_WIN
 /** Tell keyboard event handler to skip host keyboard events. Used for HID LEDs sync
  * when on Windows host a keyboard event is generated in order to change corresponding LED. */
@@ -443,4 +443,8 @@
     m_fSkipKeyboardEvents = fSkip;
 }
+#endif /* Q_WS_WIN */
+
+#if QT_VERSION < 0x050000
+# if defined(Q_WS_WIN)
 
 bool UIKeyboardHandler::winEventFilter(MSG *pMsg, ulong uScreenId)
@@ -595,102 +599,5 @@
 }
 
-#elif defined(Q_WS_X11)
-# if QT_VERSION >= 0x050000
-
-bool UIKeyboardHandler::nativeEventFilter(void *pMessage, ulong uScreenId)
-{
-    /* Cast to XCB event: */
-    xcb_generic_event_t *pEvent = static_cast<xcb_generic_event_t*>(pMessage);
-
-    /* Check if some system event should be filtered out.
-     * Returning @c true means filtering-out,
-     * Returning @c false means passing event to Qt. */
-    bool fResult = false; /* Pass to Qt by default. */
-    switch (pEvent->response_type & ~0x80)
-    {
-        /* Watch for keyboard behavior: */
-        case XCB_KEY_PRESS:
-        case XCB_KEY_RELEASE:
-        {
-            /* Cast to XCB key-event: */
-            xcb_key_press_event_t *pKeyEvent = static_cast<xcb_key_press_event_t*>(pMessage);
-
-            /* Translate the keycode to a PC scancode: */
-            unsigned scan = handleXKeyEvent(QX11Info::display(), pKeyEvent->detail);
-
-            /* Scancodes 0x00 (no valid translation) and 0x80 (extended flag) are ignored: */
-            if (!(scan & 0x7F))
-            {
-                fResult = true;
-                break;
-            }
-
-//            /* Fix for http://www.virtualbox.org/ticket/1296:
-//             * when X11 sends events for repeated keys, it always inserts an XKeyRelease before the XKeyPress. */
-//            XEvent returnEvent;
-//            if ((pEvent->type == XKeyRelease) && (XCheckIfEvent(pEvent->xkey.display, &returnEvent,
-//                UIKeyboardHandlerCompEvent, (XPointer)pEvent) == True))
-//            {
-//                XPutBackEvent(pEvent->xkey.display, &returnEvent);
-//                fResult = true;
-//                break;
-//            }
-
-            /* Detect common scancode flags: */
-            int flags = 0;
-            if (scan >> 8)
-                flags |= KeyExtended;
-            if ((pEvent->response_type & ~0x80) == XCB_KEY_PRESS)
-                flags |= KeyPressed;
-
-            /* Remove the extended flag: */
-            scan &= 0x7F;
-
-            /* Special Korean keys must send scancode 0xF1/0xF2
-             * when pressed and nothing when released. */
-            if (scan == 0x71 || scan == 0x72)
-            {
-                if ((pEvent->response_type & ~0x80) == XCB_KEY_RELEASE)
-                {
-                    fResult = true;
-                    break;
-                }
-                /* Re-create the bizarre scancode: */
-                scan |= 0x80;
-            }
-
-            /* Translate the keycode to a keysym: */
-            KeySym ks = ::wrapXkbKeycodeToKeysym(QX11Info::display(), pKeyEvent->detail, 0, 0);
-
-            /* Detect particular scancode flags: */
-            switch (ks)
-            {
-                case XK_Print:
-                    flags |= KeyPrint;
-                    break;
-                case XK_Pause:
-                    if (pKeyEvent->state & ControlMask)
-                    {
-                        ks = XK_Break;
-                        flags |= KeyExtended;
-                        scan = 0x46;
-                    }
-                    else
-                        flags |= KeyPause;
-                    break;
-            }
-
-            /* Handle key-event: */
-            fResult = keyEvent(ks, scan, flags, uScreenId);
-            break;
-        }
-        default:
-            break;
-    }
-    /* Return result: */
-    return fResult;
-}
-
-# else /* QT_VERSION < 0x050000 */
+# elif defined(Q_WS_X11)
 
 static Bool UIKeyboardHandlerCompEvent(Display*, XEvent *pEvent, XPointer pvArg)
@@ -816,6 +723,102 @@
 }
 
-# endif /* QT_VERSION < 0x050000 */
-#endif /* Q_WS_X11 */
+# endif /* Q_WS_X11 */
+#else /* QT_VERSION >= 0x050000 */
+
+bool UIKeyboardHandler::nativeEventFilter(void *pMessage, ulong uScreenId)
+{
+    /* Cast to XCB event: */
+    xcb_generic_event_t *pEvent = static_cast<xcb_generic_event_t*>(pMessage);
+
+    /* Check if some system event should be filtered out.
+     * Returning @c true means filtering-out,
+     * Returning @c false means passing event to Qt. */
+    bool fResult = false; /* Pass to Qt by default. */
+    switch (pEvent->response_type & ~0x80)
+    {
+        /* Watch for keyboard behavior: */
+        case XCB_KEY_PRESS:
+        case XCB_KEY_RELEASE:
+        {
+            /* Cast to XCB key-event: */
+            xcb_key_press_event_t *pKeyEvent = static_cast<xcb_key_press_event_t*>(pMessage);
+
+            /* Translate the keycode to a PC scancode: */
+            unsigned scan = handleXKeyEvent(QX11Info::display(), pKeyEvent->detail);
+
+            /* Scancodes 0x00 (no valid translation) and 0x80 (extended flag) are ignored: */
+            if (!(scan & 0x7F))
+            {
+                fResult = true;
+                break;
+            }
+
+//            /* Fix for http://www.virtualbox.org/ticket/1296:
+//             * when X11 sends events for repeated keys, it always inserts an XKeyRelease before the XKeyPress. */
+//            XEvent returnEvent;
+//            if ((pEvent->type == XKeyRelease) && (XCheckIfEvent(pEvent->xkey.display, &returnEvent,
+//                UIKeyboardHandlerCompEvent, (XPointer)pEvent) == True))
+//            {
+//                XPutBackEvent(pEvent->xkey.display, &returnEvent);
+//                fResult = true;
+//                break;
+//            }
+
+            /* Detect common scancode flags: */
+            int flags = 0;
+            if (scan >> 8)
+                flags |= KeyExtended;
+            if ((pEvent->response_type & ~0x80) == XCB_KEY_PRESS)
+                flags |= KeyPressed;
+
+            /* Remove the extended flag: */
+            scan &= 0x7F;
+
+            /* Special Korean keys must send scancode 0xF1/0xF2
+             * when pressed and nothing when released. */
+            if (scan == 0x71 || scan == 0x72)
+            {
+                if ((pEvent->response_type & ~0x80) == XCB_KEY_RELEASE)
+                {
+                    fResult = true;
+                    break;
+                }
+                /* Re-create the bizarre scancode: */
+                scan |= 0x80;
+            }
+
+            /* Translate the keycode to a keysym: */
+            KeySym ks = ::wrapXkbKeycodeToKeysym(QX11Info::display(), pKeyEvent->detail, 0, 0);
+
+            /* Detect particular scancode flags: */
+            switch (ks)
+            {
+                case XK_Print:
+                    flags |= KeyPrint;
+                    break;
+                case XK_Pause:
+                    if (pKeyEvent->state & ControlMask)
+                    {
+                        ks = XK_Break;
+                        flags |= KeyExtended;
+                        scan = 0x46;
+                    }
+                    else
+                        flags |= KeyPause;
+                    break;
+            }
+
+            /* Handle key-event: */
+            fResult = keyEvent(ks, scan, flags, uScreenId);
+            break;
+        }
+        default:
+            break;
+    }
+    /* Return result: */
+    return fResult;
+}
+
+#endif /* QT_VERSION >= 0x050000 */
 
 /* Machine state-change handler: */
@@ -885,14 +888,14 @@
     , m_fPassCADtoGuest(false)
     , m_fDebuggerActive(false)
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_MAC)
+    , m_darwinKeyModifiers(0)
+    , m_fKeyboardGrabbed(false)
+    , m_iKeyboardGrabViewIndex(-1)
+#elif defined(Q_WS_WIN)
     , m_bIsHostkeyInCapture(false)
     , m_iKeyboardHookViewIndex(-1)
     , m_fSkipKeyboardEvents(false)
     , m_pAltGrMonitor(0)
-#elif defined(Q_WS_MAC)
-    , m_darwinKeyModifiers(0)
-    , m_fKeyboardGrabbed(false)
-    , m_iKeyboardGrabViewIndex(-1)
-#endif /* Q_WS_MAC */
+#endif /* Q_WS_WIN */
     , m_cMonitors(1)
 {
@@ -1158,62 +1161,5 @@
 }
 
-#if defined(Q_WS_WIN)
-
-LRESULT CALLBACK UIKeyboardHandler::lowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
-{
-    if (nCode == HC_ACTION && m_spKeyboardHandler && m_spKeyboardHandler->winLowKeyboardEvent(wParam, *(KBDLLHOOKSTRUCT*)lParam))
-        return 1;
-
-    return CallNextHookEx(NULL, nCode, wParam, lParam);
-}
-
-bool UIKeyboardHandler::winLowKeyboardEvent(UINT msg, const KBDLLHOOKSTRUCT &event)
-{
-    /* Check what related machine-view was NOT unregistered yet: */
-    if (!m_views.contains(m_iKeyboardHookViewIndex))
-        return false;
-
-    /* It's possible that a key has been pressed while the keyboard was not
-     * captured, but is being released under the capture. Detect this situation
-     * and do not pass on the key press to the virtual machine. */
-    uint8_t what_pressed =      (event.flags & 0x01)
-                             && (event.vkCode != VK_RSHIFT)
-                           ? IsExtKeyPressed : IsKeyPressed;
-    if (   (event.flags & 0x80) /* released */
-        && (   (   UIHostCombo::toKeyCodeList(m_globalSettings.hostCombo()).contains(event.vkCode)
-                && !m_bIsHostkeyInCapture)
-            ||    (  m_pressedKeys[event.scanCode & 0x7F]
-                   & (IsKbdCaptured | what_pressed))
-               == what_pressed))
-        return false;
-
-    if (!m_fIsKeyboardCaptured)
-        return false;
-
-    /* For normal user applications, Windows defines AltGr to be the same as
-     * LControl + RAlt.  Without a low-level hook it is hard to recognise the
-     * additional LControl event inserted, but in a hook we recognise it by
-     * its special 0x21D scan code. */
-    if (   m_views[m_iKeyboardHookViewIndex]->hasFocus()
-        && ((event.scanCode & ~0x80) == 0x21D))
-        return true;
-
-    MSG message;
-    message.hwnd = (HWND)m_views[m_iKeyboardHookViewIndex]->winId();
-    message.message = msg;
-    message.wParam = event.vkCode;
-    message.lParam = 1 | (event.scanCode & 0xFF) << 16 | (event.flags & 0xFF) << 24;
-
-    /* Windows sets here the extended bit when the Right Shift key is pressed,
-     * which is totally wrong. Undo it. */
-    if (event.vkCode == VK_RSHIFT)
-        message.lParam &= ~0x1000000;
-
-    /* We suppose here that this hook is always called on the main GUI thread */
-    long dummyResult;
-    return m_views[m_iKeyboardHookViewIndex]->winEvent(&message, &dummyResult);
-}
-
-#elif defined(Q_WS_MAC)
+#if defined(Q_WS_MAC)
 
 void UIKeyboardHandler::darwinGrabKeyboardEvents(bool fGrab)
@@ -1363,5 +1309,62 @@
 }
 
-#endif
+#elif defined(Q_WS_WIN)
+
+LRESULT CALLBACK UIKeyboardHandler::lowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
+{
+    if (nCode == HC_ACTION && m_spKeyboardHandler && m_spKeyboardHandler->winLowKeyboardEvent(wParam, *(KBDLLHOOKSTRUCT*)lParam))
+        return 1;
+
+    return CallNextHookEx(NULL, nCode, wParam, lParam);
+}
+
+bool UIKeyboardHandler::winLowKeyboardEvent(UINT msg, const KBDLLHOOKSTRUCT &event)
+{
+    /* Check what related machine-view was NOT unregistered yet: */
+    if (!m_views.contains(m_iKeyboardHookViewIndex))
+        return false;
+
+    /* It's possible that a key has been pressed while the keyboard was not
+     * captured, but is being released under the capture. Detect this situation
+     * and do not pass on the key press to the virtual machine. */
+    uint8_t what_pressed =      (event.flags & 0x01)
+                             && (event.vkCode != VK_RSHIFT)
+                           ? IsExtKeyPressed : IsKeyPressed;
+    if (   (event.flags & 0x80) /* released */
+        && (   (   UIHostCombo::toKeyCodeList(m_globalSettings.hostCombo()).contains(event.vkCode)
+                && !m_bIsHostkeyInCapture)
+            ||    (  m_pressedKeys[event.scanCode & 0x7F]
+                   & (IsKbdCaptured | what_pressed))
+               == what_pressed))
+        return false;
+
+    if (!m_fIsKeyboardCaptured)
+        return false;
+
+    /* For normal user applications, Windows defines AltGr to be the same as
+     * LControl + RAlt.  Without a low-level hook it is hard to recognise the
+     * additional LControl event inserted, but in a hook we recognise it by
+     * its special 0x21D scan code. */
+    if (   m_views[m_iKeyboardHookViewIndex]->hasFocus()
+        && ((event.scanCode & ~0x80) == 0x21D))
+        return true;
+
+    MSG message;
+    message.hwnd = (HWND)m_views[m_iKeyboardHookViewIndex]->winId();
+    message.message = msg;
+    message.wParam = event.vkCode;
+    message.lParam = 1 | (event.scanCode & 0xFF) << 16 | (event.flags & 0xFF) << 24;
+
+    /* Windows sets here the extended bit when the Right Shift key is pressed,
+     * which is totally wrong. Undo it. */
+    if (event.vkCode == VK_RSHIFT)
+        message.lParam &= ~0x1000000;
+
+    /* We suppose here that this hook is always called on the main GUI thread */
+    long dummyResult;
+    return m_views[m_iKeyboardHookViewIndex]->winEvent(&message, &dummyResult);
+}
+
+#endif /* Q_WS_WIN */
 
 /**
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h	(revision 59344)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h	(revision 59345)
@@ -44,7 +44,8 @@
 class UIMachineView;
 class CKeyboard;
-#if defined(Q_WS_WIN)
+#ifdef Q_WS_WIN
 class WinAltGrMonitor;
-#elif defined(Q_WS_X11)
+#endif /* Q_WS_WIN */
+#ifdef Q_WS_X11
 # if QT_VERSION < 0x050000
 typedef union _XEvent XEvent;
@@ -98,17 +99,17 @@
 #endif
 
-    /* External event-filters: */
-#if defined(Q_WS_WIN)
+#ifdef Q_WS_WIN
+    void winSkipKeyboardEvents(bool fSkip);
+#endif /* Q_WS_WIN */
+
+#if QT_VERSION < 0x050000
+# if defined(Q_WS_WIN)
     bool winEventFilter(MSG *pMsg, ulong uScreenId);
-    void winSkipKeyboardEvents(bool fSkip);
-    /** Holds the object monitoring key event stream for problematic AltGr events. */
-    WinAltGrMonitor *m_pAltGrMonitor;
-#elif defined(Q_WS_X11)
-# if QT_VERSION >= 0x050000
+# elif defined(Q_WS_X11)
+    bool x11EventFilter(XEvent *pEvent, ulong uScreenId);
+# endif /* Q_WS_X11 */
+#else /* QT_VERSION >= 0x050000 */
     bool nativeEventFilter(void *pMessage, ulong uScreenId);
-# else /* QT_VERSION < 0x050000 */
-    bool x11EventFilter(XEvent *pEvent, ulong uScreenId);
-# endif /* QT_VERSION < 0x050000 */
-#endif /* Q_WS_X11 */
+#endif /* QT_VERSION >= 0x050000 */
 
 protected slots:
@@ -141,12 +142,13 @@
     /* Event handler for registered machine-view(s): */
     bool eventFilter(QObject *pWatchedObject, QEvent *pEvent);
-#if defined(Q_WS_WIN)
+
+#if defined(Q_WS_MAC)
+    void darwinGrabKeyboardEvents(bool fGrab);
+    static bool darwinEventHandlerProc(const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser);
+    bool darwinKeyboardEvent(const void *pvCocoaEvent, EventRef inEvent);
+#elif defined(Q_WS_WIN)
     static LRESULT CALLBACK lowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
     bool winLowKeyboardEvent(UINT msg, const KBDLLHOOKSTRUCT &event);
-#elif defined(Q_WS_MAC)
-    void darwinGrabKeyboardEvents(bool fGrab);
-    bool darwinKeyboardEvent(const void *pvCocoaEvent, EventRef inEvent);
-    static bool darwinEventHandlerProc(const void *pvCocoaEvent, const void *pvCarbonEvent, void *pvUser);
-#endif
+#endif /* Q_WS_WIN */
 
     bool keyEventCADHandled(uint8_t uScan);
@@ -198,5 +200,11 @@
     bool m_fDebuggerActive : 1;
 
-#if defined(Q_WS_WIN)
+#if defined(Q_WS_MAC)
+    /* The current modifier key mask. Used to figure out which modifier
+     * key was pressed when we get a kEventRawKeyModifiersChanged event. */
+    UInt32 m_darwinKeyModifiers;
+    bool m_fKeyboardGrabbed;
+    int m_iKeyboardGrabViewIndex;
+#elif defined(Q_WS_WIN)
     /* Currently this is used in winLowKeyboardEvent() only: */
     bool m_bIsHostkeyInCapture;
@@ -207,11 +215,7 @@
     /* A flag that used to tell kbd event filter to ignore keyboard events */
     bool m_fSkipKeyboardEvents;
-#elif defined(Q_WS_MAC)
-    /* The current modifier key mask. Used to figure out which modifier
-     * key was pressed when we get a kEventRawKeyModifiersChanged event. */
-    UInt32 m_darwinKeyModifiers;
-    bool m_fKeyboardGrabbed;
-    int m_iKeyboardGrabViewIndex;
-#endif /* Q_WS_MAC */
+    /** Holds the object monitoring key event stream for problematic AltGr events. */
+    WinAltGrMonitor *m_pAltGrMonitor;
+#endif /* Q_WS_WIN */
 
     ULONG m_cMonitors;
