show preview when cursor move to border

Change-Id: I5201e2fb3ba3f0ab9fa4c3881a501155662a66d6
This commit is contained in:
石博文 2017-05-02 16:57:58 +08:00 committed by Deepin Code Review
parent 028b57cdb3
commit 1ad9ac4c8d
Notes: Deepin Code Review 2017-05-02 19:14:47 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Tue, 02 May 2017 19:14:41 +0800
Reviewed-on: https://cr.deepin.io/22746
Project: dde/dde-dock
Branch: refs/heads/master
3 changed files with 25 additions and 29 deletions

View File

@ -43,6 +43,7 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
setAccessibleName(m_itemEntry->name());
setAcceptDrops(true);
setMouseTracking(true);
setLayout(centralLayout);
m_itemView->setScene(m_itemScene);
@ -326,6 +327,10 @@ void AppItem::mouseMoveEvent(QMouseEvent *e)
{
e->accept();
// handle preview
if (e->buttons() == Qt::NoButton)
return showPreview();
// handle drag
if (e->buttons() != Qt::LeftButton)
return;
@ -335,10 +340,8 @@ void AppItem::mouseMoveEvent(QMouseEvent *e)
return;
const QPoint distance = pos - MousePressPos;
if (distance.manhattanLength() < APP_DRAG_THRESHOLD)
return;
startDrag();
if (distance.manhattanLength() > APP_DRAG_THRESHOLD)
return startDrag();
}
void AppItem::wheelEvent(QWheelEvent *e)
@ -390,24 +393,6 @@ void AppItem::dropEvent(QDropEvent *e)
m_itemEntry->HandleDragDrop(uriList);
}
void AppItem::showHoverTips()
{
// another model popup window is alread exists
// if (PopupWindow->isVisible() && PopupWindow->model())
// return;
// QWidget * const content = popupTips();
// if (!content)
// return;
// showPopupWindow(content);
if (m_titles.isEmpty())
return DockItem::showHoverTips();
showPreview();
}
void AppItem::invokedMenuItem(const QString &itemId, const bool checked)
{
Q_UNUSED(checked);
@ -495,13 +480,23 @@ void AppItem::activeChanged()
void AppItem::showPreview()
{
// if (PopupWindow->isVisible())
// return hidePopup();
if (m_titles.isEmpty())
return;
// test cursor position
const QRect r = rect();
const QPoint p = mapFromGlobal(QCursor::pos());
switch (DockPosition)
{
case Top: if (p.y() != r.top()) return;
case Left: if (p.x() != r.left()) return;
case Right: if (p.x() != r.right()) return;
case Bottom: if (p.y() != r.bottom()) return;
}
m_appPreviewTips->updateLayoutDirection(DockPosition);
// m_appPreviewTips->setWindowInfos(m_titles);
qApp->processEvents();
showPopupWindow(m_appPreviewTips, true);
}

View File

@ -42,7 +42,6 @@ private:
void dragMoveEvent(QDragMoveEvent *e);
void dropEvent(QDropEvent *e);
void showHoverTips();
void invokedMenuItem(const QString &itemId, const bool checked);
const QString contextMenu() const;
QWidget *popupTips();

View File

@ -201,12 +201,14 @@ void DockItem::showPopupWindow(QWidget * const content, const bool model)
case Right: popup->setArrowDirection(DockPopupWindow::ArrowRight); break;
}
popup->setContent(content);
popup->setMargin(5);
popup->setWidth(content->sizeHint().width());
popup->setHeight(content->sizeHint().height());
const QPoint p = popupMarkPoint();
QMetaObject::invokeMethod(popup, "show", Qt::QueuedConnection, Q_ARG(QPoint, p), Q_ARG(bool, model));
if (!popup->isVisible())
QMetaObject::invokeMethod(popup, "show", Qt::QueuedConnection, Q_ARG(QPoint, p), Q_ARG(bool, model));
else
popup->show(p, model);
connect(popup, &DockPopupWindow::accept, this, &DockItem::popupWindowAccept);
}