fixed(appitem):appitem undock on 2d

This commit is contained in:
shaojun 2019-09-24 10:47:43 +08:00
parent 988e44ebb0
commit cd405aee3e
3 changed files with 22 additions and 5 deletions

View File

@ -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;

View File

@ -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;

View File

@ -32,6 +32,7 @@
#include <QString>
#include <DGuiApplicationHelper>
#include <DWindowManagerHelper>
#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()));
if (DWindowManagerHelper::instance()->hasComposite()) {
appDrag->setPixmap(pixmap);
m_appDragWidget->show();
static_cast<QGraphicsView *>(m_appDragWidget)->viewport()->installEventFilter(this);
} else {
const QPixmap &dragPix = qobject_cast<AppItem *>(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<AppItem *>(item)->undock();
}
m_appDragWidget = nullptr;
item->setDraging(false);
item->update();