From fd823f5383e3f8f25fd44af95cdb820b2e253052 Mon Sep 17 00:00:00 2001 From: zhaolong Date: Thu, 21 May 2020 17:20:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(frame):=20=E5=A4=9A=E5=B1=8F=E5=AF=B9?= =?UTF-8?q?=E8=A7=92=E6=8B=BC=E6=8E=A5=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=A0=8F?= =?UTF-8?q?=E6=B6=88=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在对角位错位时原有代码判断失效,现加上判断对角情况,另修改上下判断出错问题 Log: 修复多屏条件下两个显示器成对角拼接时,调整任务栏为最左或最右后,任务栏消失问题 Bug: https://pms.uniontech.com/zentao/bug-view-27364.html --- frame/util/docksettings.cpp | 93 +++++++++++++++++++------------------ frame/window/mainwindow.cpp | 2 +- 2 files changed, 49 insertions(+), 46 deletions(-) diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 826845450..f774066b4 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -803,64 +803,67 @@ void DockSettings::calculateRelativePos(Monitor *s1, Monitor *s2) // 对齐 bool isAligment = false; // 左右拼 - // s1左 s2右 - if (s1->right() == s2->left() ) { - isAligment = (s1->topRight() == s2->topLeft()) - && (s1->bottomRight() == s2->bottomLeft()); - if (isAligment) { - s1->dockPosition().rightDock = false; - s2->dockPosition().leftDock = false; - } else { - if (!s1->isPrimary()) + if (s1->bottom() > s2->top() && s1->top() < s2->bottom()) { + // s1左 s2右 + if (s1->right() == s2->left() ) { + isAligment = (s1->topRight() == s2->topLeft()) + && (s1->bottomRight() == s2->bottomLeft()); + if (isAligment) { s1->dockPosition().rightDock = false; - if (!s2->isPrimary()) s2->dockPosition().leftDock = false; + } else { + if (!s1->isPrimary()) + s1->dockPosition().rightDock = false; + if (!s2->isPrimary()) + s2->dockPosition().leftDock = false; + } } - } - // s1右 s2左 - if (s1->left() == s2->right()) { - isAligment = (s1->topLeft() == s2->topRight()) - && (s1->bottomLeft() == s2->bottomRight()); - if (isAligment) { - s1->dockPosition().leftDock = false; - s2->dockPosition().rightDock = false; - } else { - if (!s1->isPrimary()) + // s1右 s2左 + if (s1->left() == s2->right()) { + isAligment = (s1->topLeft() == s2->topRight()) + && (s1->bottomLeft() == s2->bottomRight()); + if (isAligment) { s1->dockPosition().leftDock = false; - if (!s2->isPrimary()) s2->dockPosition().rightDock = false; + } else { + if (!s1->isPrimary()) + s1->dockPosition().leftDock = false; + if (!s2->isPrimary()) + s2->dockPosition().rightDock = false; + } } } // 上下拼 - // s1上 s2下 - if (s1->top() == s2->bottom()) { - isAligment = (s1->bottomLeft() == s2->topLeft()) - && (s1->bottomRight() == s2->topRight()); - if (isAligment) { - s1->dockPosition().bottomDock = false; - s2->dockPosition().topDock = false; - } else { - if (!s1->isPrimary()) + if (s1->right() > s2->left() && s1->left() < s2->right()) { + // s1上 s2下 + if (s1->bottom() == s2->top()) { + isAligment = (s1->bottomLeft() == s2->topLeft()) + && (s1->bottomRight() == s2->topRight()); + if (isAligment) { s1->dockPosition().bottomDock = false; - if (!s2->isPrimary()) s2->dockPosition().topDock = false; + } else { + if (!s1->isPrimary()) + s1->dockPosition().bottomDock = false; + if (!s2->isPrimary()) + s2->dockPosition().topDock = false; + } } - } - // s1下 s2上 - if (s1->bottom() == s2->top()) { - isAligment = (s1->topLeft() == s2->bottomLeft()) - && (s1->topRight() == s2->bottomRight()); - if (isAligment) { - s1->dockPosition().topDock = false; - s2->dockPosition().bottomDock = false; - } else { - if (!s1->isPrimary()) + // s1下 s2上 + if (s1->top() == s2->bottom()) { + isAligment = (s1->topLeft() == s2->bottomLeft()) + && (s1->topRight() == s2->bottomRight()); + if (isAligment) { s1->dockPosition().topDock = false; - if (!s2->isPrimary()) s2->dockPosition().bottomDock = false; + } else { + if (!s1->isPrimary()) + s1->dockPosition().topDock = false; + if (!s2->isPrimary()) + s2->dockPosition().bottomDock = false; + } } } - // 对角拼 bool isDiagonal = (s1->topLeft() == s2->bottomRight()) || (s1->topRight() == s2->bottomLeft()) @@ -868,9 +871,9 @@ void DockSettings::calculateRelativePos(Monitor *s1, Monitor *s2) || (s1->bottomRight() == s2->topLeft()); if (isDiagonal) { auto position = Monitor::DockPosition(false, false, false, false); - if (!s1->isPrimary()) + if (s1->isPrimary()) s2->setDockPosition(position); - if (!s2->isPrimary()) + if (s2->isPrimary()) s1->setDockPosition(position); switch (m_position) { diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 9a21dcd4a..bb289b862 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -721,7 +721,7 @@ void MainWindow::setStrutPartial() // pass if strut area is intersect with other screen //优化了文件管理的代码 会导致bug 15351 需要注释一下代码 // int count = 0; - // const QRect pr = m_settings->primaryRect(); + // const QRect pr = m_settings->currentRawRect(); // for (auto *screen : qApp->screens()) { // const QRect sr = screen->geometry(); // if (sr == pr)