From cd405aee3e6758bbaf428289a53e4bddd0d4708b Mon Sep 17 00:00:00 2001 From: shaojun Date: Tue, 24 Sep 2019 10:47:43 +0800 Subject: [PATCH] fixed(appitem):appitem undock on 2d --- frame/item/appitem.h | 1 + frame/item/components/appdragwidget.h | 2 +- frame/panel/mainpanelcontrol.cpp | 24 ++++++++++++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/frame/item/appitem.h b/frame/item/appitem.h index 096b057cc..776d72eba 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -53,6 +53,7 @@ public: void setDockInfo(Dock::Position dockPosition, const QRect &dockGeometry); inline ItemType itemType() const Q_DECL_OVERRIDE { return App; } + QPixmap appIcon(){ return m_appIcon; } signals: void requestActivateWindow(const WId wid) const; diff --git a/frame/item/components/appdragwidget.h b/frame/item/components/appdragwidget.h index b4277dbae..f3cb84d82 100644 --- a/frame/item/components/appdragwidget.h +++ b/frame/item/components/appdragwidget.h @@ -44,6 +44,7 @@ public: void setAppPixmap(const QPixmap &pix); void setDockInfo(Dock::Position dockPosition, const QRect &dockGeometry); void setOriginPos(const QPoint position); + bool isRemoveAble(); protected: void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; @@ -58,7 +59,6 @@ private: void showGoBackAnimation(); void onRemoveAnimationStateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState); - bool isRemoveAble(); private: AppGraphicsObject *m_object; diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index 9d6e9773a..bafa011cc 100644 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -32,6 +32,7 @@ #include #include +#include #define SPLITER_SIZE 2 @@ -549,18 +550,27 @@ void MainPanelControl::startDrag(DockItem *item) QDrag *drag = nullptr; if (item->itemType() == DockItem::App) { AppDrag *appDrag = new AppDrag(item); - appDrag->setPixmap(pixmap); + m_appDragWidget = appDrag->appDragWidget(); connect(m_appDragWidget, &AppDragWidget::destroyed, this, [ = ] { m_appDragWidget = nullptr; }); - m_appDragWidget->show(); - appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos()))); appDrag->appDragWidget()->setDockInfo(m_position, QRect(mapToGlobal(pos()), size())); - static_cast(m_appDragWidget)->viewport()->installEventFilter(this); + + if (DWindowManagerHelper::instance()->hasComposite()) { + appDrag->setPixmap(pixmap); + m_appDragWidget->show(); + + static_cast(m_appDragWidget)->viewport()->installEventFilter(this); + } else { + const QPixmap &dragPix = qobject_cast(item)->appIcon(); + + appDrag->QDrag::setPixmap(dragPix); + appDrag->setHotSpot(dragPix.rect().center() / dragPix.devicePixelRatioF()); + } drag = appDrag; } else { @@ -571,6 +581,12 @@ void MainPanelControl::startDrag(DockItem *item) drag->setMimeData(new QMimeData); drag->exec(Qt::MoveAction); + // app关闭特效情况下移除 + if (item->itemType() == DockItem::App && !DWindowManagerHelper::instance()->hasComposite()) { + if (m_appDragWidget->isRemoveAble()) + qobject_cast(item)->undock(); + } + m_appDragWidget = nullptr; item->setDraging(false); item->update();