From 78cdddecc1f19e1c02427b66c04aa46b29d47ea1 Mon Sep 17 00:00:00 2001 From: wangfei Date: Thu, 18 Apr 2024 14:43:59 +0800 Subject: [PATCH] fix: don't save the visibility save the visibility of a plugin item by dconfig tool Issue: https://github.com/linuxdeepin/developer-center/issues/7959 --- panels/dock/dconfig/org.deepin.ds.dock.json | 12 +++++++- panels/dock/dockdbusproxy.cpp | 33 +++++++++++++++++++++ panels/dock/dockdbusproxy.h | 1 + panels/dock/docksettings.cpp | 20 +++++++++++++ panels/dock/docksettings.h | 5 ++++ 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/panels/dock/dconfig/org.deepin.ds.dock.json b/panels/dock/dconfig/org.deepin.ds.dock.json index 470cfcdd8..2ba2fe9e1 100644 --- a/panels/dock/dconfig/org.deepin.ds.dock.json +++ b/panels/dock/dconfig/org.deepin.ds.dock.json @@ -51,6 +51,16 @@ "description": "", "permissions": "readwrite", "visibility": "private" - } + }, + "Plugins_Visible": { + "value": {}, + "serial": 0, + "flags": [], + "name": "The visibilities of plugins", + "name[zh_CN]": "插件可见性", + "description": "The loaded plugin which is visible when dock is started.", + "permissions": "readwrite", + "visibility": "private" + } } } diff --git a/panels/dock/dockdbusproxy.cpp b/panels/dock/dockdbusproxy.cpp index 29b1f3ded..6ea58f051 100644 --- a/panels/dock/dockdbusproxy.cpp +++ b/panels/dock/dockdbusproxy.cpp @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: GPL-3.0-or-later +#include "docksettings.h" #include "dsglobal.h" #include "constants.h" #include "dockpanel.h" @@ -20,6 +21,16 @@ DockDBusProxy::DockDBusProxy(DockPanel* parent) { registerPluginInfoMetaType(); + connect(DockSettings::instance(), &DockSettings::pluginsVisibleChanged, this, [this] (const QVariantMap &pluginsVisible) { + setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible); + setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible); + }); + connect(parent, &DockPanel::rootObjectChanged, this, [this]() { + auto pluginsVisible = DockSettings::instance()->pluginsVisible(); + setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible); + setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible); + }); + // Communicate with the other module auto getOtherApplet = [ = ] { QList list = appletList("org.deepin.ds.dock.tray"); @@ -91,6 +102,22 @@ QRect DockDBusProxy::geometry() return parent()->window() ? parent()->window()->geometry() : QRect(); } +void DockDBusProxy::setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible) +{ + if (auto item = applet(pluginId)) { + DockItemInfo itemInfo; + QMetaObject::invokeMethod(item, "dockItemInfo", Qt::DirectConnection, qReturnArg(itemInfo)); + QString itemKey = itemInfo.itemKey; + if (pluginsVisible.contains(itemKey)) { + QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, pluginsVisible[itemKey].toBool()); + } else { + auto settingPluginsVisible = DockSettings::instance()->pluginsVisible(); + settingPluginsVisible[itemKey] = true; + DockSettings::instance()->setPluginsVisible(settingPluginsVisible); + } + } +} + QRect DockDBusProxy::frontendWindowRect() { return parent()->frontendWindowRect(); @@ -235,8 +262,14 @@ void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &item { if (itemKey == "clipboard" && m_clipboardApplet) { QMetaObject::invokeMethod(m_clipboardApplet, "setVisible", Qt::QueuedConnection, visible); + auto pluginsVisible = DockSettings::instance()->pluginsVisible(); + pluginsVisible[itemKey] = visible; + DockSettings::instance()->setPluginsVisible(pluginsVisible); } else if(itemKey == "search" && m_searchApplet) { QMetaObject::invokeMethod(m_searchApplet, "setVisible", Qt::QueuedConnection, visible); + auto pluginsVisible = DockSettings::instance()->pluginsVisible(); + pluginsVisible[itemKey] = visible; + DockSettings::instance()->setPluginsVisible(pluginsVisible); } else if (m_oldDockApplet) { QMetaObject::invokeMethod(m_oldDockApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible); } diff --git a/panels/dock/dockdbusproxy.h b/panels/dock/dockdbusproxy.h index 051c3ba20..d81b8b9db 100644 --- a/panels/dock/dockdbusproxy.h +++ b/panels/dock/dockdbusproxy.h @@ -72,6 +72,7 @@ class DockDBusProxy final: public QObject, public QDBusContext QString getAppID(const QString &desktopfile); QList appletList(const QString &pluginId) const; DS_NAMESPACE::DApplet *applet(const QString &pluginId) const; + void setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible); DS_NAMESPACE::DApplet *m_oldDockApplet; DS_NAMESPACE::DApplet *m_clipboardApplet; diff --git a/panels/dock/docksettings.cpp b/panels/dock/docksettings.cpp index 03514cf84..4c4cd95c8 100644 --- a/panels/dock/docksettings.cpp +++ b/panels/dock/docksettings.cpp @@ -16,6 +16,7 @@ const static QString keyHideMode = "Hide_Mode"; const static QString keyDockSize = "Dock_Size"; const static QString keyItemAlignment = "Item_Alignment"; const static QString keyIndicatorStyle = "Indicator_Style"; +const static QString keyPluginsVisible = "Plugins_Visible"; namespace dock { @@ -143,6 +144,7 @@ void DockSettings::init() m_dockPosition = string2Position(m_dockConfig->value(keyPosition).toString()); m_alignment = string2ItenAlignment(m_dockConfig->value(keyItemAlignment).toString()); m_style = string2IndicatorStyle(m_dockConfig->value(keyIndicatorStyle).toString()); + m_pluginsVisible = m_dockConfig->value(keyPluginsVisible).toMap(); connect(m_dockConfig.data(), &DConfig::valueChanged, this, [this](const QString& key){ if (keyDockSize == key) { @@ -170,6 +172,9 @@ void DockSettings::init() if (style == m_style) return; m_style = style; Q_EMIT indicatorStyleChanged(m_style); + } else if (keyPluginsVisible == key) { + auto pluginsVisible = m_dockConfig->value(keyPluginsVisible).toMap(); + setPluginsVisible(pluginsVisible); } }); } else { @@ -247,6 +252,21 @@ void DockSettings::setIndicatorStyle(const IndicatorStyle& style) addWriteJob(indicatorStyleJob); } +QVariantMap DockSettings::pluginsVisible() +{ + return m_pluginsVisible; +} + +void DockSettings::setPluginsVisible(const QVariantMap & pluginsVisible) +{ + if (m_pluginsVisible == pluginsVisible) { + return; + } + m_pluginsVisible = pluginsVisible; + m_dockConfig->setValue(keyPluginsVisible, QVariant::fromValue(m_pluginsVisible)); + Q_EMIT pluginsVisibleChanged(m_pluginsVisible); +} + void DockSettings::addWriteJob(WriteJob job) { if (m_writeJob.contains(job)) return; diff --git a/panels/dock/docksettings.h b/panels/dock/docksettings.h index 368ee3cd8..a21c2204a 100644 --- a/panels/dock/docksettings.h +++ b/panels/dock/docksettings.h @@ -24,6 +24,7 @@ class DockSettings : public QObject Q_PROPERTY(Position position READ position WRITE setPosition NOTIFY positionChanged FINAL) Q_PROPERTY(ItemAlignment itemAlignment READ itemAlignment WRITE setItemAlignment NOTIFY itemAlignmentChanged FINAL) Q_PROPERTY(IndicatorStyle indicatorStyle READ indicatorStyle WRITE setIndicatorStyle NOTIFY indicatorStyleChanged FINAL) + Q_PROPERTY(QVariantMap pluginsVisible READ pluginsVisible WRITE setPluginsVisible NOTIFY pluginsVisibleChanged FINAL) public: static DockSettings* instance(); @@ -33,12 +34,14 @@ class DockSettings : public QObject Position position(); ItemAlignment itemAlignment(); IndicatorStyle indicatorStyle(); + QVariantMap pluginsVisible(); void setDockSize(const uint& size); void setHideMode(const HideMode& mode); void setPosition(const Position& position); void setItemAlignment(const ItemAlignment& alignment); void setIndicatorStyle(const IndicatorStyle& style); + void setPluginsVisible(const QVariantMap & pluginsVisible); private: enum WriteJob { @@ -61,6 +64,7 @@ class DockSettings : public QObject void positionChanged(Position position); void itemAlignmentChanged(ItemAlignment alignment); void indicatorStyleChanged(IndicatorStyle style); + void pluginsVisibleChanged(const QVariantMap &pluginsVisible); private: QScopedPointer m_dockConfig; @@ -72,5 +76,6 @@ class DockSettings : public QObject Position m_dockPosition; ItemAlignment m_alignment; IndicatorStyle m_style; + QVariantMap m_pluginsVisible; }; }