From 7502b87e06b7ce56e7cfc587941736083d3d0c2f Mon Sep 17 00:00:00 2001 From: zyz Date: Fri, 15 Jul 2022 18:14:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E6=89=98=E7=9B=98=E7=AA=97=E5=8F=A3=E5=9B=BE=E6=A0=87=E8=87=B3?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=A0=8F=E6=89=98=E7=9B=98=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E7=BB=8F=E5=B8=B8=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复拖拽托盘窗口图标至任务栏托盘区域经常失败的问题。原因:现有实现只在任务栏托盘一小块区域实现,导致拖拽经常不能被捕获,已修改为托盘父窗口区域捕获传递给任务栏托盘区域处理,实现每次拖拽都能捕获。 Log: 修复拖拽托盘窗口图标至任务栏托盘区域经常失败的问题。 Bug: https://pms.uniontech.com/bug-view-147789.html Influence: 拖拽托盘窗口图标至任务栏托盘区域。 Change-Id: I310916160fe1dc0e05b134a45a018c81766fe8cf --- frame/window/tray/tray_gridview.cpp | 11 ++++++++++- frame/window/tray/tray_gridview.h | 2 ++ frame/window/traymanagerwindow.cpp | 20 +++++++++++++------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/frame/window/tray/tray_gridview.cpp b/frame/window/tray/tray_gridview.cpp index 8bdfc3ff4..3f51f99cf 100644 --- a/frame/window/tray/tray_gridview.cpp +++ b/frame/window/tray/tray_gridview.cpp @@ -365,7 +365,7 @@ const QModelIndex TrayGridView::getIndexFromPos(QPoint currentPoint) const return QModelIndex(); } -void TrayGridView::dropEvent(QDropEvent *e) +void TrayGridView::handleDropEvent(QDropEvent *e) { setState(DListView::NoState); clearDragModelIndex(); @@ -437,6 +437,10 @@ bool TrayGridView::beginDrag(Qt::DropActions supportedActions) drag->setPixmap(pixmap); drag->setHotSpot(pixmap.rect().center() / ratio); QMimeData *data = model()->mimeData(QModelIndexList() << modelIndex); + if (!data) { + return false; + } + data->setImageData(pixmap); drag->setMimeData(data); @@ -513,3 +517,8 @@ void TrayGridView::initUi() connect(m_aniStartTime, &QTimer::timeout, this, &TrayGridView::moveAnimation); } + +void TrayGridView::dropEvent(QDropEvent *e) +{ + handleDropEvent(e); +} diff --git a/frame/window/tray/tray_gridview.h b/frame/window/tray/tray_gridview.h index 7ae02602b..e06cb0f30 100644 --- a/frame/window/tray/tray_gridview.h +++ b/frame/window/tray/tray_gridview.h @@ -46,6 +46,8 @@ public: const QRect indexRect(const QModelIndex &index) const; void dropSwap(); + void handleDropEvent(QDropEvent *e); + Q_SIGNALS: void requestRemove(const QString &); void dragLeaved(); diff --git a/frame/window/traymanagerwindow.cpp b/frame/window/traymanagerwindow.cpp index 74753e397..50b03cc68 100644 --- a/frame/window/traymanagerwindow.cpp +++ b/frame/window/traymanagerwindow.cpp @@ -445,16 +445,22 @@ void TrayManagerWindow::dragMoveEvent(QDragMoveEvent *e) void TrayManagerWindow::dropEvent(QDropEvent *e) { - const QuickPluginMimeData *mimeData = qobject_cast(e->mimeData()); - if (!mimeData) + if (!e || !e->mimeData() || e->source() == this) return; - if (e->source() == this) - return; + if (qobject_cast(e->source())) { + const QuickPluginMimeData *mimeData = qobject_cast(e->mimeData()); + if (!mimeData) + return; - PluginsItemInterface *pluginItem = static_cast(mimeData->pluginItemInterface()); - if (pluginItem) - m_quickIconWidget->dragPlugin(pluginItem); + PluginsItemInterface *pluginItem = static_cast(mimeData->pluginItemInterface()); + if (pluginItem) + m_quickIconWidget->dragPlugin(pluginItem); + } else if (qobject_cast(e->source())) { + // 将trayView中的dropEvent扩大到整个区域(this),这样便于随意拖动到这个区域都可以捕获。 + // m_trayView中有e->accept不会导致事件重复处理。 + m_trayView->handleDropEvent(e); + } } void TrayManagerWindow::dragLeaveEvent(QDragLeaveEvent *event)