]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.cpp
Merge branch 'Applications/15.08'
[dolphin.git] / src / views / dolphinview.cpp
index b330e5f5c33643c20cd504ca947e25b63c5de1f0..5023859df789bcfdd0a152d380a1aa931e1d762d 100644 (file)
 #include <KIO/CopyJob>
 #include <KIO/DeleteJob>
 #include <KIO/JobUiDelegate>
-#include <KIO/NetAccess>
 #include <KIO/PreviewJob>
+#include <KIO/DropJob>
+#include <KIO/PasteJob>
 #include <KIO/Paste>
 #include <KJob>
-#include <QMenu>
 #include <KMessageBox>
 #include <KJobWidgets>
-#include <konq_operations.h>
 #include <QUrl>
 
 #include "dolphinnewfilemenuobserver.h"
@@ -78,7 +77,7 @@
 
 namespace {
     const int MaxModeEnum = DolphinView::CompactView;
-};
+}
 
 DolphinView::DolphinView(const QUrl& url, QWidget* parent) :
     QWidget(parent),
@@ -124,7 +123,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) :
     m_model = new KFileItemModel(this);
     m_view = new DolphinItemListView();
     m_view->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
-    m_view->setVisibleRoles(QList<QByteArray>() << "text");
+    m_view->setVisibleRoles({"text"});
     applyModeToView();
 
     KItemListController* controller = new KItemListController(m_model, m_view, this);
@@ -178,8 +177,8 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) :
             this, &DolphinView::slotVisibleRolesChangedByHeader);
     connect(m_view, &DolphinItemListView::roleEditingCanceled,
             this, &DolphinView::slotRoleEditingCanceled);
-    connect(m_view->header(), &KItemListHeader::columnWidthChanged,
-            this, &DolphinView::slotHeaderColumnWidthChanged);
+    connect(m_view->header(), &KItemListHeader::columnWidthChangeFinished,
+            this, &DolphinView::slotHeaderColumnWidthChangeFinished);
 
     KItemListSelectionManager* selectionManager = controller->selectionManager();
     connect(selectionManager, &KItemListSelectionManager::selectionChanged,
@@ -972,10 +971,8 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos)
     delete menu;
 }
 
-void DolphinView::slotHeaderColumnWidthChanged(const QByteArray& role, qreal current, qreal previous)
+void DolphinView::slotHeaderColumnWidthChangeFinished(const QByteArray& role, qreal current)
 {
-    Q_UNUSED(previous);
-
     const QList<QByteArray> visibleRoles = m_view->visibleRoles();
 
     ViewProperties props(viewPropertiesUrl());
@@ -1038,21 +1035,25 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
                          event->mimeData(),
                          event->buttons(),
                          event->modifiers());
+    dropUrls(destUrl, &dropEvent);
 
-    QString error;
-    KonqOperations* op = DragAndDropHelper::dropUrls(destItem, destUrl, &dropEvent, error);
-    if (!error.isEmpty()) {
-        emit infoMessage(error);
-    }
+    setActive(true);
+}
 
-    if (op && destUrl == url()) {
-        // Mark the dropped urls as selected.
-        m_clearSelectionBeforeSelectingNewItems = true;
-        m_markFirstNewlySelectedItemAsCurrent = true;
-        connect(op, static_cast<void(KonqOperations::*)(const QList<QUrl>&)>(&KonqOperations::aboutToCreate), this, &DolphinView::slotAboutToCreate);
-    }
+void DolphinView::dropUrls(const QUrl &destUrl, QDropEvent *dropEvent)
+{
+    KIO::DropJob* job = DragAndDropHelper::dropUrls(destUrl, dropEvent, this);
 
-    setActive(true);
+    if (job) {
+        connect(job, &KIO::DropJob::result, this, &DolphinView::slotPasteJobResult);
+
+        if (destUrl == url()) {
+            // Mark the dropped urls as selected.
+            m_clearSelectionBeforeSelectingNewItems = true;
+            m_markFirstNewlySelectedItemAsCurrent = true;
+            connect(job, &KIO::DropJob::itemCreated, this, &DolphinView::slotItemCreated);
+        }
+    }
 }
 
 void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* previous)
@@ -1085,14 +1086,22 @@ void DolphinView::slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons
     }
 }
 
-void DolphinView::slotAboutToCreate(const QList<QUrl>& urls)
+void DolphinView::slotItemCreated(const QUrl& url)
 {
-    if (!urls.isEmpty()) {
-        if (m_markFirstNewlySelectedItemAsCurrent) {
-            markUrlAsCurrent(urls.first());
-            m_markFirstNewlySelectedItemAsCurrent = false;
-        }
-        m_selectedUrls << KDirModel::simplifiedUrlList(urls);
+    if (m_markFirstNewlySelectedItemAsCurrent) {
+        markUrlAsCurrent(url);
+        m_markFirstNewlySelectedItemAsCurrent = false;
+    }
+    m_selectedUrls << url;
+}
+
+void DolphinView::slotPasteJobResult(KJob *job)
+{
+    if (job->error()) {
+        emit errorMessage(job->errorString());
+    }
+    if (!m_selectedUrls.isEmpty()) {
+        m_selectedUrls << KDirModel::simplifiedUrlList(m_selectedUrls);
     }
 }
 
@@ -1279,7 +1288,7 @@ void DolphinView::observeCreatedItem(const QUrl& url)
     if (m_active) {
         clearSelection();
         markUrlAsCurrent(url);
-        markUrlsAsSelected(QList<QUrl>() << url);
+        markUrlsAsSelected({url});
     }
 }
 
@@ -1506,7 +1515,7 @@ void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, con
 
             KIO::Job * job = KIO::moveAs(oldUrl, newUrl);
             KJobWidgets::setWindow(job, this);
-            KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, QList<QUrl>() << oldUrl, newUrl, job);
+            KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Rename, {oldUrl}, newUrl, job);
             job->ui()->setAutoErrorHandlingEnabled(true);
 
             if (!newNameExistsAlready) {
@@ -1649,12 +1658,12 @@ void DolphinView::applyModeToView()
 
 void DolphinView::pasteToUrl(const QUrl& url)
 {
-    KonqOperations* op = KonqOperations::doPaste(this, url);
-    if (op) {
-        m_clearSelectionBeforeSelectingNewItems = true;
-        m_markFirstNewlySelectedItemAsCurrent = true;
-        connect(op, static_cast<void(KonqOperations::*)(const QList<QUrl>&)>(&KonqOperations::aboutToCreate), this, &DolphinView::slotAboutToCreate);
-    }
+    KIO::PasteJob *job = KIO::paste(QApplication::clipboard()->mimeData(), url);
+    KJobWidgets::setWindow(job, this);
+    m_clearSelectionBeforeSelectingNewItems = true;
+    m_markFirstNewlySelectedItemAsCurrent = true;
+    connect(job, &KIO::PasteJob::itemCreated, this, &DolphinView::slotItemCreated);
+    connect(job, &KIO::PasteJob::result, this, &DolphinView::slotPasteJobResult);
 }
 
 QList<QUrl> DolphinView::simplifiedSelectedUrls() const
@@ -1691,7 +1700,8 @@ void DolphinView::updateWritableState()
     if (item.isNull()) {
         // Try to find out if the URL is writable even if the "root item" is
         // null, see https://bugs.kde.org/show_bug.cgi?id=330001
-        item = KFileItem(KFileItem::Unknown, KFileItem::Unknown, url(), true);
+        item = KFileItem(url());
+        item.setDelayedMimeTypes(true);
     }
 
     KFileItemListProperties capabilities(KFileItemList() << item);