Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
};
}