m_controller(0),
m_model(0),
m_storageSetupFailedUrl(),
- m_triggerStorageSetupButton()
+ m_triggerStorageSetupButton(),
+ m_itemDropEventIndex(-1),
+ m_itemDropEventMimeData(0),
+ m_itemDropEvent(0)
{
}
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(),
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 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);
KUrl m_storageSetupFailedUrl;
Qt::MouseButton m_triggerStorageSetupButton;
+
+ int m_itemDropEventIndex;
+ QMimeData* m_itemDropEventMimeData;
+ QDropEvent* m_itemDropEvent;
};
#endif // PLACESPANEL_H