Skip to content

Commit 1554b86

Browse files
committed
chore: chore plugins of dock
as title log: as title
1 parent 1ffe867 commit 1554b86

File tree

13 files changed

+225
-274
lines changed

13 files changed

+225
-274
lines changed

panels/dock/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ add_library(dockpanel SHARED
5959

6060
target_link_libraries(dockpanel PRIVATE
6161
PkgConfig::WaylandClient
62-
dde-shell-frame
62+
dock-plugin
6363
)
6464

6565
if (BUILD_WITH_X11)

panels/dock/clipboarditem/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
add_library(dock-clipboarditem SHARED
66
clipboarditem.cpp
77
clipboarditem.h
8-
# ../dockiteminfo.cpp
9-
# ../dockiteminfo.h
108
)
119

1210
target_link_libraries(dock-clipboarditem PRIVATE

panels/dock/clipboarditem/clipboarditem.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
#include "ddockapplet.h"
88
#include "dsglobal.h"
9-
#include "../dockiteminfo.h"
109

1110
namespace dock {
1211

@@ -16,9 +15,9 @@ class ClipboardItem : public DS_NAMESPACE::DDockApplet
1615
public:
1716
explicit ClipboardItem(QObject *parent = nullptr);
1817

19-
QString displayName() const;
20-
QString itemKey() const;
21-
QString settingKey() const;
18+
QString displayName() const override;
19+
QString itemKey() const override;
20+
QString settingKey() const override;
2221

2322
Q_INVOKABLE void toggleClipboard();
2423
};

panels/dock/dockdbusproxy.cpp

Lines changed: 89 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,47 @@
66
#include "dsglobal.h"
77
#include "constants.h"
88
#include "dockpanel.h"
9+
#include "ddockapplet.h"
910
#include "dockdbusproxy.h"
1011

1112
#include <QObject>
1213

1314
#include <DWindowManagerHelper>
15+
#include <DDciIcon>
1416

1517
DGUI_USE_NAMESPACE
1618

1719
namespace dock {
1820
DockDBusProxy::DockDBusProxy(DockPanel* parent)
1921
: QObject(parent)
2022
, m_oldDockApplet(nullptr)
21-
, m_clipboardApplet(nullptr)
22-
, m_searchApplet(nullptr)
23-
, m_multitaskviewApplet(nullptr)
2423
{
2524
registerPluginInfoMetaType();
2625

2726
connect(DockSettings::instance(), &DockSettings::pluginsVisibleChanged, this, [this] (const QVariantMap &pluginsVisible) {
28-
setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible);
29-
setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible);
30-
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
27+
for (auto applet : m_dockApplets) {
28+
QString itemKey = applet->itemKey();
29+
if (pluginsVisible.contains(itemKey)) {
30+
applet->setVisible(pluginsVisible[itemKey].toBool());
31+
} else {
32+
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
33+
settingPluginsVisible[itemKey] = true;
34+
DockSettings::instance()->setPluginsVisible(settingPluginsVisible);
35+
}
36+
}
3137
});
3238
connect(parent, &DockPanel::rootObjectChanged, this, [this]() {
3339
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
34-
setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible);
35-
setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible);
36-
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
40+
for (auto applet : m_dockApplets) {
41+
QString itemKey = applet->itemKey();
42+
if (pluginsVisible.contains(itemKey)) {
43+
applet->setVisible(pluginsVisible[itemKey].toBool());
44+
} else {
45+
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
46+
settingPluginsVisible[itemKey] = true;
47+
DockSettings::instance()->setPluginsVisible(settingPluginsVisible);
48+
}
49+
}
3750
});
3851

3952
auto root = qobject_cast<DS_NAMESPACE::DContainment *>(this->parent());
@@ -88,12 +101,15 @@ QRect DockDBusProxy::geometry()
88101

89102
void DockDBusProxy::setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible)
90103
{
91-
if (auto item = applet(pluginId)) {
92-
DockItemInfo itemInfo;
93-
QMetaObject::invokeMethod(item, "dockItemInfo", Qt::DirectConnection, qReturnArg(itemInfo));
94-
QString itemKey = itemInfo.itemKey;
104+
auto it = std::find_if(m_dockApplets.begin(), m_dockApplets.end(), [ = ] (DS_NAMESPACE::DDockApplet *applet) {
105+
return pluginId == applet->pluginId();
106+
});
107+
108+
if (it != m_dockApplets.end()) {
109+
auto applet = (*it);
110+
const auto &itemKey = applet->itemKey();
95111
if (pluginsVisible.contains(itemKey)) {
96-
QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, pluginsVisible[itemKey].toBool());
112+
applet->setVisible(pluginsVisible[itemKey].toBool());
97113
} else {
98114
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
99115
settingPluginsVisible[itemKey] = true;
@@ -204,18 +220,27 @@ bool DockDBusProxy::RequestUndock(const QString &desktopFile)
204220

205221
void DockDBusProxy::onAppletListChanged()
206222
{
207-
// Communicate with the other module
223+
// for old dock
208224
QList<DS_NAMESPACE::DApplet *> list = appletList("org.deepin.ds.dock.tray");
209225
if (!m_oldDockApplet && !list.isEmpty()) m_oldDockApplet = list.first();
210226

211-
list = appletList("org.deepin.ds.dock.clipboarditem");
212-
if (!m_clipboardApplet && !list.isEmpty()) m_clipboardApplet = list.first();
213-
214-
list = appletList("org.deepin.ds.dock.searchitem");
215-
if (!m_searchApplet && !list.isEmpty()) m_searchApplet = list.first();
227+
// other dock plugin
228+
m_dockApplets.clear();
229+
auto root = qobject_cast<DS_NAMESPACE::DContainment *>(parent());
216230

217-
list = appletList("org.deepin.ds.dock.multitaskview");
218-
if (!m_multitaskviewApplet && !list.isEmpty()) m_multitaskviewApplet = list.first();
231+
QQueue<DS_NAMESPACE::DContainment *> containments;
232+
containments.enqueue(root);
233+
while (!containments.isEmpty()) {
234+
DS_NAMESPACE::DContainment *containment = containments.dequeue();
235+
for (const auto applet : containment->applets()) {
236+
if (auto item = qobject_cast<DS_NAMESPACE::DContainment *>(applet)) {
237+
containments.enqueue(item);
238+
}
239+
if (auto dockApplet = qobject_cast<DS_NAMESPACE::DDockApplet *>(applet)) {
240+
m_dockApplets << dockApplet;
241+
}
242+
}
243+
}
219244
}
220245

221246
QStringList DockDBusProxy::GetLoadedPlugins()
@@ -231,25 +256,46 @@ DockItemInfos DockDBusProxy::plugins()
231256
QMetaObject::invokeMethod(m_oldDockApplet, "plugins", Qt::DirectConnection, qReturnArg(iteminfos));
232257
}
233258

234-
if (m_clipboardApplet) {
259+
for (auto applet : m_dockApplets) {
235260
DockItemInfo info;
236-
if (QMetaObject::invokeMethod(m_clipboardApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
237-
iteminfos.append(info);
261+
info.name = applet->name();
262+
info.displayName = applet->displayName();
263+
info.itemKey = applet->itemKey();
264+
info.settingKey = applet->settingKey();
265+
info.visible = applet->visible();
266+
267+
{
268+
const auto lightPalette = DGuiApplicationHelper::instance()->applicationPalette(DGuiApplicationHelper::LightType);
269+
auto lightPixmap = DDciIcon::fromTheme(applet->icon()).pixmap(
270+
qApp->devicePixelRatio(),
271+
30,
272+
DDciIcon::Light,
273+
DDciIcon::Normal,
274+
DDciIconPalette::fromQPalette(lightPalette)
275+
);
276+
QBuffer buffer(&info.iconLight);
277+
if (buffer.open(QIODevice::WriteOnly)) {
278+
lightPixmap.save(&buffer, "png");
279+
}
280+
}
281+
{
282+
const auto darkPalette = DGuiApplicationHelper::instance()->applicationPalette(DGuiApplicationHelper::DarkType);
283+
auto darkPixmap = DDciIcon::fromTheme("search").pixmap(
284+
qApp->devicePixelRatio(),
285+
30,
286+
DDciIcon::Dark,
287+
DDciIcon::Normal,
288+
DDciIconPalette::fromQPalette(darkPalette)
289+
);
290+
QBuffer buffer(&info.iconDark);
291+
if (buffer.open(QIODevice::WriteOnly)) {
292+
darkPixmap.save(&buffer, "png");
293+
}
238294
}
239-
}
240295

241-
if (m_searchApplet) {
242-
DockItemInfo info;
243-
if (QMetaObject::invokeMethod(m_searchApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info)))
244-
iteminfos.append(info);
296+
iteminfos.append(info);
245297
}
246298

247-
if (m_multitaskviewApplet && DWindowManagerHelper::instance()->hasComposite()) {
248-
DockItemInfo info;
249-
if (QMetaObject::invokeMethod(m_multitaskviewApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
250-
iteminfos.append(info);
251-
}
252-
}
253299
return iteminfos;
254300
}
255301

@@ -265,23 +311,16 @@ void DockDBusProxy::callShow()
265311

266312
void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
267313
{
268-
if (itemKey == "clipboard" && m_clipboardApplet) {
269-
QMetaObject::invokeMethod(m_clipboardApplet, "setVisible", Qt::QueuedConnection, visible);
270-
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
271-
pluginsVisible[itemKey] = visible;
272-
DockSettings::instance()->setPluginsVisible(pluginsVisible);
273-
} else if (itemKey == "search" && m_searchApplet) {
274-
QMetaObject::invokeMethod(m_searchApplet, "setVisible", Qt::QueuedConnection, visible);
275-
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
276-
pluginsVisible[itemKey] = visible;
277-
DockSettings::instance()->setPluginsVisible(pluginsVisible);
278-
} else if (itemKey == "multitasking-view" && m_multitaskviewApplet) {
279-
QMetaObject::invokeMethod(m_multitaskviewApplet, "setVisible", Qt::QueuedConnection, visible);
314+
auto it = std::find_if(m_dockApplets.begin(), m_dockApplets.end(), [ = ] (DS_NAMESPACE::DDockApplet *applet) {
315+
return itemKey == applet->itemKey();
316+
});
317+
318+
if (it != m_dockApplets.end()) {
319+
auto applet = (*it);
320+
applet->setVisible(visible);
280321
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
281322
pluginsVisible[itemKey] = visible;
282323
DockSettings::instance()->setPluginsVisible(pluginsVisible);
283-
} else if (m_oldDockApplet) {
284-
QMetaObject::invokeMethod(m_oldDockApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
285324
}
286325
}
287326

panels/dock/dockdbusproxy.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
#include <QDBusContext>
1414
#include <QDBusArgument>
1515

16+
namespace DS_NAMESPACE {
17+
class DDockApplet;
18+
}
19+
1620
/** this class used for old dock api compatible
1721
* it will forward old dbus call to new implementation
1822
*/
@@ -78,9 +82,7 @@ private Q_SLOTS:
7882
void setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible);
7983

8084
DS_NAMESPACE::DApplet *m_oldDockApplet;
81-
DS_NAMESPACE::DApplet *m_clipboardApplet;
82-
DS_NAMESPACE::DApplet *m_searchApplet;
83-
DS_NAMESPACE::DApplet *m_multitaskviewApplet;
85+
QList<DS_NAMESPACE::DDockApplet *> m_dockApplets;
8486
};
8587
}
8688

panels/dock/multitaskview/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
add_library(dock-multitaskview SHARED
66
multitaskview.cpp
77
multitaskview.h
8-
../dockiteminfo.cpp
9-
../dockiteminfo.h
8+
# ../dockiteminfo.cpp
9+
# ../dockiteminfo.h
1010
)
1111

1212
target_link_libraries(dock-multitaskview PRIVATE
13-
dde-shell-frame
13+
dock-plugin
1414
)
1515

1616
ds_install_package(PACKAGE org.deepin.ds.dock.multitaskview TARGET dock-multitaskview)

0 commit comments

Comments
 (0)