]> cloud.milkyroute.net Git - dolphin.git/commitdiff
improved drag & drop support for Ark
authorPeter Penz <peter.penz19@gmail.com>
Sun, 26 Oct 2008 14:39:13 +0000 (14:39 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 26 Oct 2008 14:39:13 +0000 (14:39 +0000)
CCMAIL: haraldhv@stud.ntnu.no

svn path=/trunk/KDE/kdebase/apps/; revision=876115

src/draganddrophelper.cpp

index 6e3fff2fc607516b6d48af77dc8dab6d5e3cd91e..ded92bf04fef0d73db47b4166cdb458f3d389a2c 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <QAbstractItemView>
 #include <QAbstractProxyModel>
+#include <QtDBus>
 #include <QDrag>
 
 bool DragAndDropHelper::isMimeDataSupported(const QMimeData* mimeData)
@@ -75,14 +76,23 @@ void DragAndDropHelper::dropUrls(const KFileItem& destItem,
 {
     const bool dropToItem = !destItem.isNull() && (destItem.isDir() || destItem.isDesktopFile());
     const KUrl destination = dropToItem ? destItem.url() : destPath;
-                             
-    const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
-    const KUrl sourceDir = KUrl(urls.first().directory());
-    if (sourceDir != destination) {
-        if (dropToItem) {
-            KonqOperations::doDrop(destItem, destination, event, widget);
-        } else {
-            KonqOperations::doDrop(KFileItem(), destination, event, widget);
+    
+    const QMimeData* mimeData = event->mimeData();
+    if (mimeData->hasFormat("application/x-kde-dndextract")) {
+        QString remoteDBusClient = mimeData->data("application/x-kde-dndextract");
+        QDBusMessage message = QDBusMessage::createMethodCall(remoteDBusClient, "/DndExtract",
+                                                              "org.kde.DndExtract", "extractFilesTo");
+        message.setArguments(QVariantList() << destination.path());
+        QDBusConnection::sessionBus().call(message);
+    } else {                                
+        const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
+        const KUrl sourceDir = KUrl(urls.first().directory());
+        if (sourceDir != destination) {
+            if (dropToItem) {
+                KonqOperations::doDrop(destItem, destination, event, widget);
+            } else {
+                KonqOperations::doDrop(KFileItem(), destination, event, widget);
+            }
         }
     }
 }