diff --git a/panels/dock/multitaskview/multitaskview.cpp b/panels/dock/multitaskview/multitaskview.cpp index 07f160ab8..7e7d93102 100644 --- a/panels/dock/multitaskview/multitaskview.cpp +++ b/panels/dock/multitaskview/multitaskview.cpp @@ -15,9 +15,13 @@ #include DGUI_USE_NAMESPACE +DCORE_USE_NAMESPACE namespace dock { +constexpr int KWinOptimalPerformance = 4; +const QString windowEffectTypeKey = QStringLiteral("user_type"); + MultiTaskView::MultiTaskView(QObject *parent) : DApplet(parent) , m_iconName("deepin-multitasking-view") @@ -26,6 +30,19 @@ MultiTaskView::MultiTaskView(QObject *parent) auto platformName = QGuiApplication::platformName(); if (QStringLiteral("wayland") == platformName) { m_multitaskview.reset(new TreeLandMultitaskview); + } else { + m_kWinCompositingConfig = DConfig::create("org.kde.kwin", "org.kde.kwin.compositing", QString(), this); + m_kWinEffect = m_kWinCompositingConfig->value(windowEffectTypeKey).toInt() != KWinOptimalPerformance; + + connect(m_kWinCompositingConfig, &DConfig::valueChanged, this, [=] (const QString &key) { + if (key == windowEffectTypeKey) { + bool kWinEffect = m_kWinCompositingConfig->value(windowEffectTypeKey).toInt() != KWinOptimalPerformance; + if (kWinEffect != m_kWinEffect) { + m_kWinEffect = kWinEffect; + Q_EMIT visibleChanged(); + } + } + }); } } @@ -65,7 +82,7 @@ void MultiTaskView::setIconName(const QString& iconName) bool MultiTaskView::visible() const { - return m_visible && DWindowManagerHelper::instance()->hasComposite(); + return m_kWinEffect && m_visible && DWindowManagerHelper::instance()->hasComposite(); } DockItemInfo MultiTaskView::dockItemInfo() diff --git a/panels/dock/multitaskview/multitaskview.h b/panels/dock/multitaskview/multitaskview.h index 8a47d2d16..b78b17c34 100644 --- a/panels/dock/multitaskview/multitaskview.h +++ b/panels/dock/multitaskview/multitaskview.h @@ -9,6 +9,8 @@ #include "dsglobal.h" #include "treelandmultitaskview.h" +#include + namespace dock { class MultiTaskView : public DS_NAMESPACE::DApplet @@ -36,9 +38,11 @@ class MultiTaskView : public DS_NAMESPACE::DApplet void visibleChanged(); private: - bool m_visible; + bool m_visible = true; + bool m_kWinEffect = true; QString m_iconName; QScopedPointer m_multitaskview; + Dtk::Core::DConfig *m_kWinCompositingConfig = nullptr; }; }