feat(panel): 移植 widget-toolbar 动态边界处理,统一边距理念(contentPadding=10 + 自动避让任务栏)
基于设计稿(docs/design/index.html,Next-Deepin-Dock 风格)实现的 dde-shell 树外插件。 在 dock 栏放一个图标,用户唤起时把「系统剪贴板」「文件中转站」两张事件卡片以弹层形式叠放切换,与真实系统行为一致。
docs/design/index.html
旧版 dde-shell(Qt6/QML/xmake)实现已挪到 legacy-ddeshell/,不参与本工程构建,仅供参考与回退。
legacy-ddeshell/
Deepin 25 桌面栈 = dde-shell(QML/Qt6/DTK6),旧 dde-dock(Qt5/DTK5)接口已移除。本插件采用 dde-shell 官方的 dock applet 接入方式:
dde-shell 进程 └─ dock 面板(org.deepin.ds.dock) └─ CardsDockApplet(DAppletDock 基类,dockOrder=27) ├─ 图标:package/main.qml(AppletDockItem)+ dockItemInfo() └─ 弹层 CardsStack(QWidget 顶层窗口,自管浮窗) ├─ ClipboardCard 系统剪贴板(当前内容置顶 + 历史) └─ FileTransferCard 文件中转站(暂存 + 拖出传输)
CardsDockApplet
DAppletDock
dock/dappletdock.h
libdde-shell-dock
dockItemInfo()
AppletDockItem
Applet.*
CardsStack
DPlatformWindowHandle
DLayerShellWindow
DockMarginHelper
src/dockmarginhelper.*
DockMarginHelper.qml
windowMargin
contentPadding=10
dock 与屏幕底边重叠 + 10
exclusionZone
SystemOpacity
org.deepin.dde.Appearance1
Opacity
clipboardmodel
filetransfer
Ctrl+Alt+V
Ctrl+Alt+F
text/uri-list
触发规则(已敲定)
Shift
Ctrl
Shift+Ctrl
唤起 / 退出机制
togglePopup
org.deepin.cardsdock
showClipboard·showTransfer·toggle·close
showClipboard/showTransfer
Win+Esc
CMakeLists.txt find_package(DDEShell/Dtk6) + find_library(dde-shell-dock) 3rdparty/dde-shell-dock/ dock library 头文件(dappletdock.h / dockiteminfo.h,内置自包含) src/ cardsdockapplet.h/.cpp 插件入口(DAppletDock + dockItemInfo + DBus + 快捷键注册) cardsstack.h/.cpp 卡片浮窗(分段切换 + 两张卡片 + 拖入接收 + 毛玻璃 + 透明度跟随) clipboardcard.h/.cpp 剪贴板卡片 clipboardmodel.h/.cpp 剪贴板历史(dataChanged + 1s 轮询双通道) filetransfercard.h/.cpp 中转站卡片 filetransfer.h/.cpp 拖拽入站 + 进度 systemopacity.h/.cpp 系统透明度代理(DBus Appearance1 + DConfig 兜底) icons/cardsdock.svg dock 图标 package/ main.qml AppletDockItem 图标(点击/右键/拖放) metadata.json 插件元数据(含 dock 字段) cardsdock.svg 图标 resources.qrc 图标资源 cardsdock.sh 全局快捷键脚本(全部 action 走 DBus) docs/ 设计书-多卡片dock重构.md 设计终稿 design/ HTML 设计稿归档 DEPLOY-DEEPIN25.md 部署手册 legacy-ddeshell/ 旧 dde-shell(Qt6/QML/xmake)实现,不参与构建
依赖:dde-shell(含 libdde-shell-dock)、Qt6 Widgets/DBus、DTK6 Widget/Gui/Core。
# dock library 头文件已内置 3rdparty/,若系统缺无版本号符号链接需补: # ln -sf /usr/lib/x86_64-linux-gnu/libdde-shell-dock.so.2.0.52 /usr/local/lib/libdde-shell-dock.so cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j$(nproc)
部署(Deepin 25 的 /usr 为 OSTree 只读,手工拷到 /usr/local):
/usr
/usr/local
cp build/plugins/org.deepin.ds.dock.cardsdock.so /usr/local/lib/dde-shell/cardsdock.so cp build/plugins/org.deepin.ds.dock.cardsdock.so /usr/local/lib/dde-shell/org.deepin.ds.dock.cardsdock.so mkdir -p /usr/local/share/dde-shell/org.deepin.ds.dock.cardsdock cp package/* /usr/local/share/dde-shell/org.deepin.ds.dock.cardsdock/ systemctl --user restart dde-shell@DDE.service
全局快捷键(经 Keybinding1,脚本 cardsdock.sh 部署到 /usr/local/bin/):
cardsdock.sh
/usr/local/bin/
cardsdock.sh clipboard
cardsdock.sh transfer
cardsdock.sh close
⚠️ 真机为 Wayland 会话时,纯 Esc 单键全局注册被 Keybinding1 拒绝,关闭用 Win+Esc;X11 会话窗口内 Esc 拦截可直接用。
代码 MIT;图标来自 deepin-icon-theme(GPL-3.0,源在 docs/design/assets)。
卡片式 Dock(dde-shell Panel 插件):复刻 deepin_ui_html 设计稿,xmake 构建 + Lua 工具链,真实事件驱动卡片
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
deepin-cardsdock — 多卡片 Dock(dde-shell 插件)
基于设计稿(
docs/design/index.html,Next-Deepin-Dock 风格)实现的 dde-shell 树外插件。 在 dock 栏放一个图标,用户唤起时把「系统剪贴板」「文件中转站」两张事件卡片以弹层形式叠放切换,与真实系统行为一致。架构
Deepin 25 桌面栈 = dde-shell(QML/Qt6/DTK6),旧 dde-dock(Qt5/DTK5)接口已移除。本插件采用 dde-shell 官方的 dock applet 接入方式:
CardsDockApplet继承 dde-shell 的DAppletDock(dock/dappletdock.h,链接libdde-shell-dock),重写dockItemInfo();QML 根AppletDockItem用Applet.*Q_INVOKABLE 桥接。CardsStack:无边框置顶窗口,DPlatformWindowHandle(DTK 外观 + 毛玻璃)+DLayerShellWindow(定位)+DockMarginHelper(动态边界处理)。DockMarginHelper(src/dockmarginhelper.*):与 deepin-widget-toolbar 的DockMarginHelper.qml(同源于 dde-shell 通知中心windowMargin)统一边距理念——弹层左/右/下三边距恒等于contentPadding=10,与屏幕边缘等距;dock 在弹层同屏且位于底部时下边距动态增大为dock 与屏幕底边重叠 + 10,自动避让任务栏并实时跟随其显隐/换位/换屏/改尺寸;弹层跟随 dock 所在屏幕显示。Wayland 下不追加避让边距(任务栏自身exclusionZone由合成器排布可用区域)。SystemOpacity:读 DBusorg.deepin.dde.Appearance1的Opacity(DConfig 兜底),底色 alpha 跟随。clipboardmodel(dataChanged + 1s 轮询双通道)与filetransfer(入站 + 拖出传输)。卡片与触发
Ctrl+Alt+V· 右键菜单Ctrl+Alt+F· 拖文件入图标/卡片text/uri-list);支持搜索/清空触发规则(已敲定)
Shift=移动、Ctrl=复制、Shift+Ctrl=链接。唤起 / 退出机制
togglePopup/ 右键菜单 / 全局快捷键 / DBusorg.deepin.cardsdock(showClipboard·showTransfer·toggle·close)。showClipboard/showTransfer带 toggle 语义);② 鼠标移出卡片 8s 自动隐藏;③ Esc 关闭(X11 会话窗口内拦截;Wayland 会话用Win+Esc全局键);④ 8s 空闲超时兜底。工程结构
构建与部署
依赖:dde-shell(含
libdde-shell-dock)、Qt6 Widgets/DBus、DTK6 Widget/Gui/Core。部署(Deepin 25 的
/usr为 OSTree 只读,手工拷到/usr/local):全局快捷键(经 Keybinding1,脚本
cardsdock.sh部署到/usr/local/bin/):cardsdock.sh clipboardcardsdock.sh transfercardsdock.sh close实施进度
License
代码 MIT;图标来自 deepin-icon-theme(GPL-3.0,源在 docs/design/assets)。