]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
KFileItem::url() returns per value, not per reference
[dolphin.git] / src / dolphinview.cpp
index 023a7380024e68945c23a05e4a8ac69b52d16c65..7ffcbced5704592ec1daceae4e13d564e7665ec7 100644 (file)
@@ -41,6 +41,7 @@
 #include <kmenu.h>
 #include <kmessagebox.h>
 #include <kmimetyperesolver.h>
+#include <konq_fileitemcapabilities.h>
 #include <konq_operations.h>
 #include <konqmimedata.h>
 #include <ktoggleaction.h>
@@ -95,10 +96,6 @@ DolphinView::DolphinView(QWidget* parent,
     m_controller = new DolphinController(this);
     m_controller->setUrl(url);
 
-    // Receiver of the DolphinView signal 'urlChanged()' don't need
-    // to care whether the internal controller changed the URL already or whether
-    // the controller just requested an URL change and will be updated later.
-    // In both cases the URL has been changed:
     connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
             this, SIGNAL(urlChanged(const KUrl&)));
     connect(m_controller, SIGNAL(requestUrlChange(const KUrl&)),
@@ -298,6 +295,10 @@ void DolphinView::clearSelection()
 
 KFileItemList DolphinView::selectedItems() const
 {
+    if (isColumnViewActive()) {
+        return m_columnView->selectedItems();
+    }
+
     const QAbstractItemView* view = itemView();
 
     // Our view has a selection, we will map them back to the DolphinModel
@@ -328,12 +329,6 @@ KUrl::List DolphinView::selectedUrls() const
     return urls;
 }
 
-KFileItem DolphinView::fileItem(const QModelIndex& index) const
-{
-    const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index);
-    return m_dolphinModel->itemForIndex(dolphinModelIndex);
-}
-
 void DolphinView::setContentsPosition(int x, int y)
 {
     QAbstractItemView* view = itemView();
@@ -445,6 +440,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl)
         return;
     }
 
+    m_iconManager->cancelPreviews();
     m_controller->setUrl(url); // emits urlChanged, which we forward
 
     if (!rootUrl.isEmpty() && rootUrl.isParentOf(url)) {
@@ -776,10 +772,14 @@ void DolphinView::emitSelectionChangedSignal()
 void DolphinView::openContextMenu(const QPoint& pos)
 {
     KFileItem item;
-
-    const QModelIndex index = itemView()->indexAt(pos);
-    if (index.isValid() && (index.column() == DolphinModel::Name)) {
-        item = fileItem(index);
+    if (isColumnViewActive()) {
+        item = m_columnView->itemAt(pos);
+    } else {
+        const QModelIndex index = itemView()->indexAt(pos);
+        if (index.isValid() && (index.column() == DolphinModel::Name)) {
+            const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index);
+            item = m_dolphinModel->itemForIndex(dolphinModelIndex);
+        }
     }
 
     if (m_toolTipManager != 0) {
@@ -796,24 +796,18 @@ void DolphinView::dropUrls(const KUrl::List& urls,
                            const KFileItem& destItem)
 {
     Q_ASSERT(!urls.isEmpty());
-    const KUrl& destination = !destItem.isNull() && destItem.isDir() ?
-                              destItem.url() : destPath;
+    const KUrl destination = !destItem.isNull() && destItem.isDir() ?
+                             destItem.url() : destPath;
     const KUrl sourceDir = KUrl(urls.first().directory());
     if (sourceDir != destination) {
-        dropUrls(urls, destination);
+        DolphinDropController dropController(this);
+        // forward doingOperation signal up to the mainwindow
+        connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
+                this, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)));
+        dropController.dropUrls(urls, destination);
     }
 }
 
-void DolphinView::dropUrls(const KUrl::List& urls,
-                           const KUrl& destination)
-{
-    DolphinDropController dropController(this);
-    // forward doingOperation signal up to the mainwindow
-    connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
-            this, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)));
-    dropController.dropUrls(urls, destination);
-}
-
 void DolphinView::updateSorting(DolphinView::Sorting sorting)
 {
     ViewProperties props(viewPropertiesUrl());
@@ -905,7 +899,10 @@ QPair<bool, QString> DolphinView::pasteInfo() const
 
     KUrl::List urls = KUrl::List::fromMimeData(mimeData);
     if (!urls.isEmpty()) {
-        ret.first = true;
+        // disable the paste action if no writing is supported
+        KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url());
+        ret.first = KonqFileItemCapabilities(KFileItemList() << item).supportsWriting();
+
         if (urls.count() == 1) {
             const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true);
             ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") :
@@ -1125,7 +1122,6 @@ void DolphinView::createView()
 
     view->setSelectionMode(QAbstractItemView::ExtendedSelection);
 
-    new KMimeTypeResolver(view, m_dolphinModel);
     m_iconManager = new IconManager(view, m_proxyModel);
     m_iconManager->setShowPreview(m_showPreview);