Skip to content

Commit 08f1c91

Browse files
committed
fix: fallback dock theme to system settings on wayland
1. Disable WallpaperColorManager initialization in WaylandDockHelper constructor 2. Extract wallpaper color management to a separate initWallpaperColorManager() method 3. Connect dock theme changes to DGuiApplicationHelper themeTypeChanged signal on Wayland 4. This ensures dock follows system theme when wallpaper color is unavailable Log: Dock theme on Wayland now falls back to system color settings Influence: 1. Test dock color theme toggling between light and dark on Wayland 2. Verify dock theme syncs with system settings after change 3. Ensure no regression in dock color behavior on X11 4. Check that wallpaper color feature is cleanly disabled without errors 5. Verify dock screen changes don't trigger wallpaper color manager calls fix: wayland下dock暗亮色回退到系统设置 1. 禁用WaylandDockHelper构造函数中的WallpaperColorManager初始化 2. 将壁纸颜色管理提取到独立的initWallpaperColorManager()方法中 3. 在Wayland上连接dock主题变化到DGuiApplicationHelper的themeTypeChanged 信号 4. 确保壁纸颜色不可用时dock遵循系统主题 Log: Wayland下Dock主题现在回退到系统颜色设置 Influence: 1. 在Wayland上测试dock颜色主题在亮色和暗色间切换 2. 验证dock主题在系统设置更改后同步 3. 确保X11上dock颜色行为无回归 4. 检查壁纸颜色功能被干净禁用,无错误产生 5. 验证dock屏幕变化不会触发壁纸颜色管理器调用 PMS: BUG-344841
1 parent 263f2ec commit 08f1c91

3 files changed

Lines changed: 32 additions & 20 deletions

File tree

panels/dock/dockpanel.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,13 @@ bool DockPanel::init()
161161
m_theme = static_cast<ColorTheme>(Dtk::Gui::DGuiApplicationHelper::instance()->themeType());
162162
auto platformName = QGuiApplication::platformName();
163163
if (QStringLiteral("wayland") == platformName) {
164-
// TODO: support get color type from wayland
165164
m_helper = new WaylandDockHelper(this);
165+
// Fallback to DGuiApplicationHelper for theme color when wayland wallpaper color is not available.
166+
// TODO: remove this when initWallpaperColorManager is re-enabled
167+
QObject::connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged,
168+
this, [this]() {
169+
setColorTheme(static_cast<ColorTheme>(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()));
170+
});
166171
} else if (QStringLiteral("xcb") == platformName) {
167172
QObject::connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged,
168173
this, [this](){

panels/dock/waylanddockhelper.cpp

Lines changed: 24 additions & 18 deletions
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

@@ -22,26 +22,12 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel)
2222
, m_isCurrentActiveWindowFullscreened(false)
2323
, m_panel(panel)
2424
{
25-
m_wallpaperColorManager.reset(new WallpaperColorManager(this));
2625
m_ddeShellManager.reset(new TreeLandDDEShellManager());
2726
DS_NAMESPACE::DAppletBridge bridge("org.deepin.ds.dock.taskmanager");
2827
if (auto applet = bridge.applet()) {
2928
connect(applet, SIGNAL(windowFullscreenChanged(bool)), this, SLOT(setCurrentActiveWindowFullscreened(bool)));
3029
}
3130

32-
connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() {
33-
m_wallpaperColorManager->watchScreen(dockScreenName());
34-
});
35-
36-
connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() {
37-
if (m_panel->rootObject() != nullptr) {
38-
m_wallpaperColorManager->watchScreen(dockScreenName());
39-
}
40-
});
41-
42-
connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() {
43-
m_wallpaperColorManager->watchScreen(dockScreenName());
44-
});
4531

4632
connect(m_panel, &DockPanel::positionChanged, this, &WaylandDockHelper::updateOverlapCheckerPos);
4733
connect(m_panel, &DockPanel::dockSizeChanged, this, &WaylandDockHelper::updateOverlapCheckerPos);
@@ -65,9 +51,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel)
6551
}
6652
});
6753

68-
if (m_panel->rootObject() != nullptr) {
69-
m_wallpaperColorManager->watchScreen(dockScreenName());
70-
}
7154
}
7255

7356
void WaylandDockHelper::updateOverlapCheckerPos()
@@ -139,6 +122,29 @@ bool WaylandDockHelper::isWindowOverlap()
139122
return m_isWindowOverlap;
140123
}
141124

125+
void WaylandDockHelper::initWallpaperColorManager()
126+
{
127+
m_wallpaperColorManager.reset(new WallpaperColorManager(this));
128+
129+
connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() {
130+
m_wallpaperColorManager->watchScreen(dockScreenName());
131+
});
132+
133+
connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() {
134+
if (m_panel->rootObject() != nullptr) {
135+
m_wallpaperColorManager->watchScreen(dockScreenName());
136+
}
137+
});
138+
139+
connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() {
140+
m_wallpaperColorManager->watchScreen(dockScreenName());
141+
});
142+
143+
if (m_panel->rootObject() != nullptr) {
144+
m_wallpaperColorManager->watchScreen(dockScreenName());
145+
}
146+
}
147+
142148
void WaylandDockHelper::setDockColorTheme(const ColorTheme &theme)
143149
{
144150
m_panel->setColorTheme(theme);

panels/dock/waylanddockhelper.h

Lines changed: 2 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
#pragma once
@@ -42,6 +42,7 @@ protected Q_SLOTS:
4242

4343
private:
4444
void updateOverlapCheckerPos();
45+
void initWallpaperColorManager();
4546

4647
private:
4748
friend class TreeLandWindowOverlapChecker;

0 commit comments

Comments
 (0)