Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp	(revision 56554)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp	(revision 56555)
@@ -280,6 +280,6 @@
 
     /* Invoke this handler as data needs to be retrieved. */
-    connect(m_pMIMEData, SIGNAL(getData(QString, QVariant::Type)),
-            this, SLOT(sltGetData(QString, QVariant::Type)));
+    connect(m_pMIMEData, SIGNAL(getData(QString, QVariant::Type, QVariant&)),
+            this, SLOT(sltGetData(QString, QVariant::Type, QVariant&)));
 
     /* Inform the MIME data object of any changes in the current action. */
@@ -468,5 +468,5 @@
                                              QVariant       &vaData)
 {
-    LogFlowFunc(("Retrieving data as type=%s (variant type=%ld)\n",
+    LogFlowFunc(("Retrieving data as type=%s (variant type=%RU32)\n",
                  strMimeType.toAscii().constData(), vaType));
 
@@ -503,5 +503,6 @@
                         case QVariant::String:
                         {
-                            vaData = QVariant(QString(reinterpret_cast<const char*>(vecData.constData())));
+                            vaData = QVariant::fromValue(QString(reinterpret_cast<const char *>(vecData.constData())));
+                            Assert(vaData.type() == QVariant::Type::String);
                             break;
                         }
@@ -510,5 +511,7 @@
                         {
                             QByteArray ba(reinterpret_cast<const char*>(vecData.constData()), vecData.size());
-                            vaData = QVariant(ba);
+
+                            vaData = QVariant::fromValue(ba);
+                            Assert(vaData.type() == QVariant::Type::ByteArray);
                             break;
                         }
@@ -519,5 +522,6 @@
                             QStringList lstString = strData.split("\r\n", QString::SkipEmptyParts);
 
-                            vaData = QVariant(lstString);
+                            vaData = QVariant::fromValue(lstString);
+                            Assert(vaData.type() == QVariant::Type::StringList);
                             break;
                         }
@@ -556,21 +560,11 @@
 }
 
-/**
- * Called by UIDnDMIMEData (Linux, OS X, Solaris) to start retrieving the actual data
- * from the guest. This function will block and show a modal progress dialog until
- * the data transfer is complete.
- *
- * @return QVariant with data retrieved, if any.
- * @param strMimeType           MIME data type.
- * @param vaType                Qt's variant type of the MIME data.
- */
-QVariant UIDnDHandler::sltGetData(const QString        &strMimeType,
-                                        QVariant::Type  vaType)
-{
-    QVariant vaData;
+int UIDnDHandler::sltGetData(const QString        &strMimeType,
+                                   QVariant::Type  vaType,
+                                   QVariant       &vaData)
+{
     int rc = retrieveDataInternal(Qt::CopyAction, strMimeType, vaType, vaData);
-    NOREF(rc);
     LogFlowFuncLeaveRC(rc);
-    return vaData;
+    return rc;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h	(revision 56554)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h	(revision 56555)
@@ -97,5 +97,15 @@
 public slots:
 
-    QVariant                   sltGetData(const QString &strMimeType, QVariant::Type vaType);
+    /**
+     * Called by UIDnDMIMEData (Linux, OS X, Solaris) to start retrieving the actual data
+     * from the guest. This function will block and show a modal progress dialog until
+     * the data transfer is complete.
+     *
+     * @return IPRT status code.
+     * @param strMimeType           MIME data type.
+     * @param vaType                Qt's variant type of the MIME data.
+     * @param vaData                Reference to QVariant where to store the retrieved data.
+     */
+    int                        sltGetData(const QString &strMimeType, QVariant::Type vaType, QVariant &vaData);
 
 protected:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp	(revision 56554)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp	(revision 56555)
@@ -125,14 +125,20 @@
     LogRel3(("DnD: State=%ld, Action=0x%x, fCanDrop=%RTbool\n", m_enmState, m_curAction, fCanDrop));
 
-    if (!fCanDrop)
-    {
-        LogFlowFunc(("Skipping request, state=%RU32 ...\n", m_enmState));
-        return QVariant(QVariant::Invalid); /* Return a NULL variant. */
-    }
-
-    QVariant vaData = emit getData(strMIMEType, vaType);
-
-    LogRel3(("DnD: Returning data of type '%s'\n", vaData.typeName()));
-    return vaData;
+    if (fCanDrop)
+    {
+        QVariant vaData;
+        int rc = emit getData(strMIMEType, vaType, vaData);
+
+        LogRel3(("DnD: Returning data of type=%s (requested MIME type=%s, requested type=%s), rc=%Rrc\n",
+                 vaData.typeName() ? vaData.typeName() : "<Invalid>",
+                 strMIMEType.toStdString().c_str(),
+                 QVariant::typeToName(vaType) ? QVariant::typeToName(vaType) : "<Invalid>", rc));
+
+        if (RT_SUCCESS(rc))
+            return vaData;
+    }
+
+    LogFlowFunc(("Skipping request, state=%RU32 ...\n", m_enmState));
+    return QVariant(QVariant::Invalid); /* Return a NULL variant. */
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h	(revision 56554)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h	(revision 56555)
@@ -65,5 +65,5 @@
 signals:
 
-     int getData(const QString &strMIMEType, QVariant::Type vaType) const;
+     int getData(const QString &strMIMEType, QVariant::Type vaType, QVariant &vaData) const;
 
 public slots:
