]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Mount unmounted devices, when a file is dropped upon it in places-panel.
authorEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Tue, 11 Sep 2012 18:17:56 +0000 (20:17 +0200)
committerEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Tue, 11 Sep 2012 18:17:56 +0000 (20:17 +0200)
BUG: 176277
REVIEW: 106072

src/panels/places/placespanel.cpp
src/panels/places/placespanel.h

index ccc10d205338bdf8e9d73274353957ff5110aecc..e483f9b83427da40eb55f4ae77a6d1fbd769fbe9 100644 (file)
@@ -54,7 +54,10 @@ PlacesPanel::PlacesPanel(QWidget* parent) :
     m_controller(0),
     m_model(0),
     m_storageSetupFailedUrl(),
     m_controller(0),
     m_model(0),
     m_storageSetupFailedUrl(),
-    m_triggerStorageSetupButton()
+    m_triggerStorageSetupButton(),
+    m_itemDropEventIndex(-1),
+    m_itemDropEventMimeData(0),
+    m_itemDropEvent(0)
 {
 }
 
 {
 }
 
@@ -281,6 +284,30 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
         return;
     }
 
         return;
     }
 
+    if (m_model->storageSetupNeeded(index)) {
+        connect(m_model, SIGNAL(storageSetupDone(int,bool)),
+                this, SLOT(slotItemDropEventStorageSetupDone(int,bool)));
+
+        m_itemDropEventIndex = index;
+
+        // Make a full copy of the Mime-Data
+        m_itemDropEventMimeData = new QMimeData;
+        m_itemDropEventMimeData->setText(event->mimeData()->text());
+        m_itemDropEventMimeData->setHtml(event->mimeData()->html());
+        m_itemDropEventMimeData->setUrls(event->mimeData()->urls());
+        m_itemDropEventMimeData->setImageData(event->mimeData()->imageData());
+        m_itemDropEventMimeData->setColorData(event->mimeData()->colorData());
+
+        m_itemDropEvent = new QDropEvent(event->pos().toPoint(),
+                                         event->possibleActions(),
+                                         m_itemDropEventMimeData,
+                                         event->buttons(),
+                                         event->modifiers());
+
+        m_model->requestStorageSetup(index);
+        return;
+    }
+
     KUrl destUrl = m_model->placesItem(index)->url();
     QDropEvent dropEvent(event->pos().toPoint(),
                          event->possibleActions(),
     KUrl destUrl = m_model->placesItem(index)->url();
     QDropEvent dropEvent(event->pos().toPoint(),
                          event->possibleActions(),
@@ -291,6 +318,27 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
     DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent);
 }
 
     DragAndDropHelper::dropUrls(KFileItem(), destUrl, &dropEvent);
 }
 
+void PlacesPanel::slotItemDropEventStorageSetupDone(int index, bool success)
+{
+    disconnect(m_model, SIGNAL(storageSetupDone(int,bool)),
+               this, SLOT(slotItemDropEventStorageSetupDone(int,bool)));
+
+    if ((index == m_itemDropEventIndex) && m_itemDropEvent && m_itemDropEventMimeData) {
+        if (success) {
+            KUrl destUrl = m_model->placesItem(index)->url();
+
+            DragAndDropHelper::dropUrls(KFileItem(), destUrl, m_itemDropEvent);
+        }
+
+        delete m_itemDropEventMimeData;
+        delete m_itemDropEvent;
+
+        m_itemDropEventIndex = -1;
+        m_itemDropEventMimeData = 0;
+        m_itemDropEvent = 0;
+    }
+}
+
 void PlacesPanel::slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent* event)
 {
     m_model->dropMimeDataBefore(index, event->mimeData());
 void PlacesPanel::slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent* event)
 {
     m_model->dropMimeDataBefore(index, event->mimeData());
index 52fa153bc233e47b9c52f6b542a8caa694f7d2b1..7951cdd9c7cdcd2d56535a8fdcc394ea5cb6cf75 100644 (file)
@@ -59,6 +59,7 @@ private slots:
     void slotItemContextMenuRequested(int index, const QPointF& pos);
     void slotViewContextMenuRequested(const QPointF& pos);
     void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
     void slotItemContextMenuRequested(int index, const QPointF& pos);
     void slotViewContextMenuRequested(const QPointF& pos);
     void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
+    void slotItemDropEventStorageSetupDone(int index, bool success);
     void slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
     void slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent);
     void slotTrashUpdated(KJob* job);
     void slotAboveItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
     void slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent);
     void slotTrashUpdated(KJob* job);
@@ -83,6 +84,10 @@ private:
 
     KUrl m_storageSetupFailedUrl;
     Qt::MouseButton m_triggerStorageSetupButton;
 
     KUrl m_storageSetupFailedUrl;
     Qt::MouseButton m_triggerStorageSetupButton;
+
+    int m_itemDropEventIndex;
+    QMimeData* m_itemDropEventMimeData;
+    QDropEvent* m_itemDropEvent;
 };
 
 #endif // PLACESPANEL_H
 };
 
 #endif // PLACESPANEL_H