┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/places/placespanel.cpp
diff options
context:
space:
mode:
authorEmmanuel Pescosta <[email protected]>2012-09-11 20:17:56 +0200
committerEmmanuel Pescosta <[email protected]>2012-09-11 20:23:28 +0200
commit5fbc0101790adf5613e8c686a38bf9d831881a6d (patch)
tree2bda060c698d88bf55117bf4558da3934e1cb773 /src/panels/places/placespanel.cpp
parent42dad0a9483de340118ce67622cb930619dd4699 (diff)
Mount unmounted devices, when a file is dropped upon it in places-panel.
BUG: 176277 REVIEW: 106072 FIXED-IN: 4.9.2 (cherry picked from commit 824fa6a43734cf9ad2a690778c50bdaf76a1fb0e)
Diffstat (limited to 'src/panels/places/placespanel.cpp')
-rw-r--r--src/panels/places/placespanel.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp
index d4450888e..4b28c8510 100644
--- a/src/panels/places/placespanel.cpp
+++ b/src/panels/places/placespanel.cpp
@@ -52,7 +52,10 @@ PlacesPanel::PlacesPanel(QWidget* parent) :
m_controller(0),
m_model(0),
m_storageSetupFailedUrl(),
- m_triggerStorageSetupButton()
+ m_triggerStorageSetupButton(),
+ m_itemDropEventIndex(-1),
+ m_itemDropEventMimeData(0),
+ m_itemDropEvent(0)
{
}
@@ -268,6 +271,30 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
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(),
@@ -278,6 +305,27 @@ void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
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());