From 356648a99078ca5e85bb2ac538f86671b799f768 Mon Sep 17 00:00:00 2001 From: chenbin Date: Mon, 30 May 2022 13:49:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E8=AE=BE=E7=BD=AE=E5=8F=B3=E8=BE=B9=E4=B8=94=E4=B8=80?= =?UTF-8?q?=E7=9B=B4=E9=9A=90=E8=97=8F=E6=97=B6,=E5=94=A4=E8=B5=B7?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E4=B8=AD=E5=BF=83=E6=98=BE=E7=A4=BA=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 由于去掉了com.deepin.dde.dock接口的调用,通过后端接口获取的dock的区域是一直显示的区域,导致该问题的出现 一直隐藏时也需要设置dock区域,但当设置为智能隐藏模式时,后端已经处理,隐藏后不需要再次设置dock区域,会导致后端接口循环调用 Log: 修复任务栏设置右边且一直隐藏时,唤起通知中心显示异常的问题 Influence: 唤起通知中心 Bug: https://pms.uniontech.com/bug-view-128235.html Change-Id: I12b7f23e184b74aa47ae1ec099d75b16a9cc37af --- frame/util/multiscreenworker.cpp | 9 +++++---- frame/util/multiscreenworker.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 94e9aed4d..6792427db 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -149,7 +149,7 @@ QRect MultiScreenWorker::dockRect(const QString &screenName) */ QRect MultiScreenWorker::dockRectWithoutScale(const QString &screenName, const Position &pos, const HideMode &hideMode, const DisplayMode &displayMode) { - if (hideMode == HideMode::KeepShowing) + if (hideMode == HideMode::KeepShowing || m_currentHideState == HideState::Show) return getDockShowGeometry(screenName, pos, displayMode, true); else return getDockHideGeometry(screenName, pos, displayMode, true); @@ -660,10 +660,10 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() void MultiScreenWorker::onRequestUpdateFrontendGeometry() { - const QRect rect = dockRectWithoutScale(m_ds.current(), m_position, HideMode::KeepShowing, m_displayMode); + const QRect rect = dockRectWithoutScale(m_ds.current(), m_position, m_hideMode, m_displayMode); - //!!! 向com.deepin.dde.daemon.Dock的SetFrontendWindowRect接口设置区域时,此区域的高度或宽度不能为0,否则会导致其HideState属性循环切换,造成任务栏循环显示或隐藏 - if (rect.width() == 0 || rect.height() == 0) + //!!! 智能隐藏模式下隐藏之后不需要在设置一次,否则会导致HideState属性循环变化 + if (m_hideMode == HideMode::SmartHide && m_currentHideState == HideState::Hide) return; #ifdef QT_DEBUG @@ -1024,6 +1024,7 @@ void MultiScreenWorker::displayAnimation(const QString &screen, const Position & || testState(ShowAnimationStart)) return; + m_currentHideState = act ? HideState::Hide : HideState::Show; QRect mainwindowRect = parent()->geometry(); QRect dockShowRect = getDockShowGeometry(screen, pos, m_displayMode); QRect dockHideRect = getDockHideGeometry(screen, pos, m_displayMode); diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index 5472d138e..82d137bd9 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -269,6 +269,7 @@ private: Position m_position; HideMode m_hideMode; HideState m_hideState; + HideState m_currentHideState; DisplayMode m_displayMode; /***************不和其他流程产生交互,尽量不要动这里的变量***************/