Skip to content

Commit ae3a27b

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 46c66aa commit ae3a27b

3 files changed

Lines changed: 30 additions & 18 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: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ 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()) {
@@ -37,19 +36,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel)
3736
}
3837
}
3938

40-
connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() {
41-
m_wallpaperColorManager->watchScreen(dockScreenName());
42-
});
43-
44-
connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() {
45-
if (m_panel->rootObject() != nullptr) {
46-
m_wallpaperColorManager->watchScreen(dockScreenName());
47-
}
48-
});
49-
50-
connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() {
51-
m_wallpaperColorManager->watchScreen(dockScreenName());
52-
});
5339

5440
connect(m_panel, &DockPanel::positionChanged, this, &WaylandDockHelper::updateOverlapCheckerPos);
5541
connect(m_panel, &DockPanel::dockSizeChanged, this, &WaylandDockHelper::updateOverlapCheckerPos);
@@ -73,9 +59,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel)
7359
}
7460
});
7561

76-
if (m_panel->rootObject() != nullptr) {
77-
m_wallpaperColorManager->watchScreen(dockScreenName());
78-
}
7962
}
8063

8164
void WaylandDockHelper::updateOverlapCheckerPos()
@@ -147,6 +130,29 @@ bool WaylandDockHelper::isWindowOverlap()
147130
return m_isWindowOverlap;
148131
}
149132

133+
void WaylandDockHelper::initWallpaperColorManager()
134+
{
135+
m_wallpaperColorManager.reset(new WallpaperColorManager(this));
136+
137+
connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() {
138+
m_wallpaperColorManager->watchScreen(dockScreenName());
139+
});
140+
141+
connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() {
142+
if (m_panel->rootObject() != nullptr) {
143+
m_wallpaperColorManager->watchScreen(dockScreenName());
144+
}
145+
});
146+
147+
connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() {
148+
m_wallpaperColorManager->watchScreen(dockScreenName());
149+
});
150+
151+
if (m_panel->rootObject() != nullptr) {
152+
m_wallpaperColorManager->watchScreen(dockScreenName());
153+
}
154+
}
155+
150156
void WaylandDockHelper::setDockColorTheme(const ColorTheme &theme)
151157
{
152158
m_panel->setColorTheme(theme);

panels/dock/waylanddockhelper.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ protected Q_SLOTS:
4747

4848
private:
4949
void updateOverlapCheckerPos();
50+
void initWallpaperColorManager();
5051

5152
private:
5253
friend class TreeLandWindowOverlapChecker;

0 commit comments

Comments
 (0)