diff --git a/frame/item/components/appsnapshot.cpp b/frame/item/components/appsnapshot.cpp index f97a80dcc..e5d235df2 100644 --- a/frame/item/components/appsnapshot.cpp +++ b/frame/item/components/appsnapshot.cpp @@ -108,6 +108,8 @@ void AppSnapshot::closeWindow() const e.xclient.data.l[0] = XInternAtom(display, "WM_DELETE_WINDOW", false); e.xclient.data.l[1] = CurrentTime; + Q_EMIT requestCloseAppSnapshot(); + XSendEvent(display, m_wid, false, NoEventMask, &e); XFlush(display); } diff --git a/frame/item/components/appsnapshot.h b/frame/item/components/appsnapshot.h index 9943cb565..ee1de0da4 100644 --- a/frame/item/components/appsnapshot.h +++ b/frame/item/components/appsnapshot.h @@ -68,6 +68,7 @@ signals: void entered(const WId wid) const; void clicked(const WId wid) const; void requestCheckWindow() const; + void requestCloseAppSnapshot() const; public slots: void fetchSnapshot(); diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index e4d91dfb4..2cc081586 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -120,6 +120,7 @@ void PreviewContainer::checkMouseLeave() m_needActivate = false; emit requestActivateWindow(m_floatingPreview->trackedWid()); } else { + Q_EMIT requestHidePopup(); emit requestCancelPreviewWindow(); } } @@ -170,6 +171,15 @@ void PreviewContainer::appendSnapWidget(const WId wid) connect(snap, &AppSnapshot::clicked, this, &PreviewContainer::onSnapshotClicked, Qt::QueuedConnection); connect(snap, &AppSnapshot::entered, this, &PreviewContainer::previewEntered, Qt::QueuedConnection); connect(snap, &AppSnapshot::requestCheckWindow, this, &PreviewContainer::requestCheckWindows, Qt::QueuedConnection); + connect(snap, &AppSnapshot::requestCloseAppSnapshot, this, [this](){ + if (!m_wmHelper->hasComposite()) + return ; + + if (m_currentWId != m_snapshots.lastKey()) { + Q_EMIT requestHidePopup(); + Q_EMIT requestCancelPreviewWindow(); + } + }); m_windowListLayout->addWidget(snap);