From 32894dd413af8d4f88dc2d40cc147b3c7ab14990 Mon Sep 17 00:00:00 2001 From: Dong Hualin Date: Thu, 29 Jul 2021 11:32:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=88=A4=E6=96=AD=E9=BC=A0=E6=A0=87=E5=9C=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=A0=8F=E8=BE=B9=E7=BC=98=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 双屏幕的情况下,在当前鼠标位置的x和任务栏的x坐标相等的情况下,增加鼠标位置的y坐标在任务栏的上下区域内的判断;同时,在鼠标的y坐标和任务栏的y坐标相等的情况下,判断鼠标的X坐标是否在任务栏的左右区域内 Log: 修复双屏情况下鼠标无法唤起任务栏的bug Bug: https://pms.uniontech.com/zentao/bug-view-89237.html Change-Id: I7ce288090911aacb5f1193a314bc285f168eea46 --- frame/util/multiscreenworker.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index b096af6af..ff239ea1d 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -1474,18 +1474,27 @@ QScreen *MultiScreenWorker::screenByName(const QString &screenName) bool MultiScreenWorker::onScreenEdge(const QString &screenName, const QPoint &point) { - bool ret = false; QScreen *screen = screenByName(screenName); if (screen) { const QRect r { screen->geometry() }; const QRect rect { r.topLeft(), r.size() *screen->devicePixelRatio() }; - if (rect.x() == point.x() - || rect.x() + rect.width() == point.x() - || rect.y() == point.y() - || rect.y() + rect.height() == point.y()) - ret = true; + + // 除了要判断鼠标的x坐标和当前区域的位置外,还需要判断当前的坐标的y坐标是否在任务栏的区域内 + // 因为有如下场景:任务栏在左侧,双屏幕屏幕上下拼接,此时鼠标沿着最左侧x=0的位置移动到另外一个屏幕 + // 如果不判断y坐标的话,此时就认为鼠标在当前任务栏的边缘,导致任务栏在这种状况下没有跟随鼠标 + if ((rect.x() == point.x() || rect.right() == point.x()) + && point.y() >= rect.top() && point.y() <= rect.bottom()) { + return true; + } + + // 同上,不过此时屏幕是左右拼接,任务栏位于上方或者下方 + if ((rect.y() == point.y() || rect.bottom() == point.y()) + && point.x() >= rect.left() && point.x() <= rect.right()) { + return true; + } } - return ret; + + return false; } const QPoint MultiScreenWorker::rawXPosition(const QPoint &scaledPos)