optimize drop

Change-Id: I8892e79b60b7c181f7ae75e5e32177c0847b203a
This commit is contained in:
石博文 2017-04-27 15:34:04 +08:00
parent 4c4e0a0fb0
commit 495ed31997
Notes: Deepin Code Review 2017-04-27 15:46:28 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Thu, 27 Apr 2017 15:46:26 +0800
Reviewed-on: https://cr.deepin.io/22635
Project: dde/dde-dock
Branch: refs/heads/master
4 changed files with 46 additions and 4 deletions

View File

@ -74,6 +74,7 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
connect(m_appPreviewTips, &PreviewContainer::requestActivateWindow, this, &AppItem::requestActivateWindow, Qt::QueuedConnection);
connect(m_appPreviewTips, &PreviewContainer::requestPreviewWindow, this, &AppItem::requestPreviewWindow, Qt::QueuedConnection);
connect(m_appPreviewTips, &PreviewContainer::requestCancelPreview, this, &AppItem::requestCancelPreview, Qt::QueuedConnection);
connect(m_appPreviewTips, &PreviewContainer::requestCancelPreview, this, &AppItem::hidePopup);
updateTitle();
refershIcon();
@ -319,7 +320,11 @@ void AppItem::mouseMoveEvent(QMouseEvent *e)
if (e->buttons() != Qt::LeftButton)
return;
const QPoint distance = e->pos() - MousePressPos;
const QPoint pos = e->pos();
if (!rect().contains(pos))
return;
const QPoint distance = pos - MousePressPos;
if (distance.manhattanLength() < APP_DRAG_THRESHOLD)
return;

View File

@ -24,6 +24,10 @@ PreviewWidget::PreviewWidget(const WId wid, QWidget *parent)
m_closeButton->setText("x");
m_closeButton->setVisible(false);
m_droppedDelay = new QTimer(this);
m_droppedDelay->setSingleShot(true);
m_droppedDelay->setInterval(100);
QVBoxLayout *centralLayout = new QVBoxLayout;
centralLayout->setSpacing(0);
centralLayout->setMargin(0);
@ -113,6 +117,9 @@ void PreviewWidget::paintEvent(QPaintEvent *e)
void PreviewWidget::enterEvent(QEvent *e)
{
if (m_droppedDelay->isActive())
return e->ignore();
m_hovered = true;
m_closeButton->setVisible(true);
@ -135,16 +142,40 @@ void PreviewWidget::leaveEvent(QEvent *e)
void PreviewWidget::mouseReleaseEvent(QMouseEvent *e)
{
if (m_droppedDelay->isActive())
return e->ignore();
QWidget::mouseReleaseEvent(e);
emit requestHidePopup();
emit requestCancelPreview();
emit requestActivateWindow(m_wid);
}
void PreviewWidget::dragEnterEvent(QDragEnterEvent *e)
{
QWidget::dragEnterEvent(e);
e->accept();
m_hovered = true;
update();
emit requestActivateWindow(m_wid);
}
void PreviewWidget::dragLeaveEvent(QDragLeaveEvent *e)
{
QWidget::dragLeaveEvent(e);
m_hovered = false;
update();
}
void PreviewWidget::dropEvent(QDropEvent *e)
{
m_droppedDelay->start();
QWidget::dropEvent(e);
emit requestCancelPreview();
}

View File

@ -4,6 +4,8 @@
#include <QWidget>
#include <QDebug>
#include <QPushButton>
#include <QDragEnterEvent>
#include <QTimer>
class PreviewWidget : public QWidget
{
@ -17,7 +19,6 @@ signals:
void requestActivateWindow(const WId wid) const;
void requestPreviewWindow(const WId wid) const;
void requestCancelPreview() const;
void requestHidePopup() const;
private slots:
void refershImage();
@ -30,6 +31,8 @@ private:
void leaveEvent(QEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void dragEnterEvent(QDragEnterEvent *e);
void dragLeaveEvent(QDragLeaveEvent *e);
void dropEvent(QDropEvent *e);
private:
const WId m_wid;
@ -38,6 +41,8 @@ private:
QPushButton *m_closeButton;
QTimer *m_droppedDelay;
bool m_hovered;
};

View File

@ -165,6 +165,7 @@ void DockItem::showContextMenu()
connect(menuInter, &DBusMenu::MenuUnregistered, menuInter, &DBusMenu::deleteLater, Qt::QueuedConnection);
menuInter->ShowMenu(QString(QJsonDocument(menuObject).toJson()));
hidePopup();
}
void DockItem::showHoverTips()