diff --git a/app/fileoperations.h b/app/fileoperations.h --- a/app/fileoperations.h +++ b/app/fileoperations.h @@ -22,8 +22,10 @@ #define FILEOPERATIONS_H #include +#include class QWidget; +class ContextManager; namespace Gwenview { @@ -33,9 +35,9 @@ enum Operation { TRASH, COPY, MOVE, LINK, UNKNOWN, PUT }; -void copyTo(const QList& urlList, QWidget* parent); -void moveTo(const QList& urlList, QWidget* parent); -void linkTo(const QList& urlList, QWidget* parent); +void copyTo(const QList& urlList, QWidget* parent, ContextManager* contextManager); +void moveTo(const QList& urlList, QWidget* parent, ContextManager* contextManager); +void linkTo(const QList& urlList, QWidget* parent, ContextManager* contextManager); void trash(const QList& urlList, QWidget* parent); void del(const QList& urlList, QWidget* parent); void rename(const QUrl &url, QWidget* parent); diff --git a/app/fileoperations.cpp b/app/fileoperations.cpp --- a/app/fileoperations.cpp +++ b/app/fileoperations.cpp @@ -39,18 +39,19 @@ // Local #include #include +#include namespace Gwenview { namespace FileOperations { -static void copyMoveOrLink(Operation operation, const QList& urlList, QWidget* parent) +static void copyMoveOrLink(Operation operation, const QList& urlList, QWidget* parent, ContextManager* contextManager) { Q_ASSERT(!urlList.isEmpty()); - QFileDialog dialog(parent, QString(), "kfiledialog:///"); + QFileDialog dialog(parent->nativeParentWidget(), QString()); dialog.setAcceptMode(QFileDialog::AcceptSave); switch (operation) { @@ -76,14 +77,16 @@ } else { dialog.setFileMode(QFileDialog::Directory); dialog.setOption(QFileDialog::ShowDirsOnly, true); - dialog.setDirectoryUrl(urlList.first().adjusted(QUrl::RemoveFilename)); } + dialog.setDirectoryUrl(contextManager->targetUrl().adjusted(QUrl::RemoveFilename)); if (!dialog.exec()) { return; } QUrl destUrl = dialog.selectedUrls().first(); + contextManager->setTargetUrl(destUrl); + KIO::CopyJob* job = 0; switch (operation) { case COPY: @@ -130,19 +133,19 @@ } } -void copyTo(const QList& urlList, QWidget* parent) +void copyTo(const QList& urlList, QWidget* parent, ContextManager* contextManager) { - copyMoveOrLink(COPY, urlList, parent); + copyMoveOrLink(COPY, urlList, parent, contextManager); } -void moveTo(const QList& urlList, QWidget* parent) +void moveTo(const QList& urlList, QWidget* parent, ContextManager* contextManager) { - copyMoveOrLink(MOVE, urlList, parent); + copyMoveOrLink(MOVE, urlList, parent, contextManager); } -void linkTo(const QList& urlList, QWidget* parent) +void linkTo(const QList& urlList, QWidget* parent, ContextManager* contextManager) { - copyMoveOrLink(LINK, urlList, parent); + copyMoveOrLink(LINK, urlList, parent, contextManager); } void trash(const QList& urlList, QWidget* parent) diff --git a/app/fileopscontextmanageritem.cpp b/app/fileopscontextmanageritem.cpp --- a/app/fileopscontextmanageritem.cpp +++ b/app/fileopscontextmanageritem.cpp @@ -329,17 +329,17 @@ void FileOpsContextManagerItem::copyTo() { - FileOperations::copyTo(urlList(), mGroup); + FileOperations::copyTo(urlList(), widget(), contextManager()); } void FileOpsContextManagerItem::moveTo() { - FileOperations::moveTo(urlList(), mGroup); + FileOperations::moveTo(urlList(), widget(), contextManager()); } void FileOpsContextManagerItem::linkTo() { - FileOperations::linkTo(urlList(), mGroup); + FileOperations::linkTo(urlList(), widget(), contextManager()); } void FileOpsContextManagerItem::rename() diff --git a/lib/contextmanager.h b/lib/contextmanager.h --- a/lib/contextmanager.h +++ b/lib/contextmanager.h @@ -71,6 +71,10 @@ void setUrlToSelect(const QUrl&); + QUrl targetUrl() const; + + void setTargetUrl(const QUrl&); + Q_SIGNALS: void currentDirUrlChanged(const QUrl&); void currentUrlChanged(const QUrl&); diff --git a/lib/contextmanager.cpp b/lib/contextmanager.cpp --- a/lib/contextmanager.cpp +++ b/lib/contextmanager.cpp @@ -46,6 +46,7 @@ QUrl mCurrentUrl; QUrl mUrlToSelect; + QUrl mTargetUrl; bool mSelectedFileItemListNeedsUpdate; QSet mQueuedSignals; @@ -279,6 +280,17 @@ selectUrlToSelect(); } +QUrl ContextManager::targetUrl() const +{ + return d->mTargetUrl; +} + +void ContextManager::setTargetUrl(const QUrl &url) +{ + GV_RETURN_IF_FAIL(url.isValid()); + d->mTargetUrl = url; +} + void ContextManager::slotRowsInserted() { // We reach this method when rows have been inserted in the model, but views