Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp	(revision 43630)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp	(revision 43631)
@@ -30,4 +30,9 @@
     , m_pModel(pParent)
 {
+    /* Setup shift map: */
+    m_shiftMap[Qt::Key_Up] = UIItemShiftSize_Item;
+    m_shiftMap[Qt::Key_Down] = UIItemShiftSize_Item;
+    m_shiftMap[Qt::Key_Home] = UIItemShiftSize_Full;
+    m_shiftMap[Qt::Key_End] = UIItemShiftSize_Full;
 }
 
@@ -71,23 +76,9 @@
 #endif /* !Q_WS_MAC */
             {
-                /* Get focus and his parent: */
-                UIGChooserItem *pFocusItem = model()->focusItem();
-                UIGChooserItem *pParentItem = pFocusItem->parentItem();
-                UIGChooserItemType type = (UIGChooserItemType)pFocusItem->type();
-                QList<UIGChooserItem*> items = pParentItem->items(type);
-                int iFocusPosition = items.indexOf(pFocusItem);
-                if (iFocusPosition > 0)
-                {
-                    if (pEvent->key() == Qt::Key_Up)
-                        items.move(iFocusPosition, iFocusPosition - 1);
-                    else if (pEvent->key() == Qt::Key_Home)
-                        items.move(iFocusPosition, 0);
-                    pParentItem->setItems(items, type);
-                    model()->updateNavigation();
-                    model()->updateLayout();
-                }
-                /* Filter-out this event: */
+                /* Shift item up: */
+                shift(UIItemShiftDirection_Up, m_shiftMap[pEvent->key()]);
                 return true;
             }
+
             /* Was shift modifier pressed? */
 #ifdef Q_WS_MAC
@@ -133,4 +124,5 @@
                 }
             }
+
             /* There is no modifiers pressed? */
 #ifdef Q_WS_MAC
@@ -181,23 +173,9 @@
 #endif /* !Q_WS_MAC */
             {
-                /* Get focus and his parent: */
-                UIGChooserItem *pFocusItem = model()->focusItem();
-                UIGChooserItem *pParentItem = pFocusItem->parentItem();
-                UIGChooserItemType type = (UIGChooserItemType)pFocusItem->type();
-                QList<UIGChooserItem*> items = pParentItem->items(type);
-                int iFocusPosition = items.indexOf(pFocusItem);
-                if (iFocusPosition < items.size() - 1)
-                {
-                    if (pEvent->key() == Qt::Key_Down)
-                        items.move(iFocusPosition, iFocusPosition + 1);
-                    else if (pEvent->key() == Qt::Key_End)
-                        items.move(iFocusPosition, items.size() - 1);
-                    pParentItem->setItems(items, type);
-                    model()->updateNavigation();
-                    model()->updateLayout();
-                }
-                /* Filter-out this event: */
+                /* Shift item down: */
+                shift(UIItemShiftDirection_Down, m_shiftMap[pEvent->key()]);
                 return true;
             }
+
             /* Was shift modifier pressed? */
 #ifdef Q_WS_MAC
@@ -243,4 +221,5 @@
                 }
             }
+
             /* There is no modifiers pressed? */
 #ifdef Q_WS_MAC
@@ -384,2 +363,55 @@
 }
 
+void UIGChooserHandlerKeyboard::shift(UIItemShiftDirection direction, UIItemShiftSize size) const
+{
+    /* Get focus-item and his parent: */
+    UIGChooserItem *pFocusItem = model()->focusItem();
+    UIGChooserItem *pParentItem = pFocusItem->parentItem();
+    /* Get the list of focus-item neighbours: */
+    UIGChooserItemType type = (UIGChooserItemType)pFocusItem->type();
+    QList<UIGChooserItem*> items = pParentItem->items(type);
+    /* Get focus-item position: */
+    int iFocusPosition = items.indexOf(pFocusItem);
+
+    /* Depending on direction: */
+    switch (direction)
+    {
+        case UIItemShiftDirection_Up:
+        {
+            /* Is focus-item shiftable? */
+            if (iFocusPosition == 0)
+                return;
+            /* Shift item: */
+            switch (size)
+            {
+                case UIItemShiftSize_Item: items.move(iFocusPosition, iFocusPosition - 1); break;
+                case UIItemShiftSize_Full: items.move(iFocusPosition, 0); break;
+                default: break;
+            }
+            break;
+        }
+        case UIItemShiftDirection_Down:
+        {
+            /* Is focus-item shiftable? */
+            if (iFocusPosition == items.size() - 1)
+                return;
+            /* Shift item: */
+            switch (size)
+            {
+                case UIItemShiftSize_Item: items.move(iFocusPosition, iFocusPosition + 1); break;
+                case UIItemShiftSize_Full: items.move(iFocusPosition, items.size() - 1); break;
+                default: break;
+            }
+            break;
+        }
+        default:
+            break;
+    }
+
+    /* Reassign items: */
+    pParentItem->setItems(items, type);
+    /* Update model: */
+    model()->updateNavigation();
+    model()->updateLayout();
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h	(revision 43630)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h	(revision 43631)
@@ -22,4 +22,5 @@
 /* Qt includes: */
 #include <QObject>
+#include <QMap>
 
 /* Forward declarations: */
@@ -32,4 +33,18 @@
     UIKeyboardEventType_Press,
     UIKeyboardEventType_Release
+};
+
+/* Item shift direction: */
+enum UIItemShiftDirection
+{
+    UIItemShiftDirection_Up,
+    UIItemShiftDirection_Down
+};
+
+/* Item shift size: */
+enum UIItemShiftSize
+{
+    UIItemShiftSize_Item,
+    UIItemShiftSize_Full
 };
 
@@ -56,6 +71,10 @@
     bool handleKeyRelease(QKeyEvent *pEvent) const;
 
+    /* Helper: Item shift delegate: */
+    void shift(UIItemShiftDirection direction, UIItemShiftSize size) const;
+
     /* Variables: */
     UIGChooserModel *m_pModel;
+    QMap<int, UIItemShiftSize> m_shiftMap;
 };
 
