Skip to content

Commit

Permalink
fix: don't save the visibility
Browse files Browse the repository at this point in the history
save the visibility of a plugin item by dconfig tool

Issue: linuxdeepin/developer-center#7959
  • Loading branch information
wangfei authored and 18202781743 committed Apr 19, 2024
1 parent 0df1ac6 commit 521674a
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 1 deletion.
12 changes: 11 additions & 1 deletion panels/dock/dconfig/org.deepin.ds.dock.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
}
33 changes: 33 additions & 0 deletions panels/dock/dockdbusproxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "docksettings.h"
#include "dsglobal.h"
#include "constants.h"
#include "dockpanel.h"
Expand All @@ -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<DS_NAMESPACE::DApplet *> list = appletList("org.deepin.ds.dock.tray");
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}
Expand Down
1 change: 1 addition & 0 deletions panels/dock/dockdbusproxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class DockDBusProxy final: public QObject, public QDBusContext
QString getAppID(const QString &desktopfile);
QList<DS_NAMESPACE::DApplet *> 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;
Expand Down
20 changes: 20 additions & 0 deletions panels/dock/docksettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions panels/dock/docksettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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 {
Expand All @@ -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<DConfig> m_dockConfig;
Expand All @@ -72,5 +76,6 @@ class DockSettings : public QObject
Position m_dockPosition;
ItemAlignment m_alignment;
IndicatorStyle m_style;
QVariantMap m_pluginsVisible;
};
}

0 comments on commit 521674a

Please sign in to comment.