diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp index 62d8d8669..bc8f9ae3b 100644 --- a/panels/dock/dockpanel.cpp +++ b/panels/dock/dockpanel.cpp @@ -161,8 +161,13 @@ bool DockPanel::init() m_theme = static_cast(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()); auto platformName = QGuiApplication::platformName(); if (QStringLiteral("wayland") == platformName) { - // TODO: support get color type from wayland m_helper = new WaylandDockHelper(this); + // Fallback to DGuiApplicationHelper for theme color when wayland wallpaper color is not available. + // TODO: remove this when initWallpaperColorManager is re-enabled + QObject::connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged, + this, [this]() { + setColorTheme(static_cast(Dtk::Gui::DGuiApplicationHelper::instance()->themeType())); + }); } else if (QStringLiteral("xcb") == platformName) { QObject::connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged, this, [this](){ diff --git a/panels/dock/waylanddockhelper.cpp b/panels/dock/waylanddockhelper.cpp index 76bc0f768..57493d61f 100644 --- a/panels/dock/waylanddockhelper.cpp +++ b/panels/dock/waylanddockhelper.cpp @@ -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 @@ -22,26 +22,12 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel) , m_isCurrentActiveWindowFullscreened(false) , m_panel(panel) { - m_wallpaperColorManager.reset(new WallpaperColorManager(this)); m_ddeShellManager.reset(new TreeLandDDEShellManager()); DS_NAMESPACE::DAppletBridge bridge("org.deepin.ds.dock.taskmanager"); if (auto applet = bridge.applet()) { connect(applet, SIGNAL(windowFullscreenChanged(bool)), this, SLOT(setCurrentActiveWindowFullscreened(bool))); } - connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() { - m_wallpaperColorManager->watchScreen(dockScreenName()); - }); - - connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() { - if (m_panel->rootObject() != nullptr) { - m_wallpaperColorManager->watchScreen(dockScreenName()); - } - }); - - connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() { - m_wallpaperColorManager->watchScreen(dockScreenName()); - }); connect(m_panel, &DockPanel::positionChanged, this, &WaylandDockHelper::updateOverlapCheckerPos); connect(m_panel, &DockPanel::dockSizeChanged, this, &WaylandDockHelper::updateOverlapCheckerPos); @@ -65,9 +51,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel) } }); - if (m_panel->rootObject() != nullptr) { - m_wallpaperColorManager->watchScreen(dockScreenName()); - } } void WaylandDockHelper::updateOverlapCheckerPos() @@ -139,6 +122,29 @@ bool WaylandDockHelper::isWindowOverlap() return m_isWindowOverlap; } +void WaylandDockHelper::initWallpaperColorManager() +{ + m_wallpaperColorManager.reset(new WallpaperColorManager(this)); + + connect(m_panel, &DockPanel::rootObjectChanged, this, [this]() { + m_wallpaperColorManager->watchScreen(dockScreenName()); + }); + + connect(m_wallpaperColorManager.get(), &WallpaperColorManager::activeChanged, this, [this]() { + if (m_panel->rootObject() != nullptr) { + m_wallpaperColorManager->watchScreen(dockScreenName()); + } + }); + + connect(m_panel, &DockPanel::dockScreenChanged, this, [this]() { + m_wallpaperColorManager->watchScreen(dockScreenName()); + }); + + if (m_panel->rootObject() != nullptr) { + m_wallpaperColorManager->watchScreen(dockScreenName()); + } +} + void WaylandDockHelper::setDockColorTheme(const ColorTheme &theme) { m_panel->setColorTheme(theme); diff --git a/panels/dock/waylanddockhelper.h b/panels/dock/waylanddockhelper.h index 163e85fac..5535b9e5a 100644 --- a/panels/dock/waylanddockhelper.h +++ b/panels/dock/waylanddockhelper.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 #pragma once @@ -42,6 +42,7 @@ protected Q_SLOTS: private: void updateOverlapCheckerPos(); + void initWallpaperColorManager(); private: friend class TreeLandWindowOverlapChecker;