]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix Bug 233335 - Wrong icons selected after pasting files and renaming them (because...
authorEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Wed, 9 Jan 2013 14:16:30 +0000 (15:16 +0100)
committerEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Wed, 9 Jan 2013 14:16:30 +0000 (15:16 +0100)
Fixed the "same" buggy behavior when dropping files/folders

Select also putted files (PUT operation - SimpleJob) - e.g. Paste content from clipboard

BUG: 233335
REVIEW: 107351

src/dolphinmainwindow.cpp
src/dolphinviewcontainer.cpp
src/panels/folders/folderspanel.cpp
src/panels/places/placespanel.cpp
src/views/dolphinview.cpp
src/views/dolphinview.h
src/views/draganddrophelper.cpp
src/views/draganddrophelper.h

index 11e03d0f11f95d02774175935debf8e256c479d8..d72fb2305e6889ed6b4a9d04ae7f6a86f0c95ce9 100644 (file)
@@ -1276,7 +1276,8 @@ void DolphinMainWindow::tabDropEvent(int tab, QDropEvent* event)
         const ViewTab& viewTab = m_viewTab[tab];
         const DolphinView* view = viewTab.isPrimaryViewActive ? viewTab.primaryView->view()
                                                               : viewTab.secondaryView->view();
-        const QString error = DragAndDropHelper::dropUrls(view->rootItem(), view->url(), event);
+        QString error;
+        DragAndDropHelper::dropUrls(view->rootItem(), view->url(), event, error);
         if (!error.isEmpty()) {
             activeViewContainer()->showMessage(error, DolphinViewContainer::Error);
         }
index 26a6803ae086b381c3a8e00f769182ac5ba3999b..b2c8605d89e1cb41809c50097d2dc68c50e5226b 100644 (file)
@@ -620,7 +620,8 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const KUrl& url)
 
 void DolphinViewContainer::dropUrls(const KUrl& destination, QDropEvent* event)
 {
-    const QString error = DragAndDropHelper::dropUrls(KFileItem(), destination, event);
+    QString error;
+    DragAndDropHelper::dropUrls(KFileItem(), destination, event, error);
     if (!error.isEmpty()) {
         showMessage(error, Error);
     }
index 6e3a7678f6490b8382b7414b8e0bf29dffcb3ba1..8ce853a2a81754b2885f4203ed98cbdfb14d2871 100644 (file)
@@ -236,7 +236,8 @@ void FoldersPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* eve
                              event->buttons(),
                              event->modifiers());
 
-        const QString error = DragAndDropHelper::dropUrls(destItem, destItem.url(), &dropEvent);
+        QString error;
+        DragAndDropHelper::dropUrls(destItem, destItem.url(), &dropEvent, error);
         if (!error.isEmpty()) {
             emit errorMessage(error);
         }
index 61c15a7a12631d0a8d36e96e0298cd96646f5d32..9f9306946c62734dd528c80d09b2c78552f037ae 100644 (file)
@@ -352,7 +352,11 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
                          event->buttons(),
                          event->modifiers());
 
-    DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent);
+    QString error;
+    DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent, error);
+    if (!error.isEmpty()) {
+        emit errorMessage(error);
+    }
 }
 
 void PlacesPanel::slotItemDropEventStorageSetupDone(int index, bool success)
@@ -364,7 +368,11 @@ void PlacesPanel::slotItemDropEventStorageSetupDone(int index, bool success)
         if (success) {
             KUrl destUrl = m_model->placesItem(index)->url();
 
-            DragAndDropHelper::dropUrls(KFileItem(), destUrl, m_itemDropEvent);
+            QString error;
+            DragAndDropHelper::dropUrls(KFileItem(), destUrl, m_itemDropEvent, error);
+            if (!error.isEmpty()) {
+                emit errorMessage(error);
+            }
         }
 
         delete m_itemDropEventMimeData;
@@ -384,7 +392,8 @@ void PlacesPanel::slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent*
 void PlacesPanel::slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent)
 {
     Q_UNUSED(parent);
-    const QString error = DragAndDropHelper::dropUrls(KFileItem(), dest, event);
+    QString error;
+    DragAndDropHelper::dropUrls(KFileItem(), dest, event, error);
     if (!error.isEmpty()) {
         emit errorMessage(error);
     }
index f0fad1976e81122444ed912a2c9c5ecc19faee4d..9575ffba702f33de6cea6df8962135b147b1c181 100644 (file)
@@ -1023,14 +1023,16 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
                          event->buttons(),
                          event->modifiers());
 
-    const QString error = DragAndDropHelper::dropUrls(destItem, destUrl, &dropEvent);
+    QString error;
+    KonqOperations* op = DragAndDropHelper::dropUrls(destItem, destUrl, &dropEvent, error);
     if (!error.isEmpty()) {
         emit errorMessage(error);
     }
 
-    if (destUrl == url()) {
+    if (op && destUrl == url()) {
         // Mark the dropped urls as selected.
-        markPastedUrlsAsSelected(event->mimeData());
+        m_clearSelectionBeforeSelectingNewItems = true;
+        connect(op, SIGNAL(urlPasted(KUrl)), this, SLOT(slotUrlPasted(KUrl)));
     }
 }
 
@@ -1066,6 +1068,11 @@ void DolphinView::slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons
     }
 }
 
+void DolphinView::slotAboutToCreate(const KUrl::List& urls)
+{
+    m_selectedUrls << urls;
+}
+
 void DolphinView::slotSelectionChanged(const QSet<int>& current, const QSet<int>& previous)
 {
     const int currentCount = current.count();
@@ -1523,8 +1530,11 @@ void DolphinView::applyModeToView()
 
 void DolphinView::pasteToUrl(const KUrl& url)
 {
-    markPastedUrlsAsSelected(QApplication::clipboard()->mimeData());
-    KonqOperations::doPaste(this, url);
+    KonqOperations* op = KonqOperations::doPasteV2(this, url);
+    if (op) {
+        m_clearSelectionBeforeSelectingNewItems = true;
+        connect(op, SIGNAL(aboutToCreate(KUrl::List)), this, SLOT(slotAboutToCreate(KUrl::List)));
+    }
 }
 
 KUrl::List DolphinView::simplifiedSelectedUrls() const
@@ -1552,18 +1562,6 @@ QMimeData* DolphinView::selectionMimeData() const
     return m_model->createMimeData(selectedIndexes);
 }
 
-void DolphinView::markPastedUrlsAsSelected(const QMimeData* mimeData)
-{
-    const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData);
-    KUrl::List destUrls;
-    foreach (const KUrl& source, sourceUrls) {
-        KUrl destination(url().url() + '/' + source.fileName());
-        destUrls << destination;
-    }
-    markUrlsAsSelected(destUrls);
-    m_clearSelectionBeforeSelectingNewItems = true;
-}
-
 void DolphinView::updateWritableState()
 {
     const bool wasFolderWritable = m_isFolderWritable;
index a2fe9f62a13fe8629b52cb8b24efa15b898a1011..13cc66545533b3a34fc419889a699f26e3ad254e 100644 (file)
@@ -566,6 +566,11 @@ private slots:
     void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
     void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
 
+    /*
+     * Is called when new items get pasted or dropped.
+     */
+    void slotAboutToCreate(const KUrl::List& urls);
+
     /**
      * Emits the signal \a selectionChanged() with a small delay. This is
      * because getting all file items for the selection can be an expensive
@@ -721,14 +726,6 @@ private:
      */
     QMimeData* selectionMimeData() const;
 
-    /**
-     * Is invoked after a paste operation or a drag & drop
-     * operation and URLs from \a mimeData as selected.
-     * This allows to select all newly pasted
-     * items in restoreViewState().
-     */
-    void markPastedUrlsAsSelected(const QMimeData* mimeData);
-
     /**
      * Updates m_isFolderWritable dependent on whether the folder represented by
      * the current URL is writable. If the state has changed, the signal
index f81d4d0bfe9d3b63e70745c772fc30878f4201b2..f8ae0ad03473d78d5e43febd9338e533ac855c68 100644 (file)
 #include <QtDBus>
 #include <QDropEvent>
 
-QString DragAndDropHelper::dropUrls(const KFileItem& destItem, const KUrl& destUrl, QDropEvent* event)
+KonqOperations* DragAndDropHelper::dropUrls(const KFileItem& destItem, const KUrl& destUrl, QDropEvent* event, QString& error)
 {
+    error.clear();
+
     if (!destItem.isNull() && !destItem.isWritable()) {
-        return i18nc("@info:status", "Access denied. Could not write to <filename>%1</filename>", destUrl.pathOrUrl());
+        error = i18nc("@info:status", "Access denied. Could not write to <filename>%1</filename>", destUrl.pathOrUrl());
+        return 0;
     }
 
     const QMimeData* mimeData = event->mimeData();
@@ -49,15 +52,16 @@ QString DragAndDropHelper::dropUrls(const KFileItem& destItem, const KUrl& destU
         const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
         foreach (const KUrl& url, urls) {
             if (url == destUrl) {
-                return i18nc("@info:status", "A folder cannot be dropped into itself");
+                error = i18nc("@info:status", "A folder cannot be dropped into itself");
+                return 0;
             }
         }
 
-        KonqOperations::doDrop(destItem, destUrl, event, QApplication::activeWindow());
+        return KonqOperations::doDrop(destItem, destUrl, event, QApplication::activeWindow(), QList<QAction*>());
     } else {
-        KonqOperations::doDrop(KFileItem(), destUrl, event, QApplication::activeWindow());
+        return KonqOperations::doDrop(KFileItem(), destUrl, event, QApplication::activeWindow(), QList<QAction*>());
     }
 
-    return QString();
+    return 0;
 }
 
index ac16f7cf2718ba9044f1f219b420293dea479387..eda5fc5c268fb1daa7322cdf5e88ffe778892f6c 100644 (file)
@@ -29,6 +29,7 @@ class KFileItem;
 class KUrl;
 class QDropEvent;
 class QWidget;
+class KonqOperations;
 
 class LIBDOLPHINPRIVATE_EXPORT DragAndDropHelper
 {
@@ -46,13 +47,15 @@ public:
      * @param destUrl   URL of the item destination. Is used only if destItem::isNull()
      *                  is true.
      * @param event     Drop event.
-     * @return          Error message intended to be shown for users if dropping is not
+     * @param error     Error message intended to be shown for users if dropping is not
      *                  possible. If an empty string is returned, the dropping has been
      *                  successful.
+     * @return          KonqOperations pointer
      */
-    static QString dropUrls(const KFileItem& destItem,
-                            const KUrl& destUrl,
-                            QDropEvent* event);
+    static KonqOperations* dropUrls(const KFileItem& destItem,
+                                    const KUrl& destUrl,
+                                    QDropEvent* event,
+                                    QString& error);
 };
 
 #endif