Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp	(revision 45696)
@@ -65,5 +65,5 @@
 }
 
-void UIPopupCenter::message(QWidget *pParent, const QString &strId,
+void UIPopupCenter::message(QWidget *pParent, const QString &strPopupPaneID,
                             const QString &strMessage, const QString &strDetails,
                             int iButton1 /*= 0*/, int iButton2 /*= 0*/,
@@ -72,5 +72,5 @@
                             bool fProposeAutoConfirmation /*= false*/)
 {
-    showPopupPane(pParent, strId,
+    showPopupPane(pParent, strPopupPaneID,
                   strMessage, strDetails,
                   iButton1, iButton2,
@@ -79,9 +79,9 @@
 }
 
-void UIPopupCenter::error(QWidget *pParent, const QString &strId,
+void UIPopupCenter::error(QWidget *pParent, const QString &strPopupPaneID,
                           const QString &strMessage, const QString &strDetails,
                           bool fProposeAutoConfirmation /*= false*/)
 {
-    message(pParent, strId,
+    message(pParent, strPopupPaneID,
             strMessage, strDetails,
             AlertButton_Ok | AlertButtonOption_Default | AlertButtonOption_Escape /* 1st button */,
@@ -92,14 +92,14 @@
 }
 
-void UIPopupCenter::alert(QWidget *pParent, const QString &strId,
+void UIPopupCenter::alert(QWidget *pParent, const QString &strPopupPaneID,
                           const QString &strMessage,
                           bool fProposeAutoConfirmation /*= false*/)
 {
-    error(pParent, strId,
+    error(pParent, strPopupPaneID,
           strMessage, QString(),
           fProposeAutoConfirmation);
 }
 
-void UIPopupCenter::question(QWidget *pParent, const QString &strId,
+void UIPopupCenter::question(QWidget *pParent, const QString &strPopupPaneID,
                              const QString &strMessage,
                              int iButton1 /*= 0*/, int iButton2 /*= 0*/,
@@ -108,5 +108,5 @@
                              bool fProposeAutoConfirmation /*= false*/)
 {
-    message(pParent, strId,
+    message(pParent, strPopupPaneID,
             strMessage, QString(),
             iButton1, iButton2,
@@ -115,5 +115,5 @@
 }
 
-void UIPopupCenter::questionBinary(QWidget *pParent, const QString &strId,
+void UIPopupCenter::questionBinary(QWidget *pParent, const QString &strPopupPaneID,
                                    const QString &strMessage,
                                    const QString &strOkButtonText /*= QString()*/,
@@ -121,5 +121,5 @@
                                    bool fProposeAutoConfirmation /*= false*/)
 {
-    question(pParent, strId,
+    question(pParent, strPopupPaneID,
              strMessage,
              AlertButton_Ok | AlertButtonOption_Default,
@@ -182,12 +182,22 @@
     }
 
-    /* Compose button description map: */
-    QMap<int, QString> buttonDescriptions;
-    if (iButton1 != 0 && !buttonDescriptions.contains(iButton1))
-        buttonDescriptions[iButton1] = strButtonText1;
-    if (iButton2 != 0 && !buttonDescriptions.contains(iButton2))
-        buttonDescriptions[iButton2] = strButtonText2;
-    /* Update corresponding popup-pane: */
-    pPopupStack->updatePopupPane(strPopupPaneID, strMessage, strDetails, buttonDescriptions, fProposeAutoConfirmation);
+    /* Looking for the corresponding popup-pane: */
+    if (pPopupStack->exists(strPopupPaneID))
+    {
+        /* Update existing one: */
+        pPopupStack->updatePopupPane(strPopupPaneID, strMessage, strDetails);
+    }
+    else
+    {
+        /* Compose button description map: */
+        QMap<int, QString> buttonDescriptions;
+        if (iButton1 != 0 && !buttonDescriptions.contains(iButton1))
+            buttonDescriptions[iButton1] = strButtonText1;
+        if (iButton2 != 0 && !buttonDescriptions.contains(iButton2))
+            buttonDescriptions[iButton2] = strButtonText2;
+        /* Create new one: */
+        pPopupStack->createPopupPane(strPopupPaneID, strMessage, strDetails,
+                                     buttonDescriptions, fProposeAutoConfirmation);
+    }
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h	(revision 45696)
@@ -46,7 +46,7 @@
 
     /* API: Main message function.
-     * Provides up to two buttons.
+     * Provides one-two buttons.
      * Used directly only in exceptional cases: */
-    void message(QWidget *pParent, const QString &strId,
+    void message(QWidget *pParent, const QString &strPopupPaneID,
                  const QString &strMessage, const QString &strDetails,
                  int iButton1 = 0, int iButton2 = 0,
@@ -57,5 +57,5 @@
     /* API: Wrapper to 'message' function.
      * Provides single OK button: */
-    void error(QWidget *pParent, const QString &strId,
+    void error(QWidget *pParent, const QString &strPopupPaneID,
                const QString &strMessage, const QString &strDetails,
                bool fProposeAutoConfirmation = false);
@@ -63,5 +63,5 @@
     /* API: Wrapper to 'error' function.
      * Omits details: */
-    void alert(QWidget *pParent, const QString &strId,
+    void alert(QWidget *pParent, const QString &strPopupPaneID,
                const QString &strMessage,
                bool fProposeAutoConfirmation = false);
@@ -70,5 +70,5 @@
      * Omits details, provides up to two buttons.
      * Used directly only in exceptional cases: */
-    void question(QWidget *pParent, const QString &strId,
+    void question(QWidget *pParent, const QString &strPopupPaneID,
                   const QString &strMessage,
                   int iButton1 = 0, int iButton2 = 0,
@@ -79,5 +79,5 @@
     /* API: Wrapper to 'question' function,
      * Question providing two buttons (OK and Cancel by default): */
-    void questionBinary(QWidget *pParent, const QString &strId,
+    void questionBinary(QWidget *pParent, const QString &strPopupPaneID,
                         const QString &strMessage,
                         const QString &strOkButtonText = QString(),
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp	(revision 45696)
@@ -38,43 +38,7 @@
 #include <VBox/sup.h>
 
-void UIAnimationFramework::installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName,
-                                                    int iStartValue, int iFinalValue,
-                                                    const char *pSignalForward, const char *pSignalBackward,
-                                                    int iAnimationDuration /*= 300*/)
-{
-    /* State-machine: */
-    QStateMachine *pStateMachine = new QStateMachine(pParent);
-    /* State-machine 'start' state: */
-    QState *pStateStart = new QState(pStateMachine);
-    /* State-machine 'final' state: */
-    QState *pStateFinal = new QState(pStateMachine);
-
-    /* State-machine 'forward' animation: */
-    QPropertyAnimation *pForwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent);
-    pForwardAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
-    pForwardAnimation->setDuration(iAnimationDuration);
-    pForwardAnimation->setStartValue(iStartValue);
-    pForwardAnimation->setEndValue(iFinalValue);
-    /* State-machine 'backward' animation: */
-    QPropertyAnimation *pBackwardAnimation = new QPropertyAnimation(pParent, strPropertyName, pParent);
-    pBackwardAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
-    pBackwardAnimation->setDuration(iAnimationDuration);
-    pBackwardAnimation->setStartValue(iFinalValue);
-    pBackwardAnimation->setEndValue(iStartValue);
-
-    /* State-machine state transitions: */
-    QSignalTransition *pDefaultToHovered = pStateStart->addTransition(pParent, pSignalForward, pStateFinal);
-    pDefaultToHovered->addAnimation(pForwardAnimation);
-    QSignalTransition *pHoveredToDefault = pStateFinal->addTransition(pParent, pSignalBackward, pStateStart);
-    pHoveredToDefault->addAnimation(pBackwardAnimation);
-
-    /* Initial state is 'start': */
-    pStateMachine->setInitialState(pStateStart);
-    /* Start hover-machine: */
-    pStateMachine->start();
-}
-
-QStateMachine* UIAnimationFramework::installPropertyAnimation(QWidget *pTarget, const QByteArray &strPropertyName,
-                                                              const QByteArray &strValuePropertyNameStart, const QByteArray &strValuePropertyNameFinal,
+
+QStateMachine* UIAnimationFramework::installPropertyAnimation(QWidget *pTarget, const char *pszPropertyName,
+                                                              const char *pszValuePropertyNameStart, const char *pszValuePropertyNameFinal,
                                                               const char *pSignalForward, const char *pSignalBackward,
                                                               bool fReversive /*= false*/, int iAnimationDuration /*= 300*/)
@@ -88,15 +52,15 @@
 
     /* State-machine 'forward' animation: */
-    QPropertyAnimation *pForwardAnimation = new QPropertyAnimation(pTarget, strPropertyName, pStateMachine);
+    QPropertyAnimation *pForwardAnimation = new QPropertyAnimation(pTarget, pszPropertyName, pStateMachine);
     pForwardAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
     pForwardAnimation->setDuration(iAnimationDuration);
-    pForwardAnimation->setStartValue(pTarget->property(strValuePropertyNameStart));
-    pForwardAnimation->setEndValue(pTarget->property(strValuePropertyNameFinal));
+    pForwardAnimation->setStartValue(pTarget->property(pszValuePropertyNameStart));
+    pForwardAnimation->setEndValue(pTarget->property(pszValuePropertyNameFinal));
     /* State-machine 'backward' animation: */
-    QPropertyAnimation *pBackwardAnimation = new QPropertyAnimation(pTarget, strPropertyName, pStateMachine);
+    QPropertyAnimation *pBackwardAnimation = new QPropertyAnimation(pTarget, pszPropertyName, pStateMachine);
     pBackwardAnimation->setEasingCurve(QEasingCurve(QEasingCurve::InOutCubic));
     pBackwardAnimation->setDuration(iAnimationDuration);
-    pBackwardAnimation->setStartValue(pTarget->property(strValuePropertyNameFinal));
-    pBackwardAnimation->setEndValue(pTarget->property(strValuePropertyNameStart));
+    pBackwardAnimation->setStartValue(pTarget->property(pszValuePropertyNameFinal));
+    pBackwardAnimation->setEndValue(pTarget->property(pszValuePropertyNameStart));
 
     /* State-machine state transitions: */
@@ -129,5 +93,5 @@
     void sigFocusLeave();
 
-    /* Notifier: Animation stuff: */
+    /* Notifier: Layout stuff: */
     void sigSizeHintChanged();
 
@@ -148,5 +112,5 @@
     bool isAutoConfirmed() const;
 
-    /* API: Size-hint stuff: */
+    /* API: Layout stuff: */
     QSize minimumSizeHint() const;
     void setMinimumSizeHint(const QSize &minimumSizeHint);
@@ -155,5 +119,5 @@
 private slots:
 
-    /* Handlers: Animation stuff: */
+    /* Handlers: Focus stuff: */
     void sltFocusEnter();
     void sltFocusLeave();
@@ -168,10 +132,12 @@
     void retranslateUi();
 
-    /* Helper: Size-hint stuff: */
+    /* Helper: Layout stuff: */
+    void updateSizeHint();
+
+    /* Property: Focus stuff: */
     QSize collapsedSizeHint() const { return m_collapsedSizeHint; }
     QSize expandedSizeHint() const { return m_expandedSizeHint; }
-    void updateSizeHint();
-
-    /* Variables: Size-hint stuff: */
+
+    /* Variables: Layout stuff: */
     const int m_iLayoutMargin;
     const int m_iLayoutSpacing;
@@ -188,5 +154,5 @@
     bool m_fProposeAutoConfirmation;
 
-    /* Variables: Animation stuff: */
+    /* Variables: Focus stuff: */
     bool m_fFocused;
     QObject *m_pAnimation;
@@ -233,5 +199,5 @@
     static QIcon defaultIcon(int iButtonID);
 
-    /* Widgets: */
+    /* Variables: Widget stuff: */
     QHBoxLayout *m_pButtonLayout;
     QMap<int, QString> m_buttonDescriptions;
@@ -383,6 +349,5 @@
 {
     /* Install 'hover' animation for 'opacity' property: */
-    UIAnimationFramework::installPropertyAnimation(this, QByteArray("opacity"),
-                                                   m_iDefaultOpacity, m_iHoveredOpacity,
+    UIAnimationFramework::installPropertyAnimation(this, "opacity", "defaultOpacity", "hoveredOpacity",
                                                    SIGNAL(sigHoverEnter()), SIGNAL(sigHoverLeave()));
     /* Prepare content: */
@@ -681,4 +646,5 @@
         m_pLabel->setFont(currentFont);
         m_pLabel->setWordWrap(true);
+        m_pLabel->setFocusPolicy(Qt::NoFocus);
     }
     /* Create check-box: */
@@ -693,4 +659,5 @@
 #endif /* !Q_WS_MAC */
         m_pAutoConfirmCheckBox->setFont(currentFont);
+        m_pAutoConfirmCheckBox->setFocusPolicy(Qt::NoFocus);
     }
     /* Translate UI finally: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h	(revision 45696)
@@ -29,7 +29,4 @@
 /* Forward declaration: */
 class QStateMachine;
-class QLabel;
-class QPushButton;
-class UIPopupPane;
 class UIPopupPaneTextPane;
 class UIPopupPaneButtonPane;
@@ -39,12 +36,6 @@
 {
     /* API: Animation stuff: */
-    void installPropertyAnimation(QWidget *pParent, const QByteArray &strPropertyName,
-                                  int iStartValue, int iFinalValue,
-                                  const char *pSignalForward, const char *pSignalBackward,
-                                  int iAnimationDuration = 300);
-
-    /* API: Animation stuff: */
-    QStateMachine* installPropertyAnimation(QWidget *pTarget, const QByteArray &strPropertyName,
-                                            const QByteArray &strValuePropertyNameStart, const QByteArray &strValuePropertyNameFinal,
+    QStateMachine* installPropertyAnimation(QWidget *pTarget, const char *pszPropertyName,
+                                            const char *pszValuePropertyNameStart, const char *pszValuePropertyNameFinal,
                                             const char *pSignalForward, const char *pSignalBackward,
                                             bool fReversive = false, int iAnimationDuration = 300);
@@ -55,4 +46,6 @@
 {
     Q_OBJECT;
+    Q_PROPERTY(int defaultOpacity READ defaultOpacity);
+    Q_PROPERTY(int hoveredOpacity READ hoveredOpacity);
     Q_PROPERTY(int opacity READ opacity WRITE setOpacity);
 
@@ -116,4 +109,6 @@
 
     /* Property: Hover stuff: */
+    int defaultOpacity() const { return m_iDefaultOpacity; }
+    int hoveredOpacity() const { return m_iHoveredOpacity; }
     int opacity() const { return m_iOpacity; }
     void setOpacity(int iOpacity) { m_iOpacity = iOpacity; update(); }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp	(revision 45696)
@@ -40,34 +40,54 @@
 }
 
-void UIPopupStack::updatePopupPane(const QString &strPopupPaneID,
+bool UIPopupStack::exists(const QString &strPopupPaneID) const
+{
+    /* Is there already popup-pane with the same ID? */
+    return m_panes.contains(strPopupPaneID);
+}
+
+void UIPopupStack::createPopupPane(const QString &strPopupPaneID,
                                    const QString &strMessage, const QString &strDetails,
                                    const QMap<int, QString> &buttonDescriptions,
                                    bool fProposeAutoConfirmation)
 {
-    /* Looking for the corresponding popup-pane: */
-    UIPopupPane *pPopupPane = 0;
-    /* Is there already popup-pane with the same ID? */
+    /* Make sure there is no such popup-pane already: */
     if (m_panes.contains(strPopupPaneID))
     {
-        /* Get existing one: */
-        pPopupPane = m_panes[strPopupPaneID];
-        /* Update message and details: */
-        pPopupPane->setMessage(strMessage);
-        pPopupPane->setDetails(strDetails);
-    }
-    /* There is no popup-pane with the same ID? */
-    else
-    {
-        /* Create new one: */
-        pPopupPane = m_panes[strPopupPaneID] = new UIPopupPane(this,
-                                                               strMessage, strDetails,
-                                                               buttonDescriptions,
-                                                               fProposeAutoConfirmation);
-        /* Attach popup-pane connection: */
-        connect(pPopupPane, SIGNAL(sigSizeHintChanged()), this, SLOT(sltAdjustGeometry()));
-        connect(pPopupPane, SIGNAL(sigDone(int)), this, SLOT(sltPopupPaneDone(int)));
-        /* Show popup-pane: */
-        pPopupPane->show();
-    }
+        AssertMsgFailed(("Popup-pane already exists!"));
+        return;
+    }
+
+    /* Create new popup-pane: */
+    UIPopupPane *pPopupPane = m_panes[strPopupPaneID] = new UIPopupPane(this,
+                                                                        strMessage, strDetails,
+                                                                        buttonDescriptions,
+                                                                        fProposeAutoConfirmation);
+    /* Attach popup-pane connection: */
+    connect(pPopupPane, SIGNAL(sigSizeHintChanged()), this, SLOT(sltAdjustGeometry()));
+    connect(pPopupPane, SIGNAL(sigDone(int)), this, SLOT(sltPopupPaneDone(int)));
+    /* Show popup-pane: */
+    pPopupPane->show();
+
+    /* Propagate desired width: */
+    setDesiredWidth(parentWidget()->width());
+    /* Adjust geometry: */
+    sltAdjustGeometry();
+}
+
+void UIPopupStack::updatePopupPane(const QString &strPopupPaneID,
+                                   const QString &strMessage, const QString &strDetails)
+{
+    /* Make sure there is such popup-pane already: */
+    if (!m_panes.contains(strPopupPaneID))
+    {
+        AssertMsgFailed(("Popup-pane doesn't exists!"));
+        return;
+    }
+
+    /* Get existing popup-pane: */
+    UIPopupPane *pPopupPane = m_panes[strPopupPaneID];
+    /* Update message and details: */
+    pPopupPane->setMessage(strMessage);
+    pPopupPane->setDetails(strDetails);
 
     /* Propagate desired width: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h	(revision 45695)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h	(revision 45696)
@@ -35,5 +35,5 @@
 
     /* Notifier: Popup-pane stuff: */
-    void sigPopupPaneDone(QString strID, int iResultCode);
+    void sigPopupPaneDone(QString strPopupPaneID, int iResultCode);
 
     /* Notifier: Popup-stack stuff: */
@@ -46,8 +46,11 @@
 
     /* API: Popup-pane stuff: */
-    void updatePopupPane(const QString &strPopupPaneID,
+    bool exists(const QString &strPopupPaneID) const;
+    void createPopupPane(const QString &strPopupPaneID,
                          const QString &strMessage, const QString &strDetails,
                          const QMap<int, QString> &buttonDescriptions,
                          bool fProposeAutoConfirmation);
+    void updatePopupPane(const QString &strPopupPaneID,
+                         const QString &strMessage, const QString &strDetails);
 
 private slots:
