Repository navigation
feat(showdesktop): adapt to treeland-show-desktop-unstable-v1 protocol - #1725
Conversation
|
Skipping CI for Draft Pull Request. |
Reviewer's GuideMigrates the dock show-desktop panel from the deprecated treeland-window-management-v1 client to treeland-show-desktop-unstable-v1, including regenerated build inputs, renamed client wrapper, updated state-toggle API, applet integration, and raised protocol package requirements. Sequence diagram for the show-desktop state togglesequenceDiagram
participant User
participant ShowDesktop
participant TreelandShowDesktop
participant TreelandCompositor
User->>ShowDesktop: toggleShowDesktop()
ShowDesktop->>TreelandShowDesktop: desktopToggle()
TreelandShowDesktop->>TreelandShowDesktop: set_show_desktop_state(state_show or state_normal)
TreelandCompositor-->>TreelandShowDesktop: treeland_show_desktop_v1_show_desktop_state(state)
TreelandShowDesktop->>TreelandShowDesktop: update m_desktopState
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
5ee25d6 to
87390f6
Compare
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: 18202781743, deepin-wm The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 优秀 ✅ 通过 潜在问题: 建议: 语法正确,逻辑清晰。代码从旧协议到新协议的迁移保持了完整的逻辑一致性:构造函数正确初始化 m_desktopState 为 state_normal,desktopToggle() 正确实现了状态切换逻辑(state_show 与 state_normal 互斥切换),回调函数 treeland_show_desktop_v1_show_desktop_state() 正确处理状态同步。空指针安全:toggleShowDesktop() 中先检查 m_showDesktop 非空再调用,desktopToggle() 中先检查 isActive() 再发送协议请求。内存管理:通过 Qt 父子对象机制(setParent(parent))确保对象生命周期正确管理,无内存泄漏。 2. 代码质量 ✅评价: 优秀 ✅ 通过 潜在问题: 建议: 代码结构清晰,注释完整。SPDX 版权头已更新为 2023-2026 年份范围。新增文件 treelandshowdesktop.cpp/h 遵循与原 treelandwindowmanager.cpp/h 完全一致的代码结构和风格。类命名 TreelandShowDesktop 清晰反映新协议名称。CMakeLists.txt 正确更新了源文件列表、协议 XML 文件路径和版本要求。debian/control 中构建依赖版本从 0.5.7 提升至 0.5.9,与新协议版本匹配。无重复代码、无调试代码残留。 3. 代码性能 ✅评价: 优秀 ✅ 通过 潜在问题: 建议: 性能良好,资源使用合理。所有操作均为 O(1) 时间复杂度。desktopToggle() 仅在 isActive() 为真时发送一次 Wayland 协议请求,无冗余操作。状态回调函数仅在做实际状态变更时更新成员变量,避免不必要的写操作。非 Wayland 平台下正确回退至 QProcess::startDetached 执行桌面切换命令,不影响原有性能。 4. 代码安全 🔒评价: 优秀 ✅ 通过
安全漏洞详情: 建议: 存在0个安全漏洞。本次代码变更不涉及用户输入处理、文件操作、网络通信或命令拼接,不存在命令注入、路径遍历、缓冲区溢出等安全风险。QProcess::startDetached 使用硬编码路径 /usr/lib/deepin-daemon/desktop-toggle 且无用户可控参数,安全可控。Wayland 协议通信为本地 IPC,状态参数为 uint32_t 类型,无越界风险。 💡 改进建议代码示例// 本次代码变更质量优秀,无需修复示例。
// 迁移后的 TreelandShowDesktop 类保持了与原 TreelandWindowManager 一致的安全模式:
class TreelandShowDesktop : public QWaylandClientExtensionTemplate<TreelandShowDesktop>,
public QtWayland::treeland_show_desktop_v1
{
public:
explicit TreelandShowDesktop(QObject *parent)
: QWaylandClientExtensionTemplate<TreelandShowDesktop>(
treeland_show_desktop_v1_interface.version)
, m_desktopState(state_normal)
{
setParent(parent); // Qt 父子对象管理,确保无内存泄漏
}
void desktopToggle()
{
if (isActive()) { // 安全检查:确认 Wayland 连接活跃
set_show_desktop_state(
m_desktopState == state_show ? state_normal : state_show);
}
}
protected:
void treeland_show_desktop_v1_show_desktop_state(uint32_t state) override
{
if (state != m_desktopState) { // 避免冗余更新
m_desktopState = state;
}
}
private:
uint32_t m_desktopState;
};本报告由 AI 代码审查工具自动生成 |
1. Rename treelandwindowmanager to treelandshowdesktop, update class name TreelandWindowManager to TreelandShowDesktop 2. Switch wayland protocol from treeland-window-management-v1 to treeland-show-desktop-unstable-v1 3. Update API calls: set_desktop to set_show_desktop_state, update callback and enum names 4. Bump treeland-protocols build-dep to >> 0.5.9 in debian/control 5. Add CMake version requirement find_package(TreelandProtocols 0.6.0 REQUIRED) Influence: 1. Test show desktop toggle on Wayland: click dock show desktop button, verify show and restore work correctly 2. Verify non-Wayland fallback path (QProcess desktop-toggle) is unaffected 3. Full build with treeland-protocols >= 0.6.0 passes feat: 适配 showdesktop 至 show-desktop-v1 协议 1. 重命名 treelandwindowmanager 为 treelandshowdesktop,更新类名 TreelandWindowManager 为 TreelandShowDesktop 2. 切换 Wayland 协议从 treeland-window-management-v1 到 treeland-show-desktop-unstable-v1 3. 更新 API 调用:set_desktop 变为 set_show_desktop_state,更新回调和枚举名 4. 在 debian/control 中提升 treeland-protocols 构建依赖到 >> 0.5.9 5. 添加 CMake 版本要求 find_package(TreelandProtocols 0.6.0 REQUIRED) Influence: 1. 在 Wayland 下测试显示桌面切换:点击任务栏显示桌面按钮,验证显示和恢复正常 2. 验证非 Wayland 回退路径(QProcess desktop-toggle)不受影响 3. 使用 treeland-protocols >= 0.6.0 进行完整构建
87390f6 to
d442f3b
Compare
|
/forcemerge |
|
This pr force merged! (status: blocked) |
Summary
Adapt the dock showdesktop panel from the deprecated
treeland-window-management-v1protocol to the newtreeland-show-desktop-unstable-v1protocol.Changes
treelandwindowmanager.h/.cpp→treelandshowdesktop.h/.cpp, classTreelandWindowManager→TreelandShowDesktoptreeland-window-management-v1.xmltotreeland-show-desktop-unstable-v1.xmlset_desktop()→set_show_desktop_state(), callbacktreeland_window_management_v1_show_desktop→treeland_show_desktop_v1_show_desktop_state, enumsdesktop_state_normal/show→state_normal/showshowdesktop.h/.cpp: include, member type, and method callstreeland-protocols (>> 0.5.7)→>> 0.5.9indebian/controlfind_package(TreelandProtocols 0.6.0 REQUIRED)Related
Multica issue: DDE-228
Summary by Sourcery
Migrate the dock show-desktop panel from the deprecated window-management protocol to the Treeland show-desktop protocol.
Enhancements:
Build:
Chores: