Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 59359)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp	(revision 59360)
@@ -232,10 +232,4 @@
     if (m_views.contains(uScreenId))
     {
-        /* Store new keyboard-captured state value: */
-        m_fIsKeyboardCaptured = true;
-
-        /* Remember which screen had captured keyboard: */
-        m_iKeyboardCaptureViewIndex = uScreenId;
-
 #if defined(Q_WS_MAC)
 
@@ -251,5 +245,5 @@
         // TODO: Is that really needed?
         ::DarwinDisableGlobalHotKeys(true);
-        m_views[m_iKeyboardCaptureViewIndex]->grabKeyboard();
+        m_views[uScreenId]->grabKeyboard();
 
 #elif defined(Q_WS_WIN)
@@ -274,7 +268,7 @@
             {
 # if QT_VERSION >= 0x050000
-                xcb_grab_key_checked(QX11Info::connection(), 0, m_views.value(m_iKeyboardCaptureViewIndex)->viewport()->winId(), XCB_MOD_MASK_ANY, XCB_GRAB_ANY, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
+                xcb_grab_key_checked(QX11Info::connection(), 0, m_views.value(uScreenId)->viewport()->winId(), XCB_MOD_MASK_ANY, XCB_GRAB_ANY, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
 # else /* QT_VERSION < 0x050000 */
-                XGrabKey(QX11Info::display(), AnyKey, AnyModifier, m_windows[m_iKeyboardCaptureViewIndex]->winId(), False, GrabModeAsync, GrabModeAsync);
+                XGrabKey(QX11Info::display(), AnyKey, AnyModifier, m_windows[uScreenId]->winId(), False, GrabModeAsync, GrabModeAsync);
 # endif /* QT_VERSION < 0x050000 */
                 break;
@@ -285,5 +279,5 @@
             {
 # if QT_VERSION >= 0x050000
-                xcb_grab_keyboard(QX11Info::connection(), 0, m_views.value(m_iKeyboardCaptureViewIndex)->viewport()->winId(), XCB_CURRENT_TIME, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
+                xcb_grab_keyboard(QX11Info::connection(), 0, m_views.value(uScreenId)->viewport()->winId(), XCB_CURRENT_TIME, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
 # else /* QT_VERSION < 0x050000 */
                 /* Keyboard grabbing can fail because of some keyboard shortcut is still grabbed by window manager.
@@ -296,5 +290,5 @@
                  * for this window on the queue.  This can prevent problems
                  * including two windows fighting to grab the keyboard. */
-                hWindow = m_windows[m_iKeyboardCaptureViewIndex]->winId();
+                hWindow = m_windows[uScreenId]->winId();
                 if (!checkForX11FocusEvents(hWindow))
                     while (cTriesLeft && XGrabKeyboard(QX11Info::display(),
@@ -313,7 +307,13 @@
 
         /* On other platforms we are just praying Qt method to work: */
-        m_views[m_iKeyboardCaptureViewIndex]->grabKeyboard();
+        m_views[uScreenId]->grabKeyboard();
 
 #endif
+
+        /* Remember which screen had captured keyboard: */
+        m_iKeyboardCaptureViewIndex = uScreenId;
+
+        /* Store new keyboard-captured state value: */
+        m_fIsKeyboardCaptured = true;
 
         /* Notify all the listeners: */
@@ -331,7 +331,4 @@
     if (m_views.contains(m_iKeyboardCaptureViewIndex))
     {
-        /* Store new keyboard-captured state value: */
-        m_fIsKeyboardCaptured = false;
-
 #if defined(Q_WS_MAC)
 
@@ -401,4 +398,7 @@
         /* Forget which screen had captured keyboard: */
         m_iKeyboardCaptureViewIndex = -1;
+
+        /* Store new keyboard-captured state value: */
+        m_fIsKeyboardCaptured = false;
 
         /* Notify all the listeners: */
