diff --git a/panels/dock/dockdbusproxy.cpp b/panels/dock/dockdbusproxy.cpp index 19b1ee391..2e32efdc0 100644 --- a/panels/dock/dockdbusproxy.cpp +++ b/panels/dock/dockdbusproxy.cpp @@ -92,6 +92,9 @@ QRect DockDBusProxy::geometry() void DockDBusProxy::updateDockPluginsVisible(const QVariantMap &pluginsVisible) { for (auto *dockApplet : dockApplets(parent())) { + if (!dockApplet->isSupported()) { + continue; + } DockItemInfo itemInfo = dockApplet->dockItemInfo(); QString itemKey = itemInfo.itemKey; if (pluginsVisible.contains(itemKey)) { @@ -235,6 +238,9 @@ DockItemInfos DockDBusProxy::plugins() } for (auto *dockApplet : dockApplets(parent())) { + if (!dockApplet->isSupported()) { + continue; + } iteminfos.append(dockApplet->dockItemInfo()); } diff --git a/panels/dock/frame/dappletdock.cpp b/panels/dock/frame/dappletdock.cpp index 548cee350..f975e2f13 100644 --- a/panels/dock/frame/dappletdock.cpp +++ b/panels/dock/frame/dappletdock.cpp @@ -17,6 +17,7 @@ class DAppletDockPrivate : public DAppletPrivate ~DAppletDockPrivate() override = default; bool m_visible = true; + bool m_isSupported = true; D_DECLARE_PUBLIC(DAppletDock) }; @@ -34,7 +35,7 @@ DAppletDock::DAppletDock(DAppletDockPrivate &dd, QObject *parent) bool DAppletDock::visible() const { D_DC(DAppletDock); - return d->m_visible; + return d->m_visible && d->m_isSupported; } void DAppletDock::setVisible(bool visible) @@ -43,9 +44,33 @@ void DAppletDock::setVisible(bool visible) if (d->m_visible == visible) return; + bool oldEffectiveVisible = this->visible(); d->m_visible = visible; + if (oldEffectiveVisible != this->visible()) { Q_EMIT visibleChanged(); } +} + +bool DAppletDock::isSupported() const +{ + D_DC(DAppletDock); + return d->m_isSupported; +} + +void DAppletDock::setSupported(bool supported) +{ + D_D(DAppletDock); + if (d->m_isSupported == supported) + return; + + bool oldEffectiveVisible = this->visible(); + d->m_isSupported = supported; + Q_EMIT supportedChanged(); + + if (oldEffectiveVisible != this->visible()) { + Q_EMIT visibleChanged(); + } +} DockItemInfo DAppletDock::dockItemInfo() { diff --git a/panels/dock/frame/dappletdock.h b/panels/dock/frame/dappletdock.h index 93f5adfeb..73d7c76d6 100644 --- a/panels/dock/frame/dappletdock.h +++ b/panels/dock/frame/dappletdock.h @@ -16,6 +16,7 @@ class DS_SHARE DAppletDock : public DApplet { Q_OBJECT Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged) + Q_PROPERTY(bool supported READ isSupported WRITE setSupported NOTIFY supportedChanged) D_DECLARE_PRIVATE(DAppletDock) public: @@ -27,8 +28,12 @@ class DS_SHARE DAppletDock : public DApplet bool visible() const; void setVisible(bool visible); + bool isSupported() const; + void setSupported(bool supported); + Q_SIGNALS: void visibleChanged(); + void supportedChanged(); protected: explicit DAppletDock(DAppletDockPrivate &dd, QObject *parent = nullptr); diff --git a/panels/dock/multitaskview/multitaskview.cpp b/panels/dock/multitaskview/multitaskview.cpp index fb660c1da..de3716855 100644 --- a/panels/dock/multitaskview/multitaskview.cpp +++ b/panels/dock/multitaskview/multitaskview.cpp @@ -25,7 +25,10 @@ MultiTaskView::MultiTaskView(QObject *parent) : DAppletDock(parent) , m_iconName("deepin-multitasking-view") { - connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasCompositeChanged, this, &MultiTaskView::visibleChanged); + connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasCompositeChanged, this, [this]() { + Q_EMIT visibleChanged(); + setSupported(m_kWinEffect && DWindowManagerHelper::instance()->hasComposite()); + }); auto platformName = QGuiApplication::platformName(); if (QStringLiteral("wayland") == platformName) { m_multitaskview.reset(new TreeLandMultitaskview); @@ -39,6 +42,7 @@ MultiTaskView::MultiTaskView(QObject *parent) if (kWinEffect != m_kWinEffect) { m_kWinEffect = kWinEffect; Q_EMIT visibleChanged(); + setSupported(m_kWinEffect && DWindowManagerHelper::instance()->hasComposite()); } } }); @@ -47,6 +51,8 @@ MultiTaskView::MultiTaskView(QObject *parent) bool MultiTaskView::init() { + setSupported(m_kWinEffect && DWindowManagerHelper::instance()->hasComposite()); + setVisible(m_kWinEffect && DWindowManagerHelper::instance()->hasComposite()); DAppletDock::init(); return true; } @@ -86,7 +92,7 @@ DockItemInfo MultiTaskView::dockItemInfo() info.displayName = tr("Multitasking View"); info.itemKey = "multitasking-view"; info.settingKey = "multitasking-view"; - info.visible = m_kWinEffect && DWindowManagerHelper::instance()->hasComposite(); + info.visible = visible(); info.dccIcon = DCCIconPath + "multitasking-view.svg"; return info; }