#include "dolphin_export.h"
+#include <KFileItem>
+
#include <QList>
#include <QString>
#include <QUrl>
class QDropEvent;
class QMimeData;
class QWidget;
-namespace KIO { class DropJob; }
+namespace KIO
+{
+class DropJob;
+}
class DOLPHIN_EXPORT DragAndDropHelper
{
* @return KIO::DropJob pointer or null in case the destUrl is contained
* in the mimeData url list.
*/
- static KIO::DropJob* dropUrls(const QUrl& destUrl,
- QDropEvent* event,
- QWidget *window);
+ static KIO::DropJob *dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window);
+
+ /**
+ * Checks if the destination supports dropping.
+ *
+ * @param destItem The item destination.
+ * @return True if the destination is a directory and is writable, or it's a desktop file.
+ * False otherwise.
+ */
+ static bool supportsDropping(const KFileItem &destItem);
+
+ /**
+ * Updates the drop action according to whether the destination supports dropping.
+ * If supportsDropping(destUrl), set dropAction = proposedAction. Otherwise, set
+ * dropAction = Qt::IgnoreAction.
+ *
+ * @param event Drop event.
+ * @param destUrl Destination URL.
+ */
+ static void updateDropAction(QDropEvent *event, const QUrl &destUrl);
/**
* @return True if destUrl is contained in the urls parameter.
*/
- static bool urlListMatchesUrl(const QList<QUrl>& urls, const QUrl& destUrl);
+ static bool urlListMatchesUrl(const QList<QUrl> &urls, const QUrl &destUrl);
/**
* @return True if mimeData contains Ark's drag and drop mime types.
*/
static bool isArkDndMimeType(const QMimeData *mimeData);
- static QString arkDndServiceMimeType() { return QStringLiteral("application/x-kde-ark-dndextract-service"); }
- static QString arkDndPathMimeType() { return QStringLiteral("application/x-kde-ark-dndextract-path"); }
+ static QString arkDndServiceMimeType()
+ {
+ return QStringLiteral("application/x-kde-ark-dndextract-service");
+ }
+ static QString arkDndPathMimeType()
+ {
+ return QStringLiteral("application/x-kde-ark-dndextract-path");
+ }
/**
* clear the internal cache.
*/
static void clearUrlListMatchesUrlCache();
+
private:
/**
* Stores the results of the expensive checks made in urlListMatchesUrl.