Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp	(revision 47015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp	(revision 47016)
@@ -33,8 +33,11 @@
                          bool fProposeAutoConfirmation)
     : QWidget(pParent)
+    , m_fPolished(false)
     , m_iLayoutMargin(10), m_iLayoutSpacing(5)
     , m_strMessage(strMessage), m_strDetails(strDetails)
     , m_fProposeAutoConfirmation(fProposeAutoConfirmation)
     , m_buttonDescriptions(buttonDescriptions)
+    , m_fShown(false)
+    , m_pShowAnimation(0)
     , m_fHovered(false)
     , m_iDefaultOpacity(180)
@@ -91,4 +94,17 @@
 }
 
+void UIPopupPane::setMinimumSizeHint(const QSize &minimumSizeHint)
+{
+    /* Make sure the size-hint is changed: */
+    if (m_minimumSizeHint == minimumSizeHint)
+        return;
+
+    /* Assign new size-hint: */
+    m_minimumSizeHint = minimumSizeHint;
+
+    /* Notify parent popup-stack: */
+    emit sigSizeHintChanged();
+}
+
 void UIPopupPane::updateSizeHint()
 {
@@ -119,6 +135,12 @@
     }
 
-    /* Compose minimum size-hint: */
-    m_minimumSizeHint = QSize(iMinimumWidthHint, iMinimumHeightHint);
+    /* Compose minimum size-hints: */
+    m_hiddenSizeHint = QSize(iMinimumWidthHint, 1);
+    m_shownSizeHint = QSize(iMinimumWidthHint, iMinimumHeightHint);
+    m_minimumSizeHint = m_fShown ? m_shownSizeHint : m_hiddenSizeHint;
+
+    /* Update 'show/hide' animation: */
+    if (m_pShowAnimation)
+        m_pShowAnimation->update();
 }
 
@@ -152,4 +174,10 @@
 }
 
+void UIPopupPane::sltMarkAsShown()
+{
+    /* Mark popup-pane as 'shown': */
+    m_fShown = true;
+}
+
 void UIPopupPane::sltAdjustGeometry()
 {
@@ -212,4 +240,10 @@
 void UIPopupPane::prepareAnimation()
 {
+    /* Install 'show' animation for 'minimumSizeHint' property: */
+    connect(this, SIGNAL(sigToShow()), this, SIGNAL(sigShow()), Qt::QueuedConnection);
+    m_pShowAnimation = UIAnimation::installPropertyAnimation(this, "minimumSizeHint", "hiddenSizeHint", "shownSizeHint",
+                                                             SIGNAL(sigShow()), SIGNAL(sigHide()));
+    connect(m_pShowAnimation, SIGNAL(sigStateEnteredFinal()), this, SLOT(sltMarkAsShown()));
+
     /* Install 'hover' animation for 'opacity' property: */
     UIAnimation::installPropertyAnimation(this, "opacity", "defaultOpacity", "hoveredOpacity",
@@ -274,4 +308,24 @@
     /* Do not filter anything: */
     return false;
+}
+
+void UIPopupPane::showEvent(QShowEvent *pEvent)
+{
+    /* Call to base-class: */
+    QWidget::showEvent(pEvent);
+
+    /* Polish border: */
+    if (m_fPolished)
+        return;
+    m_fPolished = true;
+
+    /* Call to polish event: */
+    polishEvent(pEvent);
+}
+
+void UIPopupPane::polishEvent(QShowEvent*)
+{
+    /* Emit signal to start *show* animation: */
+    emit sigToShow();
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h	(revision 47015)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h	(revision 47016)
@@ -27,4 +27,5 @@
 class UIPopupPaneTextPane;
 class UIPopupPaneButtonPane;
+class UIAnimation;
 
 /* Popup-pane prototype: */
@@ -32,4 +33,7 @@
 {
     Q_OBJECT;
+    Q_PROPERTY(QSize hiddenSizeHint READ hiddenSizeHint);
+    Q_PROPERTY(QSize shownSizeHint READ shownSizeHint);
+    Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint WRITE setMinimumSizeHint);
     Q_PROPERTY(int defaultOpacity READ defaultOpacity);
     Q_PROPERTY(int hoveredOpacity READ hoveredOpacity);
@@ -37,4 +41,10 @@
 
 signals:
+
+    /* Notifiers: Show/hide stuff: */
+    void sigToShow();
+    void sigToHide();
+    void sigShow();
+    void sigHide();
 
     /* Notifiers: Hover stuff: */
@@ -69,4 +79,5 @@
     /* API: Layout stuff: */
     QSize minimumSizeHint() const { return m_minimumSizeHint; }
+    void setMinimumSizeHint(const QSize &minimumSizeHint);
     void updateSizeHint();
     void setDesiredWidth(int iWidth);
@@ -74,4 +85,7 @@
 
 private slots:
+
+    /* Handler: Show/hide stuff: */
+    void sltMarkAsShown();
 
     /* Handler: Layout stuff: */
@@ -91,5 +105,7 @@
     bool eventFilter(QObject *pWatched, QEvent *pEvent);
 
-    /* Handler: Event stuff: */
+    /* Handlers: Event stuff: */
+    void showEvent(QShowEvent *pEvent);
+    void polishEvent(QShowEvent *pEvent);
     void paintEvent(QPaintEvent *pEvent);
 
@@ -101,4 +117,8 @@
     void done(int iResultCode);
 
+    /* Property: Show/hide stuff: */
+    QSize hiddenSizeHint() const { return m_hiddenSizeHint; }
+    QSize shownSizeHint() const { return m_shownSizeHint; }
+
     /* Property: Hover stuff: */
     int defaultOpacity() const { return m_iDefaultOpacity; }
@@ -108,4 +128,5 @@
 
     /* Variables: General stuff: */
+    bool m_fPolished;
     const QString m_strId;
     const int m_iLayoutMargin;
@@ -121,4 +142,10 @@
     /* Variables: Button stuff: */
     QMap<int, QString> m_buttonDescriptions;
+
+    /* Variables: Show/hide stuff: */
+    bool m_fShown;
+    UIAnimation *m_pShowAnimation;
+    QSize m_hiddenSizeHint;
+    QSize m_shownSizeHint;
 
     /* Variables: Hover stuff: */
