refactor: make the app item preview window public

Change-Id: I14575af85293aac5e777058e5251c3597c1a28e1
This commit is contained in:
listenerri 2018-07-10 15:21:10 +08:00
parent bd49207b49
commit 313d1ba204
Notes: gerrit 2018-07-10 16:16:32 +08:00
Verified+1: <jenkins@deepin.com>
Code-Review+2: hualet <mr.asianwang@gmail.com>
Submitted-by: listenerri <listenerri@gmail.com>
Submitted-at: Tue, 10 Jul 2018 16:16:32 +0800
Reviewed-on: https://cr.deepin.io/36540
Project: dde/dde-dock
Branch: refs/heads/master
2 changed files with 37 additions and 28 deletions

View File

@ -25,6 +25,7 @@
#include "util/imagefactory.h"
#include "xcb/xcb_misc.h"
#include "components/appswingeffectbuilder.h"
#include "components/appspreviewprovider.h"
#include <X11/X.h>
#include <X11/Xlib.h>
@ -46,7 +47,7 @@ QPoint AppItem::MousePressPos;
AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
: DockItem(parent),
m_appNameTips(new TipsWidget(this)),
m_appPreviewTips(new PreviewContainer(this)),
m_appPreviewTips(nullptr),
m_itemEntryInter(new DockEntryInter("com.deepin.dde.daemon.Dock", entry.path(), QDBusConnection::sessionBus(), this)),
m_swingEffectView(nullptr),
@ -84,8 +85,6 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
m_updateIconGeometryTimer->setInterval(500);
m_updateIconGeometryTimer->setSingleShot(true);
m_appPreviewTips->setVisible(false);
connect(m_itemEntryInter, &DockEntryInter::IsActiveChanged, this, &AppItem::activeChanged);
connect(m_itemEntryInter, &DockEntryInter::IsActiveChanged, this, static_cast<void (AppItem::*)()>(&AppItem::update));
connect(m_itemEntryInter, &DockEntryInter::WindowInfosChanged, this, &AppItem::updateWindowInfos, Qt::QueuedConnection);
@ -93,11 +92,6 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
connect(m_updateIconGeometryTimer, &QTimer::timeout, this, &AppItem::updateWindowIconGeometries, 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::requestCancelAndHidePreview, this, &AppItem::cancelAndHidePreview);
connect(m_appPreviewTips, &PreviewContainer::requestCheckWindows, m_itemEntryInter, &DockEntryInter::Check);
updateWindowInfos(m_itemEntryInter->windowInfos());
refershIcon();
}
@ -107,7 +101,6 @@ AppItem::~AppItem()
stopSwingEffect();
m_appNameTips->deleteLater();
m_appPreviewTips->deleteLater();
}
const QString AppItem::appId() const
@ -354,7 +347,7 @@ void AppItem::dragMoveEvent(QDragMoveEvent *e)
if (m_windowInfos.isEmpty())
return;
if (!PopupWindow->isVisible() || PopupWindow->getContent() != m_appPreviewTips)
if (!PopupWindow->isVisible() || !m_appPreviewTips)
showPreview();
}
@ -373,8 +366,12 @@ void AppItem::leaveEvent(QEvent *e)
{
DockItem::leaveEvent(e);
if (m_appPreviewTips->isVisible())
m_appPreviewTips->prepareHide();
if (m_appPreviewTips) {
if (m_appPreviewTips->isVisible()) {
m_appPreviewTips->prepareHide();
}
m_appPreviewTips = nullptr;
}
}
void AppItem::showEvent(QShowEvent *e)
@ -457,7 +454,7 @@ bool AppItem::hasAttention() const
void AppItem::updateWindowInfos(const WindowInfoMap &info)
{
m_windowInfos = info;
m_appPreviewTips->setWindowInfos(m_windowInfos);
if (m_appPreviewTips) m_appPreviewTips->setWindowInfos(m_windowInfos);
m_updateIconGeometryTimer->start();
// process attention effect
@ -500,24 +497,14 @@ void AppItem::showPreview()
if (m_windowInfos.isEmpty())
return;
// test cursor position
// const QRect r = rect();
// const QPoint p = mapFromGlobal(QCursor::pos());
m_appPreviewTips = PreviewWindow(m_windowInfos, DockPosition);
// switch (DockPosition)
// {
// case Top: if (p.y() != r.top()) return; break;
// case Left: if (p.x() != r.left()) return; break;
// case Right: if (p.x() != r.right()) return; break;
// case Bottom: if (p.y() != r.bottom()) return; break;
// default: return;
// }
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::requestCheckWindows, m_itemEntryInter, &DockEntryInter::Check);
showPopupWindow(m_appPreviewTips, true);
m_appPreviewTips->setWindowInfos(m_windowInfos);
m_appPreviewTips->updateSnapshots();
m_appPreviewTips->updateLayoutDirection(DockPosition);
}
void AppItem::cancelAndHidePreview()

View File

@ -0,0 +1,22 @@
#ifndef APPSPREVIEWPROVIDER_H
#define APPSPREVIEWPROVIDER_H
#include "previewcontainer.h"
static PreviewContainer *PreviewWindow(const WindowInfoMap &infos, const Dock::Position dockPos)
{
static PreviewContainer *preview;
if (!preview) {
preview = new PreviewContainer;
}
preview->disconnect();
preview->setWindowInfos(infos);
preview->updateSnapshots();
preview->updateLayoutDirection(dockPos);
return preview;
}
#endif /* APPSPREVIEWPROVIDER_H */