fix: preview window can not be raised after clicked preview snapshot

https://github.com/linuxdeepin/internal-discussion/issues/1321
This commit is contained in:
listenerri 2019-04-12 17:17:19 +08:00
parent 9293c45df5
commit f4d6ba1076
4 changed files with 23 additions and 18 deletions

View File

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

View File

@ -93,7 +93,6 @@ private slots:
void refershIcon() Q_DECL_OVERRIDE;
void activeChanged();
void showPreview();
void cancelAndHidePreview();
void playSwingEffect();
void stopSwingEffect();
void checkAttentionEffect();

View File

@ -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())

View File

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