X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5735251bbb28e6d96f3e43abd9302efc28d6829e..11289b4fc3efbc074b668d4516cd896f8ade9761:/src/draganddrophelper.cpp diff --git a/src/draganddrophelper.cpp b/src/draganddrophelper.cpp index ded92bf04..ff319dfb8 100644 --- a/src/draganddrophelper.cpp +++ b/src/draganddrophelper.cpp @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2007 by Peter Penz * - * Copyright (C) 2007 by David Faure * * * + * Copyright (C) 2007 by David Faure * + * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * @@ -24,6 +25,8 @@ #include #include #include +#include +#include #include #include @@ -31,7 +34,19 @@ #include #include -bool DragAndDropHelper::isMimeDataSupported(const QMimeData* mimeData) +class DragAndDropHelperSingleton +{ +public: + DragAndDropHelper instance; +}; +K_GLOBAL_STATIC(DragAndDropHelperSingleton, s_dragAndDropHelper) + +DragAndDropHelper& DragAndDropHelper::instance() +{ + return s_dragAndDropHelper->instance; +} + +bool DragAndDropHelper::isMimeDataSupported(const QMimeData* mimeData) const { return mimeData->hasUrls() || mimeData->hasFormat("application/x-kde-dndextract"); } @@ -86,13 +101,34 @@ void DragAndDropHelper::dropUrls(const KFileItem& destItem, 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); + const KUrl source = urls.first(); + const KUrl sourceDir = KUrl(source.directory()); + const bool singleSelection = (urls.count() == 1); + + if (singleSelection && (source == destination)) { + emit errorMessage(i18nc("@info:status", "A folder cannot be dropped into itself")); + } else if (sourceDir == destination) { + QString msg; + if (singleSelection) { + msg = i18nc("@info:status", + "The dropped item %1 is already inside " + "the folder %2", source.fileName(), destination.fileName()); } else { - KonqOperations::doDrop(KFileItem(), destination, event, widget); + msg = i18nc("@info:status", + "The dropped items are already inside the folder %1", + destination.fileName()); } + emit errorMessage(msg); + } else if (dropToItem) { + KonqOperations::doDrop(destItem, destination, event, widget); + } else { + KonqOperations::doDrop(KFileItem(), destination, event, widget); } } } + +DragAndDropHelper::DragAndDropHelper() +{ +} + +#include "draganddrophelper.moc"