mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
fix: place holder item still display in dock after drag leave
Change-Id: Ibc21b1f984a4ecc1bff466012c2afe05c5df1285
This commit is contained in:
parent
f0927a1726
commit
725891a6b1
Notes:
gerrit
2018-11-05 13:12:54 +08:00
Verified+1: <jenkins@deepin.com> Verified+1: yefeifei <yefei@linuxdeepin.com> Code-Review+2: listenerri <listenerri@gmail.com> Submitted-by: listenerri <listenerri@gmail.com> Submitted-at: Mon, 05 Nov 2018 13:12:53 +0800 Reviewed-on: https://cr.deepin.io/39446 Project: dde/dde-dock Branch: refs/heads/master
@ -359,13 +359,14 @@ void AppItem::resizeEvent(QResizeEvent *e)
|
|||||||
void AppItem::dragEnterEvent(QDragEnterEvent *e)
|
void AppItem::dragEnterEvent(QDragEnterEvent *e)
|
||||||
{
|
{
|
||||||
// ignore drag from panel
|
// ignore drag from panel
|
||||||
if (e->source())
|
if (e->source()) {
|
||||||
return;
|
return e->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
// ignore request dock event
|
// ignore request dock event
|
||||||
QString draggingMimeKey = e->mimeData()->formats().contains("RequestDock") ? "RequestDock" : "text/plain";
|
QString draggingMimeKey = e->mimeData()->formats().contains("RequestDock") ? "RequestDock" : "text/plain";
|
||||||
if (QMimeDatabase().mimeTypeForFile(e->mimeData()->data(draggingMimeKey)).name() == "application/x-desktop") {
|
if (QMimeDatabase().mimeTypeForFile(e->mimeData()->data(draggingMimeKey)).name() == "application/x-desktop") {
|
||||||
return;
|
return e->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
e->accept();
|
e->accept();
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QGraphicsView>
|
#include <QGraphicsView>
|
||||||
|
|
||||||
|
#include <window/mainwindow.h>
|
||||||
|
|
||||||
static DockItem *DraggingItem = nullptr;
|
static DockItem *DraggingItem = nullptr;
|
||||||
static PlaceholderItem *RequestDockItem = nullptr;
|
static PlaceholderItem *RequestDockItem = nullptr;
|
||||||
|
|
||||||
@ -44,6 +46,7 @@ MainPanel::MainPanel(QWidget *parent)
|
|||||||
m_itemLayout(new QBoxLayout(QBoxLayout::LeftToRight)),
|
m_itemLayout(new QBoxLayout(QBoxLayout::LeftToRight)),
|
||||||
m_showDesktopItem(new ShowDesktopItem(this)),
|
m_showDesktopItem(new ShowDesktopItem(this)),
|
||||||
m_itemAdjustTimer(new QTimer(this)),
|
m_itemAdjustTimer(new QTimer(this)),
|
||||||
|
m_checkMouseLeaveTimer(new QTimer(this)),
|
||||||
m_itemController(DockItemController::instance(this)),
|
m_itemController(DockItemController::instance(this)),
|
||||||
m_appDragWidget(nullptr)
|
m_appDragWidget(nullptr)
|
||||||
{
|
{
|
||||||
@ -57,6 +60,7 @@ MainPanel::MainPanel(QWidget *parent)
|
|||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
setAccessibleName("dock-mainpanel");
|
setAccessibleName("dock-mainpanel");
|
||||||
setObjectName("MainPanel");
|
setObjectName("MainPanel");
|
||||||
|
setMouseTracking(true);
|
||||||
|
|
||||||
QFile qssFile(":/qss/frame.qss");
|
QFile qssFile(":/qss/frame.qss");
|
||||||
|
|
||||||
@ -72,11 +76,15 @@ MainPanel::MainPanel(QWidget *parent)
|
|||||||
connect(m_itemController, &DockItemController::itemManaged, this, &MainPanel::manageItem);
|
connect(m_itemController, &DockItemController::itemManaged, this, &MainPanel::manageItem);
|
||||||
connect(m_itemController, &DockItemController::itemUpdated, m_itemAdjustTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
connect(m_itemController, &DockItemController::itemUpdated, m_itemAdjustTimer, static_cast<void (QTimer::*)()>(&QTimer::start));
|
||||||
connect(m_itemAdjustTimer, &QTimer::timeout, this, &MainPanel::adjustItemSize, Qt::QueuedConnection);
|
connect(m_itemAdjustTimer, &QTimer::timeout, this, &MainPanel::adjustItemSize, Qt::QueuedConnection);
|
||||||
|
connect(m_checkMouseLeaveTimer, &QTimer::timeout, this, &MainPanel::checkMouseReallyLeave, Qt::QueuedConnection);
|
||||||
connect(&DockSettings::Instance(), &DockSettings::opacityChanged, this, &MainPanel::setMaskAlpha);
|
connect(&DockSettings::Instance(), &DockSettings::opacityChanged, this, &MainPanel::setMaskAlpha);
|
||||||
|
|
||||||
m_itemAdjustTimer->setSingleShot(true);
|
m_itemAdjustTimer->setSingleShot(true);
|
||||||
m_itemAdjustTimer->setInterval(100);
|
m_itemAdjustTimer->setInterval(100);
|
||||||
|
|
||||||
|
m_checkMouseLeaveTimer->setSingleShot(true);
|
||||||
|
m_checkMouseLeaveTimer->setInterval(300);
|
||||||
|
|
||||||
const auto &itemList = m_itemController->itemList();
|
const auto &itemList = m_itemController->itemList();
|
||||||
for (auto item : itemList)
|
for (auto item : itemList)
|
||||||
{
|
{
|
||||||
@ -210,6 +218,12 @@ void MainPanel::resizeEvent(QResizeEvent *e)
|
|||||||
|
|
||||||
void MainPanel::dragEnterEvent(QDragEnterEvent *e)
|
void MainPanel::dragEnterEvent(QDragEnterEvent *e)
|
||||||
{
|
{
|
||||||
|
// 不知道为什么有可能会收不到dragLeaveEvent,因此使用timer来检测鼠标是否已经离开dock
|
||||||
|
m_checkMouseLeaveTimer->start();
|
||||||
|
|
||||||
|
// call dragEnterEvent of MainWindow to show dock when dock is hidden
|
||||||
|
static_cast<MainWindow *>(window())->dragEnterEvent(e);
|
||||||
|
|
||||||
DockItem *item = itemAt(e->pos());
|
DockItem *item = itemAt(e->pos());
|
||||||
if (item && item->itemType() == DockItem::Container)
|
if (item && item->itemType() == DockItem::Container)
|
||||||
return;
|
return;
|
||||||
@ -273,8 +287,6 @@ void MainPanel::dragLeaveEvent(QDragLeaveEvent *e)
|
|||||||
|
|
||||||
void MainPanel::dropEvent(QDropEvent *e)
|
void MainPanel::dropEvent(QDropEvent *e)
|
||||||
{
|
{
|
||||||
Q_UNUSED(e)
|
|
||||||
|
|
||||||
DraggingItem = nullptr;
|
DraggingItem = nullptr;
|
||||||
|
|
||||||
if (RequestDockItem)
|
if (RequestDockItem)
|
||||||
@ -666,3 +678,14 @@ void MainPanel::handleDragMove(QDragMoveEvent *e, bool isFilter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainPanel::checkMouseReallyLeave()
|
||||||
|
{
|
||||||
|
if (window()->geometry().contains(QCursor::pos())) {
|
||||||
|
return m_checkMouseLeaveTimer->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_checkMouseLeaveTimer->stop();
|
||||||
|
|
||||||
|
dragLeaveEvent(new QDragLeaveEvent);
|
||||||
|
}
|
||||||
|
@ -86,6 +86,7 @@ private slots:
|
|||||||
void itemDragStarted();
|
void itemDragStarted();
|
||||||
void itemDropped(QObject *destnation);
|
void itemDropped(QObject *destnation);
|
||||||
void handleDragMove(QDragMoveEvent *e, bool isFilter);
|
void handleDragMove(QDragMoveEvent *e, bool isFilter);
|
||||||
|
void checkMouseReallyLeave();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Position m_position;
|
Position m_position;
|
||||||
@ -94,6 +95,7 @@ private:
|
|||||||
ShowDesktopItem *m_showDesktopItem;
|
ShowDesktopItem *m_showDesktopItem;
|
||||||
|
|
||||||
QTimer *m_itemAdjustTimer;
|
QTimer *m_itemAdjustTimer;
|
||||||
|
QTimer *m_checkMouseLeaveTimer;
|
||||||
DockItemController *m_itemController;
|
DockItemController *m_itemController;
|
||||||
|
|
||||||
QWidget *m_appDragWidget;
|
QWidget *m_appDragWidget;
|
||||||
|
@ -211,8 +211,9 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *e)
|
|||||||
{
|
{
|
||||||
QWidget::dragEnterEvent(e);
|
QWidget::dragEnterEvent(e);
|
||||||
|
|
||||||
if (m_settings->hideState() != Show)
|
if (m_settings->hideState() != Show) {
|
||||||
m_expandDelayTimer->start();
|
m_expandDelayTimer->start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setFixedSize(const QSize &size)
|
void MainWindow::setFixedSize(const QSize &size)
|
||||||
|
@ -44,6 +44,8 @@ public:
|
|||||||
explicit MainWindow(QWidget *parent = 0);
|
explicit MainWindow(QWidget *parent = 0);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
friend class MainPanel;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void launch();
|
void launch();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user