add(preview): support identify window closeable

There is no close button when previewing a window that cannot be closed

Change-Id: Ic97f1fdd287fad1c06578e1745d526da61d0088e
This commit is contained in:
listenerri 2018-08-13 14:17:45 +08:00
parent 85b7d50857
commit 8b084117f8
Notes: gerrit 2018-10-08 11:46:48 +08:00
Verified+1: <jenkins@deepin.com>
Code-Review+2: listenerri <listenerri@gmail.com>
Submitted-by: listenerri <listenerri@gmail.com>
Submitted-at: Mon, 08 Oct 2018 11:46:48 +0800
Reviewed-on: https://cr.deepin.io/37688
Project: dde/dde-dock
Branch: refs/heads/master
6 changed files with 22 additions and 15 deletions

View File

@ -494,7 +494,7 @@ bool AppItem::hasAttention() const
void AppItem::updateWindowInfos(const WindowInfoMap &info) void AppItem::updateWindowInfos(const WindowInfoMap &info)
{ {
m_windowInfos = info; m_windowInfos = info;
if (m_appPreviewTips) m_appPreviewTips->setWindowInfos(m_windowInfos); if (m_appPreviewTips) m_appPreviewTips->setWindowInfos(m_windowInfos, m_itemEntryInter->GetAllowedCloseWindows().value());
m_updateIconGeometryTimer->start(); m_updateIconGeometryTimer->start();
// process attention effect // process attention effect
@ -549,7 +549,7 @@ void AppItem::showPreview()
if (m_windowInfos.isEmpty()) if (m_windowInfos.isEmpty())
return; return;
m_appPreviewTips = PreviewWindow(m_windowInfos, DockPosition); m_appPreviewTips = PreviewWindow(m_windowInfos, m_itemEntryInter->GetAllowedCloseWindows().value(), DockPosition);
connect(m_appPreviewTips, &PreviewContainer::requestActivateWindow, this, &AppItem::requestActivateWindow, Qt::QueuedConnection); connect(m_appPreviewTips, &PreviewContainer::requestActivateWindow, this, &AppItem::requestActivateWindow, Qt::QueuedConnection);
connect(m_appPreviewTips, &PreviewContainer::requestPreviewWindow, this, &AppItem::requestPreviewWindow, Qt::QueuedConnection); connect(m_appPreviewTips, &PreviewContainer::requestPreviewWindow, this, &AppItem::requestPreviewWindow, Qt::QueuedConnection);

View File

@ -48,11 +48,13 @@ class AppSnapshot : public QWidget
public: public:
explicit AppSnapshot(const WId wid, QWidget *parent = 0); explicit AppSnapshot(const WId wid, QWidget *parent = 0);
WId wid() const { return m_wid; } inline WId wid() const { return m_wid; }
bool attentioned() const { return m_windowInfo.attention; } inline bool attentioned() const { return m_windowInfo.attention; }
const QImage snapshot() const { return m_snapshot; } inline bool closeAble() const { return m_closeAble; }
const QRectF snapshotGeometry() const { return m_snapshotSrcRect; } inline void setCloseAble(const bool value) { m_closeAble = value; }
const QString title() const { return m_windowInfo.title; } inline const QImage snapshot() const { return m_snapshot; }
inline const QRectF snapshotGeometry() const { return m_snapshotSrcRect; }
inline const QString title() const { return m_windowInfo.title; }
signals: signals:
void entered(const WId wid) const; void entered(const WId wid) const;
@ -78,8 +80,10 @@ private:
private: private:
const WId m_wid; const WId m_wid;
WindowInfo m_windowInfo; WindowInfo m_windowInfo;
bool m_closeAble;
QImage m_snapshot; QImage m_snapshot;
QRectF m_snapshotSrcRect; QRectF m_snapshotSrcRect;

View File

@ -4,7 +4,7 @@
#include "previewcontainer.h" #include "previewcontainer.h"
static PreviewContainer *PreviewWindow(const WindowInfoMap &infos, const Dock::Position dockPos) static PreviewContainer *PreviewWindow(const WindowInfoMap &infos, const WindowList &allowClose, const Dock::Position dockPos)
{ {
static PreviewContainer *preview; static PreviewContainer *preview;
if (!preview) { if (!preview) {
@ -12,7 +12,7 @@ static PreviewContainer *PreviewWindow(const WindowInfoMap &infos, const Dock::P
} }
preview->disconnect(); preview->disconnect();
preview->setWindowInfos(infos); preview->setWindowInfos(infos, allowClose);
preview->updateSnapshots(); preview->updateSnapshots();
preview->updateLayoutDirection(dockPos); preview->updateLayoutDirection(dockPos);

View File

@ -61,6 +61,7 @@ void FloatingPreview::trackWindow(AppSnapshot * const snap)
m_tracked->removeEventFilter(this); m_tracked->removeEventFilter(this);
snap->installEventFilter(this); snap->installEventFilter(this);
m_tracked = snap; m_tracked = snap;
m_closeBtn->setVisible(m_tracked->closeAble());
const QRect r = rect(); const QRect r = rect();
const QRect sr = snap->geometry(); const QRect sr = snap->geometry();

View File

@ -55,7 +55,7 @@ PreviewContainer::PreviewContainer(QWidget *parent)
connect(m_floatingPreview, &FloatingPreview::requestMove, this, &PreviewContainer::moveFloatingPreview); connect(m_floatingPreview, &FloatingPreview::requestMove, this, &PreviewContainer::moveFloatingPreview);
} }
void PreviewContainer::setWindowInfos(const WindowInfoMap &infos) void PreviewContainer::setWindowInfos(const WindowInfoMap &infos, const WindowList &allowClose)
{ {
// check removed window // check removed window
for (auto it(m_snapshots.begin()); it != m_snapshots.end();) for (auto it(m_snapshots.begin()); it != m_snapshots.end();)
@ -72,9 +72,11 @@ void PreviewContainer::setWindowInfos(const WindowInfoMap &infos)
for (auto it(infos.cbegin()); it != infos.cend(); ++it) for (auto it(infos.cbegin()); it != infos.cend(); ++it)
{ {
if (!m_snapshots.contains(it.key())) const WId key = it.key();
appendSnapWidget(it.key()); if (!m_snapshots.contains(key))
m_snapshots[it.key()]->setWindowInfo(it.value()); appendSnapWidget(key);
m_snapshots[key]->setWindowInfo(it.value());
m_snapshots[key]->setCloseAble(allowClose.contains(key));
} }
if (m_snapshots.isEmpty()) if (m_snapshots.isEmpty())

View File

@ -50,7 +50,7 @@ signals:
void requestCancelAndHidePreview() const; void requestCancelAndHidePreview() const;
public: public:
void setWindowInfos(const WindowInfoMap &infos); void setWindowInfos(const WindowInfoMap &infos, const WindowList &allowClose);
void updateSnapshots(); void updateSnapshots();
public slots: public slots: