fix(frame): 对齐拼接屏衔接处不可放置任务栏

以计算过的是否可放位置,判断一下之后再决定是否移动

Log: 修复任务栏不可以在两个屏幕中间的问题
Bug: https://pms.uniontech.com/zentao/bug-view-27070.html
This commit is contained in:
zhaolong 2020-06-11 18:17:40 +08:00
parent 76e1e3c685
commit 35e21caf48
3 changed files with 23 additions and 5 deletions

View File

@ -507,9 +507,8 @@ void DockSettings::updateFrontendGeometry()
resetFrontendGeometry();
}
void DockSettings::setDockScreen(const QString &scrName)
bool DockSettings::setDockScreen(const QString &scrName)
{
m_isMouseMoveCause = true;
QList<Monitor*> 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)

View File

@ -73,7 +73,7 @@ public:
void showDockSettingsMenu();
void updateFrontendGeometry();
void setDockScreen(const QString &scrName);
bool setDockScreen(const QString &scrName);
QString &currentDockScreen() { return m_currentScreen; }
QSize m_mainWindowSize;

View File

@ -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);
}
}