X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fe09a37c59f3f326556b31e76974758badcc1dad..76fa5aec6b7af0740876db86c2eb0ef7f6270486:/src/dolphindropcontroller.cpp diff --git a/src/dolphindropcontroller.cpp b/src/dolphindropcontroller.cpp index 002c242ac..40fccf0d2 100644 --- a/src/dolphindropcontroller.cpp +++ b/src/dolphindropcontroller.cpp @@ -19,111 +19,24 @@ ***************************************************************************/ #include "dolphindropcontroller.h" -#include -#include -#include -#include -#include +#include #include -// TODO replace with KonqOperations::doDrop [or move doDrop code into this class] -// Note that this means changing the DolphinDropController controller usage -// to "create with new and let it autodelete" instead of on stack, since doDrop is async. - -DolphinDropController::DolphinDropController(QWidget* parentWidget) - : QObject(parentWidget), m_parentWidget(parentWidget) -{ -} - -DolphinDropController::~DolphinDropController() -{ -} - -void DolphinDropController::dropUrls(const KUrl::List& urls, - const KUrl& destination) +void DolphinDropController::dropUrls(const KFileItem& destItem, + const KUrl& destPath, + QDropEvent* event, + QWidget* widget) { - kDebug() << "Source" << urls; - kDebug() << "Destination:" << destination; - - Qt::DropAction action = Qt::CopyAction; - - Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); - const bool shiftPressed = modifier & Qt::ShiftModifier; - const bool controlPressed = modifier & Qt::ControlModifier; - const bool altPressed = modifier & Qt::AltModifier; - if (shiftPressed && controlPressed) { - // shortcut for 'Link Here' is used - action = Qt::LinkAction; - } else if (shiftPressed) { - // shortcut for 'Move Here' is used - action = Qt::MoveAction; - } else if (controlPressed) { - // shortcut for 'Copy Here' is used - action = Qt::CopyAction; - } else if (altPressed) { - // shortcut for 'Link Here' is used - action = Qt::LinkAction; - } else { - // open a context menu which offers the following actions: - // - Move Here - // - Copy Here - // - Link Here - // - Cancel - - KMenu popup(m_parentWidget); - - QString seq = QKeySequence(Qt::ShiftModifier).toString(); - seq.chop(1); // chop superfluous '+' - QAction* moveAction = popup.addAction(KIcon("go-jump"), - i18nc("@action:inmenu", - "&Move Here\t%1", seq)); - - seq = QKeySequence(Qt::ControlModifier).toString(); - seq.chop(1); - QAction* copyAction = popup.addAction(KIcon("edit-copy"), - i18nc("@action:inmenu", - "&Copy Here\t%1", seq)); - - seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString(); - seq.chop(1); - QAction* linkAction = popup.addAction(KIcon("insert-link"), - i18nc("@action:inmenu", - "&Link Here\t%1", seq)); - - popup.addSeparator(); - popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel")); - - QAction* activatedAction = popup.exec(QCursor::pos()); - if (activatedAction == moveAction) { - action = Qt::MoveAction; - } else if (activatedAction == copyAction) { - action = Qt::CopyAction; - } else if (activatedAction == linkAction) { - action = Qt::LinkAction; + 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 { - return; + KonqOperations::doDrop(KFileItem(), destination, event, widget); } } - - switch (action) { - case Qt::MoveAction: - KonqOperations::copy(m_parentWidget, KonqOperations::MOVE, urls, destination); - emit doingOperation(KonqFileUndoManager::MOVE); - break; - - case Qt::CopyAction: - KonqOperations::copy(m_parentWidget, KonqOperations::COPY, urls, destination); - emit doingOperation(KonqFileUndoManager::COPY); - break; - - case Qt::LinkAction: - KonqOperations::copy(m_parentWidget, KonqOperations::LINK, urls, destination); - emit doingOperation(KonqFileUndoManager::LINK); - break; - - default: - break; - } -} - -#include "dolphindropcontroller.moc" +} \ No newline at end of file