fix: 解决任务栏在一直隐藏的状态下鼠标经过一直闪烁的问题

任务栏在隐藏的时候,鼠标经过任务栏,唤醒任务栏,此时触发屏幕的可用区域或虚拟区域变化,会调用重置任务栏(resetDock)方法,重新将任务栏的高度变成0,引起任务栏闪烁。因此,在此处判断当前的任务栏区域和上一次任务栏区域是否发生改变来决定是否继续执行重置任务栏的操作

Log: 优化任务栏在隐藏模式下的状态改变逻辑
Bug: https://pms.uniontech.com/zentao/bug-view-90467.html
Change-Id: I4037034b131db361fd5dd05276dbeba1bc3d6191
This commit is contained in:
Dong Hualin 2021-08-13 10:31:24 +08:00 committed by donghualin
parent 8f389aa949
commit 6ce4badcfa
2 changed files with 11 additions and 3 deletions

View File

@ -1074,10 +1074,16 @@ void MultiScreenWorker::displayAnimation(const QString &screen, const Position &
switch (act) {
case AniAction::Show:
if (newState == QVariantAnimation::Running && oldState == QVariantAnimation::Stopped) {
setStates(ShowAnimationStart);
if (m_hideMode == HideMode::KeepShowing || composite)
setStates(ShowAnimationStart);
else
setStates(DockIsShowing);
}
if (newState == QVariantAnimation::Stopped && oldState == QVariantAnimation::Running) {
setStates(ShowAnimationStart, false);
if (m_hideMode == HideMode::KeepShowing || composite)
setStates(ShowAnimationStart, false);
else // 如果不是一直显示的状态则让其延时修改状态防止在resetDock的时候重复改变其高度引起任务栏闪烁导致无法唤醒
QTimer::singleShot(ANIMATIONTIME, [ = ] { setStates(DockIsShowing, false); });
}
break;
case AniAction::Hide:
@ -1254,7 +1260,8 @@ void MultiScreenWorker::resetDockScreen()
{
if (testState(ChangePositionAnimationStart)
|| testState(HideAnimationStart)
|| testState(ShowAnimationStart))
|| testState(ShowAnimationStart)
|| testState(DockIsShowing))
return;
m_ds.updateDockedScreen(getValidScreen(position()));

View File

@ -123,6 +123,7 @@ public:
MousePress = 0x10, // 当前鼠标是否被按下
TouchPress = 0x20, // 当前触摸屏下是否按下
LauncherDisplay = 0x40, // 启动器是否显示
DockIsShowing = 0x80, // 任务栏正在显示
// 如果要添加新的状态,可以在上面添加
RunState_Mask = 0xffffffff,