Skip to content

Commit 89ded03

Browse files
committed
feat: add dock library and refactor dock plugin management
1. Added new libdde-shell-dock library to provide dock item interface 2. Created DAppletDock abstract base class for dock plugins with dockItemInfo() and setVisible() methods 3. Refactored dock plugin management to use new library instead of hardcoded plugin IDs 4. Updated build system to include new library and development packages 5. Modified multitaskview plugin to inherit from DAppletDock instead of DApplet 6. Added dockVersion metadata field to identify dock-compatible plugins 7. Fixed installation paths for header files and libraries in Debian packaging Log: Improved dock plugin architecture with standardized interface Influence: 1. Test dock plugin visibility management through settings 2. Verify multitaskview plugin still works correctly 3. Check that tray functionality remains unchanged 4. Test building and installation of new libdde-shell-dock packages 5. Verify backward compatibility with existing dock plugins 6. Test dock item information retrieval through D-Bus interface feat: 新增Dock库并重构Dock插件管理 1. 新增libdde-shell-dock库,提供Dock项目接口 2. 创建DAppletDock抽象基类,包含dockItemInfo()和setVisible()方法 3. 重构Dock插件管理,使用新库替代硬编码的插件ID 4. 更新构建系统以包含新库和开发包 5. 修改multitaskview插件继承自DAppletDock而非DApplet 6. 新增dockVersion元数据字段以识别Dock兼容插件 7. 修复Debian打包中头文件和库的安装路径 Log: 改进Dock插件架构,提供标准化接口 Influence: 1. 测试通过设置管理Dock插件可见性 2. 验证multitaskview插件仍正常工作 3. 检查托盘功能是否保持不变 4. 测试新建libdde-shell-dock包的构建和安装 5. 验证与现有Dock插件的向后兼容性 6. 测试通过D-Bus接口获取Dock项目信息 PMS: TASK-388449
1 parent 5410ffc commit 89ded03

23 files changed

Lines changed: 278 additions & 89 deletions

debian/control

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,13 @@ Depends:
9393
${misc:Depends},
9494
Description: DDE Shell devel library
9595
DDE Shell is a plugin system that integrates plugins developed based on this plugin system into DDE.
96+
97+
Package: libdde-shell-dock-dev
98+
Architecture: any
99+
Depends:
100+
libdde-shell-dev (= ${binary:Version}),
101+
qt6-base-dev,
102+
qt6-declarative-dev,
103+
${misc:Depends},
104+
Description: DDE Shell dock devel library
105+
DDE Shell Dock is a library for dock item info.

debian/dde-shell.install

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ usr/lib/*/dde-shell/org.deepin.ds.dock*
77
usr/lib/*/dde-shell/org.deepin.ds.notification*
88
usr/lib/*/dde-shell/org.deepin.ds.notificationcenter*
99
usr/lib/*/dde-shell/org.deepin.ds.osd*
10-
usr/lib/*/libds-notification-shared.so.*
10+
usr/lib/*/libds-notification-shared.so*
1111
usr/lib/*/qt6/qml/org/deepin/ds/dock/*
1212
usr/lib/*/qt6/qml/org/deepin/ds/notification/*
1313
usr/lib/*/qt6/qml/org/deepin/ds/notificationcenter/*

debian/libdde-shell-dev.install

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
usr/include
2-
usr/lib/*/cmake/*/*.cmake
3-
usr/lib/*/lib*.so
1+
usr/include/dde-shell/*.h
2+
usr/lib/*/cmake/DDEShell/*.cmake
3+
usr/lib/*/libdde-shell.so
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
usr/include/dde-shell/dock/*.h
2+
usr/lib/*/libdde-shell-dock.so*
3+
usr/lib/*/cmake/DDEShellDock/*.cmake

panels/dock/AppletDockItem.qml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
import QtQuick
6+
import org.deepin.ds 1.0
7+
8+
AppletItem {
9+
id: appletDockItem
10+
11+
property int dockOrder: 0
12+
property bool shouldVisible: Applet.visible
13+
property bool useColumnLayout: Panel.position % 2
14+
implicitWidth: useColumnLayout ? Panel.rootObject.dockSize : Panel.rootObject.dockItemMaxSize * 0.8
15+
implicitHeight: useColumnLayout ? Panel.rootObject.dockItemMaxSize * 0.8 : Panel.rootObject.dockSize
16+
17+
}

panels/dock/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
1+
# SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
22
#
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -18,8 +18,6 @@ file(
1818
dockabstractsettingsconfig.h
1919
dockdbusproxy.cpp
2020
dockdbusproxy.h
21-
dockiteminfo.cpp
22-
dockiteminfo.h
2321
dockpanel.cpp
2422
dockpanel.h
2523
docksettings.cpp
@@ -74,6 +72,7 @@ target_link_libraries(dockpanel PRIVATE
7472
Qt${QT_VERSION_MAJOR}::WaylandClientPrivate
7573
Qt${QT_VERSION_MAJOR}::Widgets
7674
dde-shell-frame
75+
dde-shell-dock
7776
)
7877

7978
if (BUILD_WITH_X11)
@@ -97,6 +96,7 @@ add_subdirectory(showdesktop)
9796
add_subdirectory(taskmanager)
9897
add_subdirectory(tray)
9998
add_subdirectory(multitaskview)
99+
add_subdirectory(frame)
100100

101101
#add_subdirectory(appruntimeitem)
102102

@@ -135,6 +135,7 @@ qt_add_qml_module(dock-plugin
135135
QML_FILES DockCompositor.qml OverflowContainer.qml MenuHelper.qml DockPalette.qml
136136
AppletItemButton.qml
137137
AppletItemBackground.qml
138+
AppletDockItem.qml
138139
OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/plugins/org/deepin/ds/dock/
139140
)
140141

panels/dock/appruntimeitem/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
1+
# SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
22
#
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -13,8 +13,8 @@ add_library(dock-appruntimeitem SHARED
1313
xcbgetinfo.h
1414
xcbgetinfo.cpp
1515
qmlappruntime.qrc
16-
${CMAKE_SOURCE_DIR}/panels/dock/dockiteminfo.cpp
17-
${CMAKE_SOURCE_DIR}/panels/dock/dockiteminfo.h
16+
${CMAKE_SOURCE_DIR}/frame/dock/dockiteminfo.cpp
17+
${CMAKE_SOURCE_DIR}/frame/dock/dockiteminfo.h
1818
${CMAKE_SOURCE_DIR}/panels/dock/constants.h
1919
${CMAKE_SOURCE_DIR}/panels/dock/taskmanager/x11utils.h
2020
${CMAKE_SOURCE_DIR}/panels/dock/taskmanager/x11utils.cpp

panels/dock/appruntimeitem/appruntimeitem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

55
#pragma once
66
#include "applet.h"
77
#include "dsglobal.h"
8-
#include "dockiteminfo.h"
8+
#include "dock/dockiteminfo.h"
99

1010
#include <QGuiApplication>
1111
#include <QQmlApplicationEngine>

panels/dock/dockdbusproxy.cpp

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -15,22 +15,38 @@
1515

1616
DGUI_USE_NAMESPACE
1717
DS_USE_NAMESPACE
18+
namespace {
19+
constexpr auto DockVersionV1 = "1.0";
1820

21+
QList<DS_NAMESPACE::DAppletDock *> dockApplets(dock::DockPanel *panel)
22+
{
23+
QList<DS_NAMESPACE::DAppletDock *> list;
24+
if (!panel) return list;
25+
26+
for (auto *applet : panel->applets()) {
27+
if (applet->pluginMetaData().value("dock").toMap().value("version").toString() == DockVersionV1) {
28+
if (auto dockApplet = qobject_cast<DS_NAMESPACE::DAppletDock *>(applet)) {
29+
list.append(dockApplet);
30+
}
31+
}
32+
}
33+
return list;
34+
}
35+
}
1936
namespace dock {
2037
DockDBusProxy::DockDBusProxy(DockPanel* parent)
2138
: QObject(parent)
2239
, m_oldDockApplet(nullptr)
23-
, m_multitaskviewApplet(nullptr)
2440
, m_trayApplet(nullptr)
2541
{
2642
registerPluginInfoMetaType();
2743

2844
connect(DockSettings::instance(), &DockSettings::pluginsVisibleChanged, this, [this] (const QVariantMap &pluginsVisible) {
29-
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
45+
updateDockPluginsVisible(pluginsVisible);
3046
});
3147
connect(parent, &DockPanel::rootObjectChanged, this, [this]() {
3248
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
33-
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
49+
updateDockPluginsVisible(pluginsVisible);
3450
});
3551

3652
// Communicate with the other module
@@ -39,12 +55,8 @@ DockDBusProxy::DockDBusProxy(DockPanel* parent)
3955
DAppletBridge bridge("org.deepin.ds.dock.tray");
4056
m_trayApplet = bridge.applet();
4157
}
42-
{
43-
DAppletBridge bridge("org.deepin.ds.dock.multitaskview");
44-
m_multitaskviewApplet = bridge.applet();
45-
}
4658

47-
return m_trayApplet && m_multitaskviewApplet;
59+
return m_trayApplet;
4860
};
4961

5062
// TODO: DQmlGlobal maybe missing a signal which named `appletListChanged`?
@@ -77,14 +89,13 @@ QRect DockDBusProxy::geometry()
7789
return parent()->window() ? parent()->window()->geometry() : QRect();
7890
}
7991

80-
void DockDBusProxy::setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible)
92+
void DockDBusProxy::updateDockPluginsVisible(const QVariantMap &pluginsVisible)
8193
{
82-
if (DAppletBridge bridge(pluginId); auto item = bridge.applet()) {
83-
DockItemInfo itemInfo;
84-
QMetaObject::invokeMethod(item, "dockItemInfo", Qt::DirectConnection, qReturnArg(itemInfo));
94+
for (auto *dockApplet : dockApplets(parent())) {
95+
DockItemInfo itemInfo = dockApplet->dockItemInfo();
8596
QString itemKey = itemInfo.itemKey;
8697
if (pluginsVisible.contains(itemKey)) {
87-
QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, pluginsVisible[itemKey].toBool());
98+
dockApplet->setVisible(pluginsVisible[itemKey].toBool());
8899
} else {
89100
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
90101
settingPluginsVisible[itemKey] = true;
@@ -223,12 +234,10 @@ DockItemInfos DockDBusProxy::plugins()
223234
QMetaObject::invokeMethod(m_trayApplet, "dockItemInfos", Qt::DirectConnection, qReturnArg(iteminfos));
224235
}
225236

226-
if (m_multitaskviewApplet && DWindowManagerHelper::instance()->hasBlurWindow()) {
227-
DockItemInfo info;
228-
if (QMetaObject::invokeMethod(m_multitaskviewApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
229-
iteminfos.append(info);
230-
}
237+
for (auto *dockApplet : dockApplets(parent())) {
238+
iteminfos.append(dockApplet->dockItemInfo());
231239
}
240+
232241
return iteminfos;
233242
}
234243

@@ -244,13 +253,18 @@ void DockDBusProxy::callShow()
244253

245254
void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
246255
{
247-
if (itemKey == "multitasking-view" && m_multitaskviewApplet) {
248-
QMetaObject::invokeMethod(m_multitaskviewApplet, "setVisible", Qt::QueuedConnection, visible);
249-
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
250-
pluginsVisible[itemKey] = visible;
251-
DockSettings::instance()->setPluginsVisible(pluginsVisible);
252-
Q_EMIT pluginVisibleChanged(itemKey, visible);
253-
} else if (m_trayApplet) {
256+
for (auto *dockApplet : dockApplets(parent())) {
257+
if (dockApplet->dockItemInfo().itemKey == itemKey) {
258+
dockApplet->setVisible(visible);
259+
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
260+
pluginsVisible[itemKey] = visible;
261+
DockSettings::instance()->setPluginsVisible(pluginsVisible);
262+
Q_EMIT pluginVisibleChanged(itemKey, visible);
263+
return;
264+
}
265+
}
266+
267+
if (m_trayApplet) {
254268
Q_EMIT pluginVisibleChanged(itemKey, visible);
255269
QMetaObject::invokeMethod(m_trayApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
256270
}

panels/dock/dockdbusproxy.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -7,7 +7,8 @@
77
#include "dsglobal.h"
88
#include "dockpanel.h"
99
#include "constants.h"
10-
#include "dockiteminfo.h"
10+
#include "frame/dockiteminfo.h"
11+
#include "frame/dappletdock.h"
1112

1213
#include <appletproxy.h>
1314

@@ -86,10 +87,9 @@ class DockDBusProxy final: public QObject, public QDBusContext
8687
private:
8788
DockPanel* parent() const;
8889
QString getAppID(const QString &desktopfile);
89-
void setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible);
90+
void updateDockPluginsVisible(const QVariantMap &pluginsVisible);
9091

9192
DS_NAMESPACE::DAppletProxy *m_oldDockApplet;
92-
DS_NAMESPACE::DAppletProxy *m_multitaskviewApplet;
9393
DS_NAMESPACE::DAppletProxy *m_trayApplet;
9494
};
9595
}

0 commit comments

Comments
 (0)