diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp index cf1b5fc51..c672686aa 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 231806193..00eeb1ff2 100644 --- a/panels/dock/waylanddockhelper.cpp +++ b/panels/dock/waylanddockhelper.cpp @@ -22,7 +22,6 @@ 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()) { @@ -37,19 +36,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel) } } - 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); @@ -73,9 +59,6 @@ WaylandDockHelper::WaylandDockHelper(DockPanel *panel) } }); - if (m_panel->rootObject() != nullptr) { - m_wallpaperColorManager->watchScreen(dockScreenName()); - } } void WaylandDockHelper::updateOverlapCheckerPos() @@ -147,6 +130,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 d48dc9342..65d747f3a 100644 --- a/panels/dock/waylanddockhelper.h +++ b/panels/dock/waylanddockhelper.h @@ -47,6 +47,7 @@ protected Q_SLOTS: private: void updateOverlapCheckerPos(); + void initWallpaperColorManager(); private: friend class TreeLandWindowOverlapChecker;