diff --git a/panels/dock/dockhelper.cpp b/panels/dock/dockhelper.cpp index 67d0a16b7..463bd48c4 100644 --- a/panels/dock/dockhelper.cpp +++ b/panels/dock/dockhelper.cpp @@ -194,6 +194,8 @@ void DockHelper::checkNeedHideOrNot() } } + needHide &= !parent()->contextDragging(); + // any enter will not make hide for (auto enter : m_enters) { needHide &= !enter; diff --git a/panels/dock/dockhelper.h b/panels/dock/dockhelper.h index 843341f46..778021ad3 100644 --- a/panels/dock/dockhelper.h +++ b/panels/dock/dockhelper.h @@ -39,7 +39,7 @@ class DockHelper : public QObject void updateAllDockWakeArea(); -private Q_SLOTS: +public Q_SLOTS: void checkNeedHideOrNot(); void checkNeedShowOrNot(); diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp index 9c6ee76a9..3ee25615d 100644 --- a/panels/dock/dockpanel.cpp +++ b/panels/dock/dockpanel.cpp @@ -38,6 +38,7 @@ DockPanel::DockPanel(QObject *parent) , m_loadTrayPlugins(new LoadTrayPlugins(this)) , m_compositorReady(false) , m_launcherShown(false) + , m_contextDragging(false) { connect(this, &DockPanel::compositorReadyChanged, this, [this] { if (!m_compositorReady) return; @@ -409,6 +410,21 @@ bool DockPanel::eventFilter(QObject *watched, QEvent *event) return false; } + +bool DockPanel::contextDragging() const +{ + return m_contextDragging; +} + +void DockPanel::setContextDragging(bool newContextDragging) +{ + if (m_contextDragging == newContextDragging) + return; + m_contextDragging = newContextDragging; + if (!m_contextDragging) + m_helper->checkNeedHideOrNot(); + emit contextDraggingChanged(); +} } #include "dockpanel.moc" diff --git a/panels/dock/dockpanel.h b/panels/dock/dockpanel.h index b0d6943de..12d793438 100644 --- a/panels/dock/dockpanel.h +++ b/panels/dock/dockpanel.h @@ -37,6 +37,8 @@ class DockPanel : public DS_NAMESPACE::DPanel, public QDBusContext Q_PROPERTY(bool debugMode READ debugMode FINAL CONSTANT) + Q_PROPERTY(bool contextDragging READ contextDragging WRITE setContextDragging NOTIFY contextDraggingChanged FINAL) + public: explicit DockPanel(QObject *parent = nullptr); @@ -86,6 +88,9 @@ class DockPanel : public DS_NAMESPACE::DPanel, public QDBusContext qreal devicePixelRatio() const; + bool contextDragging() const; + void setContextDragging(bool newContextDragging); + protected: bool eventFilter(QObject *watched, QEvent *event) override; @@ -112,6 +117,8 @@ private Q_SLOTS: void requestClosePopup(); void devicePixelRatioChanged(qreal ratio); + void contextDraggingChanged(); + private: ColorTheme m_theme; HideState m_hideState; @@ -120,6 +127,7 @@ private Q_SLOTS: LoadTrayPlugins *m_loadTrayPlugins; bool m_compositorReady; bool m_launcherShown; + bool m_contextDragging; }; } diff --git a/panels/dock/taskmanager/package/AppItem.qml b/panels/dock/taskmanager/package/AppItem.qml index 0107d31d0..e17984e24 100644 --- a/panels/dock/taskmanager/package/AppItem.qml +++ b/panels/dock/taskmanager/package/AppItem.qml @@ -298,8 +298,12 @@ Item { acceptedButtons: Qt.LeftButton | Qt.RightButton drag.target: root drag.onActiveChanged: { - if (!drag.active) + if (!drag.active) { + Panel.contextDragging = false root.dragFinished() + return + } + Panel.contextDragging = true } onPressed: function (mouse) { diff --git a/panels/dock/taskmanager/package/TaskManager.qml b/panels/dock/taskmanager/package/TaskManager.qml index 4978d08ed..2444aff8c 100644 --- a/panels/dock/taskmanager/package/TaskManager.qml +++ b/panels/dock/taskmanager/package/TaskManager.qml @@ -145,6 +145,7 @@ ContainmentItem { } onDropped: function(drop) { + Panel.contextDragging = false if (launcherDndDesktopId === "") return let curX = taskmanager.useColumnLayout ? drop.y : drop.x let cellWidth = visualModel.cellWidth diff --git a/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml b/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml index 8da78a92f..ada1aeba0 100644 --- a/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml +++ b/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml @@ -169,9 +169,12 @@ AppletItemButton { Drag.onActiveChanged: { DDT.TraySortOrderModel.actionsAlwaysVisible = Drag.active if (!Drag.active) { + Panel.contextDragging = false // reset position on drop Qt.callLater(() => { x = 0; y = 0; }); + return } + Panel.contextDragging = true } DragHandler { diff --git a/panels/dock/tray/package/DummyDelegate.qml b/panels/dock/tray/package/DummyDelegate.qml index e0fdc001b..3234faff1 100644 --- a/panels/dock/tray/package/DummyDelegate.qml +++ b/panels/dock/tray/package/DummyDelegate.qml @@ -4,6 +4,7 @@ import QtQuick import QtQuick.Controls +import org.deepin.ds.dock 1.0 import org.deepin.ds.dock.tray 1.0 as DDT Button { @@ -25,9 +26,12 @@ Button { Drag.onActiveChanged: { DDT.TraySortOrderModel.actionsAlwaysVisible = Drag.active if (!Drag.active) { + Panel.contextDragging = false // reset position on drop Qt.callLater(() => { x = 0; y = 0; }); + return } + Panel.contextDragging = true } contentItem: Rectangle { color: "grey"