diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 1c59fda5a..a237c8b50 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -4,7 +4,9 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "multiscreenworker.h" +#include "constants.h" #include "mainwindow.h" +#include "taskmanager/taskmanager.h" #include "utils.h" #include "displaymanager.h" #include "traymainwindow.h" @@ -102,6 +104,10 @@ void MultiScreenWorker::onRegionMonitorChanged(int x, int y, const QString &key) if (m_registerKey != key || testState(MousePress)) return; + if (m_hideMode == HideMode::KeepHidden) { + TaskManager::instance()->setPropHideState(HideState::Show); + } + tryToShowDock(x, y); } @@ -122,6 +128,10 @@ void MultiScreenWorker::onExtralRegionMonitorChanged(int x, int y, const QString // 鼠标移动到任务栏界面之外,停止计时器(延时2秒改变任务栏所在屏幕) m_delayWakeTimer->stop(); + if (m_hideMode == HideMode::KeepHidden) { + TaskManager::instance()->setPropHideState(HideState::Hide); + } + if (m_hideMode == HideMode::KeepShowing || ((m_hideMode == HideMode::KeepHidden || m_hideMode == HideMode::SmartHide) && m_hideState == HideState::Show)) { Q_EMIT requestPlayAnimation(DOCK_SCREEN->current(), m_position, Dock::AniAction::Show); diff --git a/frame/window/mainwindowbase.cpp b/frame/window/mainwindowbase.cpp index 004cfeaa8..2db7c5b3b 100644 --- a/frame/window/mainwindowbase.cpp +++ b/frame/window/mainwindowbase.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "mainwindowbase.h" +#include "constants.h" #include "dragwidget.h" #include "multiscreenworker.h" #include "dockscreen.h" @@ -270,27 +271,30 @@ void MainWindowBase::resetDragWindow() if (!screen) return; - QRect currentRect = getDockGeometry(screen, position(), displayMode(), Dock::HideState::Show); + if (m_multiScreenWorker->hideState() == Dock::HideState::Show) { + QRect currentRect = getDockGeometry(screen, position(), displayMode(), Dock::HideState::Show); - // 这个时候屏幕有可能是隐藏的,不能直接使用this->width()这种去设置任务栏的高度,而应该保证原值 - int dockSize = 0; - if (m_multiScreenWorker->position() == Position::Left - || m_multiScreenWorker->position() == Position::Right) { - dockSize = this->width() == 0 ? currentRect.width() : this->width(); - } else { - dockSize = this->height() == 0 ? currentRect.height() : this->height(); - } + // 这个时候屏幕有可能是隐藏的,不能直接使用this->width()这种去设置任务栏的高度,而应该保证原值 + int dockSize = 0; + if (m_multiScreenWorker->position() == Position::Left + || m_multiScreenWorker->position() == Position::Right) { + dockSize = this->width() == 0 ? currentRect.width() : this->width(); + } else { + dockSize = this->height() == 0 ? currentRect.height() : this->height(); + } - /** FIX ME - * 作用:限制dockSize的值在40~100之间。 - * 问题1:如果dockSize为39,会导致dock的mainwindow高度变成99,显示的内容高度却是39。 - * 问题2:dockSize的值在这里不应该为39,但在高分屏上开启缩放后,拉高任务栏操作会概率出现。 - * 暂时未分析出原因,后面再修改。 - */ - dockSize = qBound(DOCK_MIN_SIZE, dockSize, DOCK_MAX_SIZE); + /** FIX ME + * 作用:限制dockSize的值在40~100之间。 + * 问题1:如果dockSize为39,会导致dock的mainwindow高度变成99,显示的内容高度却是39。 + * 问题2:dockSize的值在这里不应该为39,但在高分屏上开启缩放后,拉高任务栏操作会概率出现。 + * 暂时未分析出原因,后面再修改。 + */ + dockSize = qBound(DOCK_MIN_SIZE, dockSize, DOCK_MAX_SIZE); + + // 通知窗管和后端更新数据 + m_multiScreenWorker->updateDaemonDockSize(dockSize); // 1.先更新任务栏高度 + } - // 通知窗管和后端更新数据 - m_multiScreenWorker->updateDaemonDockSize(dockSize); // 1.先更新任务栏高度 m_multiScreenWorker->requestUpdateFrontendGeometry(); // 2.再更新任务栏位置,保证先1再2 m_multiScreenWorker->requestNotifyWindowManager(); m_multiScreenWorker->requestUpdateRegionMonitor(); // 界面发生变化,应更新监控区域