From f4d6ba107656cf0ce917483bfa72406f70f5f688 Mon Sep 17 00:00:00 2001 From: listenerri Date: Fri, 12 Apr 2019 17:17:19 +0800 Subject: [PATCH] fix: preview window can not be raised after clicked preview snapshot https://github.com/linuxdeepin/internal-discussion/issues/1321 --- frame/item/appitem.cpp | 12 ++++------- frame/item/appitem.h | 1 - frame/item/components/previewcontainer.cpp | 24 ++++++++++++++-------- frame/item/components/previewcontainer.h | 4 +++- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index dd549d65b..2b88b5b77 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -582,21 +582,17 @@ void AppItem::showPreview() connect(m_appPreviewTips, &PreviewContainer::requestActivateWindow, this, &AppItem::requestActivateWindow, Qt::QueuedConnection); connect(m_appPreviewTips, &PreviewContainer::requestPreviewWindow, this, &AppItem::requestPreviewWindow, Qt::QueuedConnection); - connect(m_appPreviewTips, &PreviewContainer::requestCancelAndHidePreview, this, &AppItem::cancelAndHidePreview); + connect(m_appPreviewTips, &PreviewContainer::requestCancelPreviewWindow, this, &AppItem::requestCancelPreview); + connect(m_appPreviewTips, &PreviewContainer::requestHidePopup, this, &AppItem::hidePopup); connect(m_appPreviewTips, &PreviewContainer::requestCheckWindows, m_itemEntryInter, &DockEntryInter::Check); connect(m_appPreviewTips, &PreviewContainer::requestActivateWindow, [=]() { m_appPreviewTips = nullptr; }); - connect(m_appPreviewTips, &PreviewContainer::requestCancelAndHidePreview, [=]() { m_appPreviewTips = nullptr; }); + connect(m_appPreviewTips, &PreviewContainer::requestCancelPreviewWindow, [=]() { m_appPreviewTips = nullptr; }); + connect(m_appPreviewTips, &PreviewContainer::requestHidePopup, [=]() { m_appPreviewTips = nullptr; }); showPopupWindow(m_appPreviewTips, true); } -void AppItem::cancelAndHidePreview() -{ - hidePopup(); - emit requestCancelPreview(); -} - void AppItem::playSwingEffect() { // NOTE(sbw): return if animation view already playing diff --git a/frame/item/appitem.h b/frame/item/appitem.h index 5b7b8ce25..d9703f5d2 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -93,7 +93,6 @@ private slots: void refershIcon() Q_DECL_OVERRIDE; void activeChanged(); void showPreview(); - void cancelAndHidePreview(); void playSwingEffect(); void stopSwingEffect(); void checkAttentionEffect(); diff --git a/frame/item/components/previewcontainer.cpp b/frame/item/components/previewcontainer.cpp index 69d1b384d..33a39908d 100644 --- a/frame/item/components/previewcontainer.cpp +++ b/frame/item/components/previewcontainer.cpp @@ -80,7 +80,8 @@ void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowLi } if (m_snapshots.isEmpty()) - emit requestCancelAndHidePreview(); + emit requestCancelPreviewWindow(); + emit requestHidePopup(); adjustSize(); } @@ -108,14 +109,14 @@ void PreviewContainer::checkMouseLeave() if (hover) return; - emit requestCancelAndHidePreview(); - m_floatingPreview->setVisible(false); - if (m_needActivate) - { + if (m_needActivate) { m_needActivate = false; emit requestActivateWindow(m_floatingPreview->trackedWid()); + } else { + emit requestCancelPreviewWindow(); + emit requestHidePopup(); } } @@ -159,8 +160,7 @@ void PreviewContainer::appendSnapWidget(const WId wid) { AppSnapshot *snap = new AppSnapshot(wid); - connect(snap, &AppSnapshot::clicked, this, &PreviewContainer::requestActivateWindow, Qt::QueuedConnection); - connect(snap, &AppSnapshot::clicked, this, &PreviewContainer::requestCancelAndHidePreview, Qt::QueuedConnection); + 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); @@ -185,7 +185,6 @@ void PreviewContainer::leaveEvent(QEvent *e) { QWidget::leaveEvent(e); - m_floatingPreview->setVisible(false); m_mouseLeaveTimer->start(); } @@ -208,6 +207,15 @@ void PreviewContainer::dragLeaveEvent(QDragLeaveEvent *e) m_mouseLeaveTimer->start(10); } +void PreviewContainer::onSnapshotClicked(const WId wid) +{ + Q_UNUSED(wid); + + m_needActivate = true; + // the leaveEvent of this widget will be called after this signal + Q_EMIT requestHidePopup(); +} + void PreviewContainer::previewEntered(const WId wid) { if (!m_wmHelper->hasComposite()) diff --git a/frame/item/components/previewcontainer.h b/frame/item/components/previewcontainer.h index d0fa7128a..b30726753 100644 --- a/frame/item/components/previewcontainer.h +++ b/frame/item/components/previewcontainer.h @@ -47,7 +47,8 @@ signals: void requestActivateWindow(const WId wid) const; void requestPreviewWindow(const WId wid) const; void requestCheckWindows() const; - void requestCancelAndHidePreview() const; + void requestCancelPreviewWindow() const; + void requestHidePopup() const; public: void setWindowInfos(const WindowInfoMap &infos, const WindowList &allowClose); @@ -68,6 +69,7 @@ private: void dragLeaveEvent(QDragLeaveEvent *e); private slots: + void onSnapshotClicked(const WId wid); void previewEntered(const WId wid); void moveFloatingPreview(const QPoint &p);