]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Adjust to Ark's drag'n'drop D-Bus interface changes.
authorRaphael Kubo da Costa <rakuco@FreeBSD.org>
Fri, 24 Aug 2012 01:58:05 +0000 (22:58 -0300)
committerRaphael Kubo da Costa <rakuco@FreeBSD.org>
Sun, 26 Aug 2012 04:28:59 +0000 (01:28 -0300)
Ark's drag'n'drop D-Bus interface needs to be changed: so far, the object
path was always /DndExtract, but this does not work if Ark is being used as
an embedded KPart (in Konqueror or Rekonq, for example), as all tabs will
end up calling QDBusConnection::registerObject() with the same path. Only
the first call will work, and the result is that dragging and dropping from
any tab previewing an archive with Ark will extract from the first archive
being previewed.

To fix that, applications that accept the application/x-kde-dndextract
mimetype should now be adjusted to check the
application/x-kde-ark-dndextract-service and
application/x-kde-ark-dndextract-path ones instead; the former contains the
same service information that used to be passed, while the latter tells
which object path should be talked to.

This is the Dolphin part of the change, which also needs to be made to
the folderview plasmoid.

REVIEW: 106131
CCBUG: 304860

src/views/draganddrophelper.cpp

index 45e5076f67d622f03fe7091530631496197311d5..f81d4d0bfe9d3b63e70745c772fc30878f4201b2 100644 (file)
@@ -35,10 +35,13 @@ QString DragAndDropHelper::dropUrls(const KFileItem& destItem, const KUrl& destU
     }
 
     const QMimeData* mimeData = event->mimeData();
-    if (mimeData->hasFormat("application/x-kde-dndextract")) {
-        const QString remoteDBusClient = mimeData->data("application/x-kde-dndextract");
-        QDBusMessage message = QDBusMessage::createMethodCall(remoteDBusClient, "/DndExtract",
-                                                              "org.kde.DndExtract", "extractSelectedFilesTo");
+    if (mimeData->hasFormat("application/x-kde-ark-dndextract-service") &&
+        mimeData->hasFormat("application/x-kde-ark-dndextract-path")) {
+        const QString remoteDBusClient = mimeData->data("application/x-kde-ark-dndextract-service");
+        const QString remoteDBusPath = mimeData->data("application/x-kde-ark-dndextract-path");
+
+        QDBusMessage message = QDBusMessage::createMethodCall(remoteDBusClient, remoteDBusPath,
+                                                              "org.kde.ark.DndExtract", "extractSelectedFilesTo");
         message.setArguments(QVariantList() << destUrl.pathOrUrl());
         QDBusConnection::sessionBus().call(message);
     } else if (!destItem.isNull() && (destItem.isDir() || destItem.isDesktopFile())) {