From 35e21caf4872b80be357b6fd3ca6836ffccaadc8 Mon Sep 17 00:00:00 2001 From: zhaolong Date: Thu, 11 Jun 2020 18:17:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(frame):=20=E5=AF=B9=E9=BD=90=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5=E5=B1=8F=E8=A1=94=E6=8E=A5=E5=A4=84=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E6=94=BE=E7=BD=AE=E4=BB=BB=E5=8A=A1=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 以计算过的是否可放位置,判断一下之后再决定是否移动 Log: 修复任务栏不可以在两个屏幕中间的问题 Bug: https://pms.uniontech.com/zentao/bug-view-27070.html --- frame/util/docksettings.cpp | 22 ++++++++++++++++++++-- frame/util/docksettings.h | 2 +- frame/window/mainwindow.cpp | 4 ++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index f774066b4..112ce7254 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -507,9 +507,8 @@ void DockSettings::updateFrontendGeometry() resetFrontendGeometry(); } -void DockSettings::setDockScreen(const QString &scrName) +bool DockSettings::setDockScreen(const QString &scrName) { - m_isMouseMoveCause = true; QList monitors = m_monitors.keys(); for (Monitor *monitor : monitors) { if (monitor && monitor->name() == scrName) { @@ -517,6 +516,25 @@ void DockSettings::setDockScreen(const QString &scrName) break; } } + + bool canBeDock = false; + switch (m_position) { + case Top: + canBeDock = m_mouseCauseDockScreen->dockPosition().topDock; + break; + case Right: + canBeDock = m_mouseCauseDockScreen->dockPosition().rightDock; + break; + case Bottom: + canBeDock = m_mouseCauseDockScreen->dockPosition().bottomDock; + break; + case Left: + canBeDock = m_mouseCauseDockScreen->dockPosition().leftDock; + break; + } + m_isMouseMoveCause = canBeDock; + + return canBeDock; } void DockSettings::onOpacityChanged(const double value) diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index 954a12d95..ff83678b6 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -73,7 +73,7 @@ public: void showDockSettingsMenu(); void updateFrontendGeometry(); - void setDockScreen(const QString &scrName); + bool setDockScreen(const QString &scrName); QString ¤tDockScreen() { return m_currentScreen; } QSize m_mainWindowSize; diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index bb289b862..4bc2b1580 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -1049,8 +1049,8 @@ void MainWindow::onRegionMonitorChanged(int x, int y, const QString &key) } else { // 移动Dock至相应屏相应位置 m_mouseCauseDock = true; - m_settings->setDockScreen(screen->name()); - positionChanged(m_curDockPos, m_curDockPos); + if (m_settings->setDockScreen(screen->name())) + positionChanged(m_curDockPos, m_curDockPos); } }