diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 5d893b1fc..46e908c68 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -363,8 +363,10 @@ void AppItem::dragEnterEvent(QDragEnterEvent *e) return; // ignore request dock event - if (e->mimeData()->formats().contains("RequestDock")) - return e->ignore(); + QString draggingMimeKey = e->mimeData()->formats().contains("RequestDock") ? "RequestDock" : "text/plain"; + if (QMimeDatabase().mimeTypeForFile(e->mimeData()->data(draggingMimeKey)).name() == "application/x-desktop") { + return; + } e->accept(); } diff --git a/frame/panel/mainpanel.cpp b/frame/panel/mainpanel.cpp index 0d225beae..07d0e72d0 100644 --- a/frame/panel/mainpanel.cpp +++ b/frame/panel/mainpanel.cpp @@ -33,6 +33,9 @@ static DockItem *DraggingItem = nullptr; static PlaceholderItem *RequestDockItem = nullptr; const char *RequestDockKey = "RequestDock"; +const char *RequestDockKeyFallback = "text/plain"; + +const char *DesktopMimeType = "application/x-desktop"; MainPanel::MainPanel(QWidget *parent) : DBlurEffectWidget(parent), @@ -213,10 +216,19 @@ void MainPanel::dragEnterEvent(QDragEnterEvent *e) DraggingItem = nullptr; } - if (!e->mimeData()->formats().contains(RequestDockKey)) + m_draggingMimeKey = e->mimeData()->formats().contains(RequestDockKey) ? RequestDockKey : RequestDockKeyFallback; + + // dragging item is NOT a desktop file + if (QMimeDatabase().mimeTypeForFile(e->mimeData()->data(m_draggingMimeKey)).name() != DesktopMimeType) { + m_draggingMimeKey.clear(); return; - if (m_itemController->appIsOnDock(e->mimeData()->data(RequestDockKey))) + } + + // dragging item has been docked + if (m_itemController->appIsOnDock(e->mimeData()->data(m_draggingMimeKey))) { + m_draggingMimeKey.clear(); return; + } e->accept(); } @@ -255,7 +267,7 @@ void MainPanel::dropEvent(QDropEvent *e) if (RequestDockItem) { - m_itemController->placeholderItemDocked(e->mimeData()->data(RequestDockKey), RequestDockItem); + m_itemController->placeholderItemDocked(e->mimeData()->data(m_draggingMimeKey), RequestDockItem); m_itemController->placeholderItemRemoved(RequestDockItem); RequestDockItem->deleteLater(); RequestDockItem = nullptr; diff --git a/frame/panel/mainpanel.h b/frame/panel/mainpanel.h index 7b9102a02..0e531b6ac 100644 --- a/frame/panel/mainpanel.h +++ b/frame/panel/mainpanel.h @@ -95,6 +95,8 @@ private: DockItemController *m_itemController; QWidget *m_appDragWidget; + + QString m_draggingMimeKey; }; #endif // MAINPANEL_H