diff --git a/frame/item/components/floatingpreview.cpp b/frame/item/components/floatingpreview.cpp index 865d02aa6..dea1c9bcf 100644 --- a/frame/item/components/floatingpreview.cpp +++ b/frame/item/components/floatingpreview.cpp @@ -55,6 +55,11 @@ WId FloatingPreview::trackedWid() const return m_tracked->wid(); } +AppSnapshot *FloatingPreview::trackedWindow() +{ + return m_tracked; +} + void FloatingPreview::trackWindow(AppSnapshot * const snap) { if (!m_tracked.isNull()) @@ -134,6 +139,13 @@ bool FloatingPreview::eventFilter(QObject *watched, QEvent *event) return QWidget::eventFilter(watched, event); } +void FloatingPreview::hideEvent(QHideEvent *event) +{ + m_tracked->setContentsMargins(0, 0, 0, 0); + + QWidget::hideEvent(event); +} + void FloatingPreview::onCloseBtnClicked() { Q_ASSERT(!m_tracked.isNull()); diff --git a/frame/item/components/floatingpreview.h b/frame/item/components/floatingpreview.h index 274daaa11..a7e34459e 100644 --- a/frame/item/components/floatingpreview.h +++ b/frame/item/components/floatingpreview.h @@ -38,6 +38,7 @@ public: explicit FloatingPreview(QWidget *parent = 0); WId trackedWid() const; + AppSnapshot *trackedWindow(); signals: void requestMove(const QPoint &p) const; @@ -46,9 +47,10 @@ public slots: void trackWindow(AppSnapshot * const snap); private: - void paintEvent(QPaintEvent *e); - void mouseReleaseEvent(QMouseEvent *e); - bool eventFilter(QObject *watched, QEvent *event); + void paintEvent(QPaintEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + bool eventFilter(QObject *watched, QEvent *event) override; + void hideEvent(QHideEvent *event) override; private slots: void onCloseBtnClicked(); diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index 33476e20d..69d1b384d 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -185,6 +185,7 @@ void PreviewContainer::leaveEvent(QEvent *e) { QWidget::leaveEvent(e); + m_floatingPreview->setVisible(false); m_mouseLeaveTimer->start(); } @@ -213,10 +214,21 @@ void PreviewContainer::previewEntered(const WId wid) return; AppSnapshot *snap = static_cast(sender()); + if (!snap) { + return; + } + snap->setContentsMargins(100, 0, 100, 0); - m_floatingPreview->trackWindow(snap); - m_floatingPreview->setVisible(true); - m_floatingPreview->raise(); + AppSnapshot *preSnap = m_floatingPreview->trackedWindow(); + if (preSnap && preSnap != snap) { + preSnap->setContentsMargins(0, 0, 0, 0); + } + + QTimer::singleShot(0, [=] { + m_floatingPreview->trackWindow(snap); + m_floatingPreview->setVisible(true); + m_floatingPreview->raise(); + }); emit requestPreviewWindow(wid); }