diff --git a/panels/dock/dockhelper.cpp b/panels/dock/dockhelper.cpp index bb089675b..9e31c2aee 100644 --- a/panels/dock/dockhelper.cpp +++ b/panels/dock/dockhelper.cpp @@ -7,6 +7,7 @@ #include "dockpanel.h" #include +#include namespace dock { @@ -40,6 +41,13 @@ DockHelper::DockHelper(DockPanel *parent) connect(m_hideTimer, &QTimer::timeout, this, &DockHelper::checkNeedHideOrNot); connect(m_showTimer, &QTimer::timeout, this, &DockHelper::checkNeedShowOrNot); + QDBusConnection::sessionBus().connect(QString(), + QStringLiteral("/KWin"), + QStringLiteral("org.kde.KWin"), + QStringLiteral("MultitaskStateChanged"), + this, + SLOT(onMultitaskStateChanged(bool))); + connect(this, &DockHelper::isWindowOverlapChanged, this, [this](bool overlap) { if (overlap) { m_hideTimer->start(); @@ -220,6 +228,10 @@ void DockHelper::checkNeedHideOrNot() needHide &= !show; } + if (m_inMultitaskView) { + needHide = false; + } + if (needHide) parent()->setHideState(Hide); } @@ -249,10 +261,26 @@ void DockHelper::checkNeedShowOrNot() needShow |= enter; } + if (m_inMultitaskView) { + needShow = true; + } + if (needShow) parent()->setHideState(Show); } +void DockHelper::onMultitaskStateChanged(bool inMultitask) +{ + if (m_inMultitaskView != inMultitask) { + m_inMultitaskView = inMultitask; + if (m_inMultitaskView) { + checkNeedShowOrNot(); + } else { + checkNeedHideOrNot(); + } + } +} + DockPanel* DockHelper::parent() { return static_cast(QObject::parent()); diff --git a/panels/dock/dockhelper.h b/panels/dock/dockhelper.h index 778021ad3..82b5540b5 100644 --- a/panels/dock/dockhelper.h +++ b/panels/dock/dockhelper.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -42,11 +42,13 @@ class DockHelper : public QObject public Q_SLOTS: void checkNeedHideOrNot(); void checkNeedShowOrNot(); + void onMultitaskStateChanged(bool inMultitask); private: void initAreas(); private: + bool m_inMultitaskView = false; QHash m_areas; QHash m_enters; QHash m_transientChildShows;