Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp	(revision 43783)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp	(revision 43784)
@@ -226,4 +226,17 @@
 }
 
+void UIGChooserItemGroup::sltHandleGeometryChange()
+{
+    /* Which is new geometry? */
+    QRectF newGeometry = geometry();
+
+    /* Should we update visible name? */
+    if (m_previousGeometry.width() != newGeometry.width())
+        recacheVisibleName();
+
+    /* Remember new geometry: */
+    m_previousGeometry = newGeometry;
+}
+
 void UIGChooserItemGroup::sltNameEditingFinished()
 {
@@ -251,4 +264,5 @@
     /* Set new name / update model: */
     m_strName = strNewName;
+    recacheVisibleName();
     model()->saveGroupSettings();
 }
@@ -328,36 +342,5 @@
         case GroupItemData_MinorSpacing: return 3;
         /* Texts: */
-        case GroupItemData_Name:
-        {
-            /* Prepare variables: */
-            int iHorizontalMargin = data(GroupItemData_HorizonalMargin).toInt();
-            int iMajorSpacing = data(GroupItemData_MajorSpacing).toInt();
-            int iToggleButtonWidth = data(GroupItemData_ToggleButtonSize).toSize().width();
-            int iEnterButtonWidth = data(GroupItemData_EnterButtonSize).toSize().width();
-            int iExitButtonWidth = data(GroupItemData_ExitButtonSize).toSize().width();
-            int iGroupPixmapWidth = data(GroupItemData_GroupPixmapSize).toSize().width();
-            int iMachinePixmapWidth = data(GroupItemData_MachinePixmapSize).toSize().width();
-            int iGroupCountTextWidth = data(GroupItemData_GroupCountTextSize).toSize().width();
-            int iMachineCountTextWidth = data(GroupItemData_MachineCountTextSize).toSize().width();
-            int iMaximumWidth = (int)geometry().width();
-            QString strGroupCountText = data(GroupItemData_GroupCountText).toString();
-            QString strMachineCountText = data(GroupItemData_MachineCountText).toString();
-
-            /* Calculate name width: */
-            iMaximumWidth -= 2 * iHorizontalMargin;
-            if (isRoot())
-                iMaximumWidth -= (iExitButtonWidth + iMajorSpacing);
-            else
-            {
-                iMaximumWidth -= (iToggleButtonWidth + iMajorSpacing);
-                if (isHovered())
-                    iMaximumWidth -= (iEnterButtonWidth + iMajorSpacing);
-            }
-            if (isHovered() && !strGroupCountText.isEmpty())
-                iMaximumWidth -= (iGroupPixmapWidth + iGroupCountTextWidth);
-            if (isHovered() && !strMachineCountText.isEmpty())
-                iMaximumWidth -= (iMachinePixmapWidth + iMachineCountTextWidth);
-            return compressText(m_nameFont, model()->paintDevice(), m_strName, iMaximumWidth);
-        }
+        case GroupItemData_Name: return m_strVisibleName;
         case GroupItemData_GroupCountText: return m_groupItems.isEmpty() ? QString() : QString::number(m_groupItems.size());
         case GroupItemData_MachineCountText: return m_machineItems.isEmpty() ? QString() : QString::number(m_machineItems.size());
@@ -479,4 +462,7 @@
     m_machinesPixmap = QPixmap(":/machine_16px.png");
 
+    /* Geometry change handler: */
+    connect(this, SIGNAL(geometryChanged()), this, SLOT(sltHandleGeometryChange()));
+
     /* Non root item only: */
     if (!isRoot())
@@ -523,4 +509,44 @@
     foreach (UIGChooserItem *pMachineItem, pFrom->items(UIGChooserItemType_Machine))
         new UIGChooserItemMachine(pTo, pMachineItem->toMachineItem());
+}
+
+void UIGChooserItemGroup::recacheVisibleName()
+{
+    /* Prepare variables: */
+    int iHorizontalMargin = data(GroupItemData_HorizonalMargin).toInt();
+    int iMajorSpacing = data(GroupItemData_MajorSpacing).toInt();
+    int iToggleButtonWidth = data(GroupItemData_ToggleButtonSize).toSize().width();
+    int iEnterButtonWidth = data(GroupItemData_EnterButtonSize).toSize().width();
+    int iExitButtonWidth = data(GroupItemData_ExitButtonSize).toSize().width();
+    int iGroupPixmapWidth = data(GroupItemData_GroupPixmapSize).toSize().width();
+    int iMachinePixmapWidth = data(GroupItemData_MachinePixmapSize).toSize().width();
+    int iGroupCountTextWidth = data(GroupItemData_GroupCountTextSize).toSize().width();
+    int iMachineCountTextWidth = data(GroupItemData_MachineCountTextSize).toSize().width();
+    int iMaximumWidth = geometry().width();
+
+    /* Calculate name width: */
+    iMaximumWidth -= 2 * iHorizontalMargin;
+    if (isRoot())
+    {
+        iMaximumWidth -= (iExitButtonWidth + iMajorSpacing);
+    }
+    else
+    {
+        iMaximumWidth -= (iToggleButtonWidth + iMajorSpacing);
+        if (isHovered())
+            iMaximumWidth -= iEnterButtonWidth;
+    }
+    if (isHovered())
+    {
+        iMaximumWidth -= iMajorSpacing;
+        if (iGroupCountTextWidth != 0)
+            iMaximumWidth -= (iGroupPixmapWidth + iGroupCountTextWidth);
+        if (iMachineCountTextWidth != 0)
+            iMaximumWidth -= (iMachinePixmapWidth + iMachineCountTextWidth);
+    }
+
+    /* Recache name: */
+    m_strVisibleName = compressText(m_nameFont, model()->paintDevice(), m_strName, iMaximumWidth);
+    update();
 }
 
@@ -1273,4 +1299,8 @@
 void UIGChooserItemGroup::hoverMoveEvent(QGraphicsSceneHoverEvent *pEvent)
 {
+    /* Skip if hovered: */
+    if (isHovered())
+        return;
+
     /* Prepare variables: */
     QPoint pos = pEvent->pos().toPoint();
@@ -1278,10 +1308,26 @@
     int iHeaderHeight = data(GroupItemData_FullHeaderSize).toSize().height();
     int iFullHeaderHeight = 2 * iMargin + iHeaderHeight;
-    /* Check if group should be highlighted: */
-    if ((pos.y() < iFullHeaderHeight) && !isHovered())
-    {
-        setHovered(true);
-        emit sigHoverEnter();
-    }
+    /* Skip if hovered part out of the header: */
+    if (pos.y() >= iFullHeaderHeight)
+        return;
+
+    /* Call to base-class: */
+    UIGChooserItem::hoverMoveEvent(pEvent);
+
+    /* Update visible name: */
+    recacheVisibleName();
+}
+
+void UIGChooserItemGroup::hoverLeaveEvent(QGraphicsSceneHoverEvent *pEvent)
+{
+    /* Skip if not hovered: */
+    if (!isHovered())
+        return;
+
+    /* Call to base-class: */
+    UIGChooserItem::hoverLeaveEvent(pEvent);
+
+    /* Update visible name: */
+    recacheVisibleName();
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h	(revision 43783)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h	(revision 43784)
@@ -83,4 +83,7 @@
 
 private slots:
+
+    /* Handler: Geometry change stuff: */
+    void sltHandleGeometryChange();
 
     /* Handler: Name editing stuff: */
@@ -129,4 +132,7 @@
     static void copyContent(UIGChooserItemGroup *pFrom, UIGChooserItemGroup *pTo);
 
+    /* Helper: Recache stuff: */
+    void recacheVisibleName();
+
     /* Helper: Translate stuff: */
     void retranslateUi();
@@ -173,4 +179,5 @@
     /* Helper: Event handling stuff: */
     void hoverMoveEvent(QGraphicsSceneHoverEvent *pEvent);
+    void hoverLeaveEvent(QGraphicsSceneHoverEvent *pEvent);
 
     /* Helpers: Paint stuff: */
@@ -204,4 +211,6 @@
     int m_iBlackoutDarkness;
     /* Cached values: */
+    QRectF m_previousGeometry;
+    QString m_strVisibleName;
     QFont m_nameFont;
     QFont m_infoFont;
