Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 42826)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 42827)
@@ -40,8 +40,9 @@
     , m_pSet(pParent)
     , m_type(type)
+    , m_iCornerRadius(10)
     , m_fClosed(!fOpened)
     , m_pButton(0)
     , m_iAdditionalHeight(0)
-    , m_iCornerRadius(10)
+    , m_fAnimationRunning(false)
     , m_fHovered(false)
     , m_fNameHoveringAccessible(false)
@@ -135,23 +136,22 @@
 void UIGDetailsElement::sltElementToggleStart()
 {
+    /* Mark animation running: */
+    m_fAnimationRunning = true;
+
     /* Setup animation: */
     updateAnimationParameters();
 
-    /* Element closed, we are opening it: */
-    if (m_fClosed)
-    {
-        /* Toggle-state will be updated
-         * on toggle finish signal! */
-    }
-    /* Group opened, we are closing it: */
-    else
-    {
-        /* Update toggle-state: */
-        m_fClosed = true;
-    }
+    /* Toggle element state: */
+    m_fClosed = !m_fClosed;
+    /* Relayout model: */
+    model()->updateLayout();
+    update();
 }
 
 void UIGDetailsElement::sltElementToggleFinish(bool fToggled)
 {
+    /* Mark animation stopped: */
+    m_fAnimationRunning = false;
+
     /* Update toggle-state: */
     m_fClosed = !fToggled;
@@ -470,5 +470,6 @@
 {
     m_iAdditionalHeight = iAdditionalHeight;
-    model()->updateLayout();
+    updateLayout();
+    update();
 }
 
@@ -506,10 +507,8 @@
             iProposedHeight += 2 * iMargin + iTextHeight;
     }
-    else
-    {
-        /* Additional height during animation: */
-        if (m_pButton->isAnimationRunning())
-            iProposedHeight += m_iAdditionalHeight;
-    }
+
+    /* Additional height during animation: */
+    if (m_fAnimationRunning)
+        iProposedHeight += m_iAdditionalHeight;
 
     /* Return result: */
@@ -548,15 +547,5 @@
 {
     /* Paint background: */
-    paintBackground(/* Painter: */
-                    pPainter,
-                    /* Rectangle to paint in: */
-                    pOption->rect,
-                    /* Rounded corners radius: */
-                    m_iCornerRadius,
-                    /* Header height: */
-                    2 * data(ElementData_Margin).toInt() +
-                    data(ElementData_HeaderSize).toSize().height(),
-                    /* Gradient color: */
-                    gradient());
+    paintBackground(pPainter, pOption);
 }
 
@@ -604,5 +593,5 @@
 
     /* Paint text: */
-    if (!m_fClosed && !m_text.isEmpty())
+    if (!m_fClosed && !m_text.isEmpty() && !m_fAnimationRunning)
     {
         /* Prepare variables: */
@@ -679,7 +668,5 @@
 }
 
-/* static */
-void UIGDetailsElement::paintBackground(QPainter *pPainter, const QRect &rect,
-                                        int iRadius, int iHeaderHeight, int iGradient)
+void UIGDetailsElement::paintBackground(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption)
 {
     /* Save painter: */
@@ -687,5 +674,11 @@
 
     /* Prepare variables: */
-    int iFullHeight = rect.height();
+    int iMargin = data(ElementData_Margin).toInt();
+    int iHeaderContentHeight = data(ElementData_HeaderSize).toSize().height();
+    int iHeaderHeight = 2 * iMargin + iHeaderContentHeight;
+    QRect optionRect = pOption->rect;
+    QRect fullRect = !m_fAnimationRunning ? optionRect :
+                     QRect(optionRect.topLeft(), QSize(optionRect.width(), iHeaderHeight + m_iAdditionalHeight));
+    int iFullHeight = fullRect.height();
 
     /* Prepare color: */
@@ -695,20 +688,20 @@
     /* Add clipping: */
     QPainterPath path;
-    path.moveTo(iRadius, 0);
-    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iRadius, 2 * iRadius)).translated(-iRadius, 0), 90, 90);
-    path.lineTo(path.currentPosition().x(), iFullHeight - iRadius);
-    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iRadius, 2 * iRadius)).translated(0, -iRadius), 180, 90);
-    path.lineTo(rect.width() - iRadius, path.currentPosition().y());
-    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iRadius, 2 * iRadius)).translated(-iRadius, -2 * iRadius), 270, 90);
-    path.lineTo(path.currentPosition().x(), iRadius);
-    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iRadius, 2 * iRadius)).translated(-2 * iRadius, -iRadius), 0, 90);
+    path.moveTo(m_iCornerRadius, 0);
+    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-m_iCornerRadius, 0), 90, 90);
+    path.lineTo(path.currentPosition().x(), iFullHeight - m_iCornerRadius);
+    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(0, -m_iCornerRadius), 180, 90);
+    path.lineTo(fullRect.width() - m_iCornerRadius, path.currentPosition().y());
+    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-m_iCornerRadius, -2 * m_iCornerRadius), 270, 90);
+    path.lineTo(path.currentPosition().x(), m_iCornerRadius);
+    path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * m_iCornerRadius, 2 * m_iCornerRadius)).translated(-2 * m_iCornerRadius, -m_iCornerRadius), 0, 90);
     path.closeSubpath();
     pPainter->setClipPath(path);
 
     /* Calculate top rectangle: */
-    QRect tRect = rect;
+    QRect tRect = fullRect;
     tRect.setBottom(tRect.top() + iHeaderHeight);
     /* Calculate bottom rectangle: */
-    QRect bRect = rect;
+    QRect bRect = fullRect;
     bRect.setTop(tRect.bottom());
 
@@ -716,5 +709,5 @@
     QLinearGradient tGradient(tRect.bottomLeft(), tRect.topLeft());
     tGradient.setColorAt(0, windowColor.darker(110));
-    tGradient.setColorAt(1, windowColor.darker(iGradient));
+    tGradient.setColorAt(1, windowColor.darker(gradient()));
 
     /* Paint all the stuff: */
@@ -857,4 +850,8 @@
     int iClosedHeight = minimumHeightHint(true);
     int iAdditionalHeight = iOpenedHeight - iClosedHeight;
+    if (m_fClosed)
+        m_iAdditionalHeight = 0;
+    else
+        m_iAdditionalHeight = iAdditionalHeight;
     m_pButton->setAnimationRange(0, iAdditionalHeight);
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 42826)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h	(revision 42827)
@@ -89,4 +89,10 @@
     void updateHoverAccessibility();
     virtual void updateAppearance() = 0;
+
+protected slots:
+
+    /* Handlers: Collapse/expand stuff: */
+    void sltElementToggleStart();
+    void sltElementToggleFinish(bool fToggled);
 
 protected:
@@ -141,11 +147,5 @@
     UIGraphicsRotatorButton* button() const;
 
-private slots:
-
-    /* Handlers: Collapse/expand stuff: */
-    void sltElementToggleStart();
-    void sltElementToggleFinish(bool fToggled);
-
-private:
+protected:
 
     /* API: Children stuff: */
@@ -168,6 +168,5 @@
     void paintDecorations(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption);
     void paintElementInfo(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption);
-    static void paintBackground(QPainter *pPainter, const QRect &rect,
-                                int iRadius, int iHeaderHeight, int iGradient);
+    void paintBackground(QPainter *pPainter, const QStyleOptionGraphicsItem *pOption);
 
     /* Handlers: Mouse stuff: */
@@ -192,9 +191,12 @@
     QIcon m_icon;
     QString m_strName;
+    UITextTable m_text;
+    int m_iCornerRadius;
+
+    /* Variables: Toggle stuff: */
     bool m_fClosed;
     UIGraphicsRotatorButton *m_pButton;
-    UITextTable m_text;
     int m_iAdditionalHeight;
-    int m_iCornerRadius;
+    bool m_fAnimationRunning;
 
     /* Variables: Hover stuff: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 42826)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp	(revision 42827)
@@ -232,5 +232,5 @@
     if (closed() && m_pPreview->isVisible())
         m_pPreview->hide();
-    if (opened() && !m_pPreview->isVisible())
+    if (opened() && !m_pPreview->isVisible() && !m_fAnimationRunning)
         m_pPreview->show();
 }
