Skip to content

Commit f149806

Browse files
committed
fix: keep dock visible during multitask view
1. Add DBus connection to listen for KWin multitask state changes (org.kde.KWin.MultitaskStateChanged signal) 2. Track multitask view state with m_inMultitaskView member variable 3. Override auto-hide behavior to show dock when entering multitask view 4. Ensure dock remains visible during multitask view and properly checks show/hide state when exiting Log: Fixed dock auto-hide behavior during multitask view Influence: 1. Test entering and exiting multitask view with dock auto-hide enabled 2. Verify dock remains visible during multitask view 3. Confirm dock returns to normal auto-hide behavior after exiting multitask view 4. Test multiple transitions between normal and multitask views 5. Verify no regression in dock auto-hide under normal conditions fix: 在多任务视图下保持任务栏可见 1. 添加 DBus 连接监听 KWin 多任务状态变化 (org.kde.KWin.MultitaskStateChanged 信号) 2. 使用 m_inMultitaskView 成员变量跟踪多任务视图状态 3. 重写自动隐藏行为,进入多任务视图时显示任务栏 4. 确保在多任务视图中任务栏保持可见,退出时正确检查显示/隐藏状态 Log: 修复多任务视图下任务栏自动隐藏问题 Influence: 1. 测试启用任务栏自动隐藏时进入和退出多任务视图 2. 验证在多任务视图下任务栏保持可见 3. 确认退出多任务视图后任务栏恢复正常自动隐藏行为 4. 测试正常视图和多任务视图之间的多次切换 5. 验证正常情况下任务栏自动隐藏功能没有回归 PMS: BUG-312371
1 parent d2b4425 commit f149806

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

panels/dock/dockhelper.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "dockpanel.h"
88

99
#include <QGuiApplication>
10+
#include <QDBusConnection>
1011

1112
namespace dock
1213
{
@@ -40,6 +41,13 @@ DockHelper::DockHelper(DockPanel *parent)
4041
connect(m_hideTimer, &QTimer::timeout, this, &DockHelper::checkNeedHideOrNot);
4142
connect(m_showTimer, &QTimer::timeout, this, &DockHelper::checkNeedShowOrNot);
4243

44+
QDBusConnection::sessionBus().connect(QString(),
45+
QStringLiteral("/KWin"),
46+
QStringLiteral("org.kde.KWin"),
47+
QStringLiteral("MultitaskStateChanged"),
48+
this,
49+
SLOT(onMultitaskStateChanged(bool)));
50+
4351
connect(this, &DockHelper::isWindowOverlapChanged, this, [this](bool overlap) {
4452
if (overlap) {
4553
m_hideTimer->start();
@@ -220,6 +228,10 @@ void DockHelper::checkNeedHideOrNot()
220228
needHide &= !show;
221229
}
222230

231+
if (m_inMultitaskView) {
232+
needHide = false;
233+
}
234+
223235
if (needHide)
224236
parent()->setHideState(Hide);
225237
}
@@ -249,10 +261,26 @@ void DockHelper::checkNeedShowOrNot()
249261
needShow |= enter;
250262
}
251263

264+
if (m_inMultitaskView) {
265+
needShow = true;
266+
}
267+
252268
if (needShow)
253269
parent()->setHideState(Show);
254270
}
255271

272+
void DockHelper::onMultitaskStateChanged(bool inMultitask)
273+
{
274+
if (m_inMultitaskView != inMultitask) {
275+
m_inMultitaskView = inMultitask;
276+
if (m_inMultitaskView) {
277+
checkNeedShowOrNot();
278+
} else {
279+
checkNeedHideOrNot();
280+
}
281+
}
282+
}
283+
256284
DockPanel* DockHelper::parent()
257285
{
258286
return static_cast<DockPanel *>(QObject::parent());

panels/dock/dockhelper.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -42,11 +42,13 @@ class DockHelper : public QObject
4242
public Q_SLOTS:
4343
void checkNeedHideOrNot();
4444
void checkNeedShowOrNot();
45+
void onMultitaskStateChanged(bool inMultitask);
4546

4647
private:
4748
void initAreas();
4849

4950
private:
51+
bool m_inMultitaskView = false;
5052
QHash<QScreen *, DockWakeUpArea *> m_areas;
5153
QHash<QWindow *, bool> m_enters;
5254
QHash<QWindow *, bool> m_transientChildShows;

0 commit comments

Comments
 (0)