Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.cpp	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.cpp	(revision 75897)
@@ -349,5 +349,4 @@
     connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_MoveToGuest), &QAction::triggered,
              this, &UIGuestControlFileManager::sltMoveHostToGuest);
-
     layout ->addWidget(m_pVerticalToolBar);
 }
@@ -393,4 +392,19 @@
         connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_FileOperations), &QAction::toggled,
                 this, &UIGuestControlFileManager::sltPanelActionToggled);
+
+#ifdef TEST_COPY
+
+        m_pToolBar->addSeparator();
+        QAction *pSession = new QAction("session", this);
+        QAction *pCopy = new QAction("Copy", this);
+        m_pToolBar->addAction(pSession);
+        m_pToolBar->addAction(pCopy);
+
+        connect(pSession, &QAction::triggered,
+                this, &UIGuestControlFileManager::sltTestSession);
+        connect(pCopy, &QAction::triggered,
+                this, &UIGuestControlFileManager::sltTestCopy);
+
+#endif
 
 #ifdef VBOX_WS_MAC
@@ -810,3 +824,16 @@
 }
 
+void UIGuestControlFileManager::sltTestSession()
+{
+    createSession("vbox", "password");
+}
+
+void UIGuestControlFileManager::sltTestCopy()
+{
+    QStringList sources;
+    sources << "/home/serkan/misos/xenialpup-7.5-uefi.iso";
+    if ( m_pGuestFileTable)
+        m_pGuestFileTable->copyHostToGuest(sources, false, "/home/vbox/test");
+}
+
 #include "UIGuestControlFileManager.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.h	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.h	(revision 75897)
@@ -125,4 +125,7 @@
     void sltHandleOptionsUpdated();
 
+    void sltTestCopy();
+    void sltTestSession();
+
 private:
 
@@ -170,5 +173,4 @@
     QStringList               getFsObjInfoStringList(const T &fsObjectInfo) const;
     void                      appendLog(const QString &strLog, FileManagerLogType eLogType);
-
     CGuest                    m_comGuest;
     CGuestSession             m_comGuestSession;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp	(revision 75897)
@@ -22,4 +22,5 @@
 /* Qt includes: */
 # include <QHBoxLayout>
+# include <QGridLayout>
 # include <QLabel>
 # include <QMenu>
@@ -65,10 +66,12 @@
     void sigProgressComplete(QUuid progressId);
     void sigProgressFail(QString strErrorString, FileManagerLogType eLogType);
+    void sigFocusIn(QWidget *pWidget);
+    void sigFocusOut(QWidget *pWidget);
 
 protected:
 
     virtual void retranslateUi() /* override */;
-    // virtual void focusInEvent(QFocusEvent *pEvent) /* override */;
-    // virtual void focusOutEvent(QFocusEvent *pEvent) /* override */;
+    virtual void focusInEvent(QFocusEvent *pEvent) /* override */;
+    virtual void focusOutEvent(QFocusEvent *pEvent) /* override */;
 
 private slots:
@@ -79,5 +82,16 @@
 
 private:
-
+    enum OperationStatus
+    {
+        OperationStatus_NotStarted,
+        OperationStatus_Working,
+        OperationStatus_Paused,
+        OperationStatus_Canceled,
+        OperationStatus_Succeded,
+        OperationStatus_Failed,
+        OperationStatus_Invalid,
+        OperationStatus_Max
+
+    };
     void prepare();
     void prepareWidgets();
@@ -85,10 +99,12 @@
     void cleanupEventHandler();
 
+    OperationStatus         m_eStatus;
     CProgress               m_comProgress;
     UIProgressEventHandler *m_pEventHandler;
-    QHBoxLayout            *m_pMainLayout;
+    QGridLayout            *m_pMainLayout;
     QProgressBar           *m_pProgressBar;
     QIToolButton           *m_pCancelButton;
     QILabel                *m_pStatusLabel;
+    QILabel                *m_pPercentageLabel;
 };
 
@@ -100,4 +116,5 @@
 UIFileOperationProgressWidget::UIFileOperationProgressWidget(const CProgress &comProgress, QWidget *pParent /* = 0 */)
     : QIWithRetranslateUI<QFrame>(pParent)
+    , m_eStatus(OperationStatus_NotStarted)
     , m_comProgress(comProgress)
     , m_pEventHandler(0)
@@ -106,4 +123,5 @@
     , m_pCancelButton(0)
     , m_pStatusLabel(0)
+    , m_pPercentageLabel(0)
 {
     prepare();
@@ -134,5 +152,44 @@
 {
     if (m_pCancelButton)
-        m_pCancelButton->setToolTip(UIGuestControlFileManager::tr("Close the pane"));
+        m_pCancelButton->setToolTip(UIGuestControlFileManager::tr("Cancel"));
+
+    switch (m_eStatus)
+    {
+        case OperationStatus_NotStarted:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Not yet started"));
+            break;
+        case OperationStatus_Working:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Working"));
+            break;
+        case OperationStatus_Paused:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Paused"));
+            break;
+        case OperationStatus_Canceled:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Canceled"));
+            break;
+        case OperationStatus_Succeded:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Succeded"));
+            break;
+        case OperationStatus_Failed:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Failed"));
+            break;
+        case OperationStatus_Invalid:
+        case OperationStatus_Max:
+        default:
+            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Invalid"));
+            break;
+    }
+}
+
+void UIFileOperationProgressWidget::focusInEvent(QFocusEvent *pEvent)
+{
+    QFrame::focusInEvent(pEvent);
+    emit sigFocusIn(this);
+}
+
+void UIFileOperationProgressWidget::focusOutEvent(QFocusEvent *pEvent)
+{
+    QFrame::focusOutEvent(pEvent);
+    emit sigFocusOut(this);
 }
 
@@ -146,5 +203,5 @@
 void UIFileOperationProgressWidget::prepareWidgets()
 {
-    m_pMainLayout = new QHBoxLayout;
+    m_pMainLayout = new QGridLayout;
     if (!m_pMainLayout)
         return;
@@ -158,5 +215,5 @@
         if (!m_comProgress.isNull() && !m_comProgress.GetCancelable())
             m_pCancelButton->setEnabled(false);
-        m_pMainLayout->addWidget(m_pCancelButton);
+        m_pMainLayout->addWidget(m_pCancelButton, 0, 0, 1, 1);
     }
 
@@ -166,16 +223,24 @@
         m_pProgressBar->setMinimum(0);
         m_pProgressBar->setMaximum(100);
-        m_pProgressBar->setTextVisible(true);
-        m_pMainLayout->addWidget(m_pProgressBar);
+        /* Hide the QProgressBar's text since in MacOS it never shows: */
+        m_pProgressBar->setTextVisible(false);
+        m_pMainLayout->addWidget(m_pProgressBar, 0, 1, 1, 2);
     }
     m_pStatusLabel = new QILabel;
     if (m_pStatusLabel)
     {
-        m_pMainLayout->addWidget(m_pStatusLabel);
-        m_pStatusLabel->setText(UIGuestControlFileManager::tr("Idle"));
-    }
-    m_pMainLayout->addStretch();
+        m_pStatusLabel->setContextMenuPolicy(Qt::NoContextMenu);
+        m_pMainLayout->addWidget(m_pStatusLabel, 0, 3, 1, 1);
+    }
+
+    m_pPercentageLabel = new QILabel;
+    if (m_pPercentageLabel)
+    {
+        m_pPercentageLabel->setContextMenuPolicy(Qt::NoContextMenu);
+        m_pMainLayout->addWidget(m_pPercentageLabel, 1, 1, 1, 4);
+    }
 
     setLayout(m_pMainLayout);
+    retranslateUi();
 }
 
@@ -189,5 +254,6 @@
     connect(m_pEventHandler, &UIProgressEventHandler::sigProgressTaskComplete,
             this, &UIFileOperationProgressWidget::sltHandleProgressComplete);
-    m_pStatusLabel->setText(UIGuestControlFileManager::tr("Working"));
+    m_eStatus = OperationStatus_Working;
+    retranslateUi();
 }
 
@@ -203,5 +269,6 @@
     Q_UNUSED(iPercent);
     m_pProgressBar->setValue(iPercent);
-
+    if (m_pPercentageLabel)
+        m_pPercentageLabel->setText(QString("%1%").arg(QString::number(iPercent)));
 }
 
@@ -215,13 +282,14 @@
     {
         emit sigProgressFail(UIErrorString::formatErrorInfo(m_comProgress), FileManagerLogType_Error);
-        if (m_pStatusLabel)
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Failed"));
+        m_eStatus = OperationStatus_Failed;
     }
     else
     {
         emit sigProgressComplete(m_comProgress.GetId());
-        if (m_pStatusLabel)
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Succeeded"));
-    }
+        m_eStatus = OperationStatus_Succeded;
+    }
+    if (m_pProgressBar)
+        m_pProgressBar->setEnabled(false);
+    retranslateUi();
 }
 
@@ -232,8 +300,8 @@
     if (m_pCancelButton)
         m_pCancelButton->setEnabled(false);
-    if (m_pStatusLabel)
-        m_pStatusLabel->setText(UIGuestControlFileManager::tr("Canceled"));
     if (m_pProgressBar)
         m_pProgressBar->setEnabled(false);
+    m_eStatus = OperationStatus_Canceled;
+    retranslateUi();
 }
 
@@ -250,4 +318,5 @@
     , m_pContainerLayout(0)
     , m_pContainerSpaceItem(0)
+    , m_pWidgetInFocus(0)
 {
     prepare();
@@ -262,4 +331,5 @@
     if (!pOperationsWidget)
         return;
+    m_widgetSet.insert(pOperationsWidget);
     m_pContainerLayout->insertWidget(m_pContainerLayout->count() - 1, pOperationsWidget);
 
@@ -268,4 +338,9 @@
     connect(pOperationsWidget, &UIFileOperationProgressWidget::sigProgressFail,
             this, &UIGuestControlFileManagerOperationsPanel::sigFileOperationFail);
+
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusIn,
+            this, &UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusIn);
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusOut,
+            this, &UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusOut);
 }
 
@@ -311,11 +386,18 @@
     QMenu *menu = new QMenu(this);
 
-    QAction *pCleanFinished = menu->addAction(UIGuestControlFileManager::tr("Clean Finished"));
-    QAction *pCleanAll = menu->addAction(UIGuestControlFileManager::tr("Clean All"));
-
-    connect(pCleanFinished, &QAction::triggered,
-            this, &UIGuestControlFileManagerOperationsPanel::sltCleanFinished);
-    connect(pCleanAll, &QAction::triggered,
-            this, &UIGuestControlFileManagerOperationsPanel::sltCleanAll);
+    if (m_pWidgetInFocus)
+    {
+        QAction *pRemoveSelected = menu->addAction(UIGuestControlFileManager::tr("Remove Selected"));
+        connect(pRemoveSelected, &QAction::triggered,
+                this, &UIGuestControlFileManagerOperationsPanel::sltRemoveSelected);
+    }
+
+    QAction *pRemoveFinished = menu->addAction(UIGuestControlFileManager::tr("Remove Finished"));
+    QAction *pRemoveAll = menu->addAction(UIGuestControlFileManager::tr("Remove All"));
+
+    connect(pRemoveFinished, &QAction::triggered,
+            this, &UIGuestControlFileManagerOperationsPanel::sltRemoveFinished);
+    connect(pRemoveAll, &QAction::triggered,
+            this, &UIGuestControlFileManagerOperationsPanel::sltRemoveAll);
 
     menu->exec(pEvent->globalPos());
@@ -323,30 +405,52 @@
 }
 
-void UIGuestControlFileManagerOperationsPanel::sltCleanFinished()
-{
-    // QList<int> listOfRowsToRemove;
-    // for (int i = 0; i < m_pListView->count(); ++i)
-    // {
-    //     UIFileOperationProgressWidget* pProgressWidget =
-    //         qobject_cast<UIFileOperationProgressWidget*>(m_pListView->itemWidget(m_pListView->item(i)));
-    //     if (pProgressWidget)
-    //     {
-    //         if (pProgressWidget->isCanceled() || pProgressWidget->isCompleted())
-    //             listOfRowsToRemove << i;
-    //     }
-    // }
-    // foreach (int row, listOfRowsToRemove)
-    // {
-    //     /* This will delete the progress widget as well: */
-    //     QListWidgetItem *pItem = m_pListView->takeItem(row);
-    //     delete m_pListView->itemWidget(pItem);
-    //     delete pItem;
-    // }
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltCleanAll()
-{
-    //m_pListView->clear();
-    //m_pListView->setRowCount(0);
+void UIGuestControlFileManagerOperationsPanel::sltRemoveFinished()
+{
+    QList<UIFileOperationProgressWidget*> widgetsToRemove;
+    foreach (QWidget *pWidget, m_widgetSet)
+    {
+        UIFileOperationProgressWidget *pProgressWidget = qobject_cast<UIFileOperationProgressWidget*>(pWidget);
+        if (pProgressWidget && pProgressWidget->isCompleted())
+        {
+            delete pProgressWidget;
+            widgetsToRemove << pProgressWidget;
+        }
+    }
+    foreach (UIFileOperationProgressWidget *pWidget, widgetsToRemove)
+        m_widgetSet.remove(pWidget);
+}
+
+void UIGuestControlFileManagerOperationsPanel::sltRemoveAll()
+{
+    foreach (QWidget *pWidget, m_widgetSet)
+    {
+        if (pWidget)
+        {
+            delete pWidget;
+        }
+    }
+    m_widgetSet.clear();
+}
+
+void UIGuestControlFileManagerOperationsPanel::sltRemoveSelected()
+{
+    if (!m_pWidgetInFocus)
+        return;
+    delete m_pWidgetInFocus;
+    m_widgetSet.remove(m_pWidgetInFocus);
+}
+
+void UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusIn(QWidget *pWidget)
+{
+    if (!pWidget)
+        return;
+    m_pWidgetInFocus = pWidget;
+}
+
+void UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusOut(QWidget *pWidget)
+{
+    if (!pWidget)
+        return;
+    m_pWidgetInFocus = 0;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.h	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.h	(revision 75897)
@@ -68,6 +68,10 @@
 private slots:
 
-    void sltCleanFinished();
-    void sltCleanAll();
+    void sltRemoveFinished();
+    void sltRemoveAll();
+    void sltRemoveSelected();
+
+    void sltHandleWidgetFocusIn(QWidget *pWidget);
+    void sltHandleWidgetFocusOut(QWidget *pWidget);
 
 private:
@@ -75,8 +79,10 @@
     /** @name Member variables.
       * @{ */
-        QScrollArea *m_pScrollArea;
-        QWidget     *m_pContainerWidget;
-        QVBoxLayout *m_pContainerLayout;
-        QSpacerItem *m_pContainerSpaceItem;
+        QScrollArea    *m_pScrollArea;
+        QWidget        *m_pContainerWidget;
+        QVBoxLayout    *m_pContainerLayout;
+        QSpacerItem    *m_pContainerSpaceItem;
+        QWidget        *m_pWidgetInFocus;
+        QSet<QWidget*>  m_widgetSet;
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.cpp	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.cpp	(revision 75897)
@@ -330,5 +330,6 @@
 }
 
-void UIGuestFileTable::copyHostToGuest(const QStringList &hostSourcePathList, bool fDeleteAfterSuccessfulCopy /* = false */)
+void UIGuestFileTable::copyHostToGuest(const QStringList &hostSourcePathList, bool fDeleteAfterSuccessfulCopy /* = false */,
+                                        const QString &strDestination /* = QString() */)
 {
     if (!checkGuestSession())
@@ -337,5 +338,8 @@
     QVector<QString>  aFilters;
     QVector<QString>  aFlags;
-    QString strDestinationPath = currentDirectoryPath();
+    QString strDestinationPath = strDestination;
+    if (strDestinationPath.isEmpty())
+        strDestinationPath = currentDirectoryPath();
+
     if (strDestinationPath.isEmpty())
     {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.h	(revision 75896)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.h	(revision 75897)
@@ -43,5 +43,6 @@
     void initGuestFileTable(const CGuestSession &session);
     void copyGuestToHost(const QString& hostDestinationPath, bool fDeleteAfterSuccessfulCopy = false);
-    void copyHostToGuest(const QStringList &hostSourcePathList, bool fDeleteAfterSuccessfulCopy = false);
+    void copyHostToGuest(const QStringList &hostSourcePathList, bool fDeleteAfterSuccessfulCopy = false,
+                         const QString &strDestination = QString());
 
 signals:
