diff --git a/applets/dde-appearance/appearanceapplet.cpp b/applets/dde-appearance/appearanceapplet.cpp index 68e3c4a86..38943d681 100644 --- a/applets/dde-appearance/appearanceapplet.cpp +++ b/applets/dde-appearance/appearanceapplet.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 @@ -39,11 +39,7 @@ bool AppearanceApplet::load() qreal AppearanceApplet::opacity() const { - if (!m_interface) - return -1; - - // The minimum opacity is 0.2 - return std::max(0.2, m_interface->opacity()); + return m_opacity; } void AppearanceApplet::initDBusProxy() @@ -56,11 +52,25 @@ void AppearanceApplet::initDBusProxy() if (!m_interface->isValid()) { qWarning() << "Failed to proxy Appearance, error:" << m_interface->lastError(); m_interface.reset(); + updateOpacity(-1); return; } - m_interface->setSync(false); - QObject::connect(m_interface.data(), &org::deepin::dde::Appearance1::OpacityChanged, this, &AppearanceApplet::opacityChanged); + QObject::connect(m_interface.data(), &org::deepin::dde::Appearance1::OpacityChanged, + this, &AppearanceApplet::updateOpacity); + updateOpacity(m_interface->opacity()); +} + +void AppearanceApplet::updateOpacity(qreal opacity) +{ + if (opacity >= 0) { + // The minimum opacity is 0.2 + opacity = std::max(0.2, opacity); + } + if (qFuzzyCompare(m_opacity, opacity)) + return; + + m_opacity = opacity; Q_EMIT opacityChanged(); } diff --git a/applets/dde-appearance/appearanceapplet.h b/applets/dde-appearance/appearanceapplet.h index 956b1e5bf..cef72b299 100644 --- a/applets/dde-appearance/appearanceapplet.h +++ b/applets/dde-appearance/appearanceapplet.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 @@ -24,8 +24,10 @@ class AppearanceApplet : public DApplet void opacityChanged(); private: void initDBusProxy(); + void updateOpacity(qreal opacity); private: QScopedPointer m_interface; + qreal m_opacity = -1; }; } diff --git a/panels/dock/taskmanager/taskmanager.cpp b/panels/dock/taskmanager/taskmanager.cpp index bff0edf57..dbbcaf4ed 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -538,8 +538,8 @@ void TaskManager::modifyOpacityChanged() DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance"); auto appearanceApplet = appearanceBridge.applet(); if (appearanceApplet) { - double opacity = appearanceApplet->property("opacity").toReal(); if (auto x11Monitor = qobject_cast(m_windowMonitor.data())) { + double opacity = appearanceApplet->property("opacity").toReal(); x11Monitor->setPreviewOpacity(opacity); } } else {