chore: port more behaviors from dde-daemon to dde-tray-loader#460
Conversation
为 dde-tray-loader 补齐更多与 xembed 托盘相关的行为差异,包括: 1. 仅当托盘图标实际变化时才发送变化信号 2. 补充 _NET_SYSTEM_TRAY_ORIENTATION 设置(目前写死其值) 3. undock() buchong xcb_damage_destroy 4. 增加 checkValid 机制 5. 补充 Inited 信号(尽管目前未发现消费者) 6. GetName 增加与 dde-daemon 一致的 fallback 行为 Log:
deepin pr auto review这份 Git Diff 对系统托盘管理器进行了多项改进,包括修复 X11 Damage 对象的内存泄漏、增加窗口有效性校验、优化托盘图标变更通知逻辑(避免冗余信号发射)、扩展窗口名称获取方式以及完善系统托盘属性设置。 以下是对该代码的详细审查意见,分为语法逻辑、代码质量、代码性能和代码安全四个方面: 一、 语法与逻辑
二、 代码质量
三、 代码性能
四、 代码安全
总结与修改建议代码片段针对最严重的几个问题(逻辑崩溃和拼写错误),建议进行如下修改: 1. 修复 // 修改前:
xcb_change_property(c, XCB_PROP_MODE_REPLACE, m_selectionOwner->ownerWindow(), UTIL->getAtomByName("NET_SYSTEM_TRAY_ORIENTAION"), XCB_ATOM_CARDINAL, 32, 1, &orientation);
// 修改后:
xcb_change_property(c, XCB_PROP_MODE_REPLACE, m_selectionOwner->ownerWindow(), UTIL->getAtomByName("_NET_SYSTEM_TRAY_ORIENTATION"), XCB_ATOM_CARDINAL, 32, 1, &orientation);2. 修复 // 修改前(文件末尾):
if (!ret.empty()) {
return QString::fromLocal8Bit(ret.c_str(), static_cast<int>(ret.size()));
}
return ret.c_str(); // 严重危险:返回局部变量的指针
// 修改后:
if (!ret.empty()) {
return QString::fromLocal8Bit(ret.c_str(), static_cast<int>(ret.size()));
}
return QString(); // 安全:返回空字符串对象3. 优化 // 在构造 QByteArray 时增加安全校验
int dataLen = xcb_get_image_data_length(imageReply.get());
// 简单防备异常超大分配或不足
int expectedLen = geometry.width() * geometry.height() * 4;
if (dataLen < expectedLen) {
return false; // 数据不完整
}
// 如果数据过大,也可以做截断或报错处理
*data = QByteArray(reinterpret_cast<const char *>(xcb_get_image_data(imageReply.get())),
qMin(dataLen, expectedLen)); // 取较小值保底
return true; |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: BLumia, tsic404 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 |
为 dde-tray-loader 补齐更多与 dde-daemon 提供的 xembed 托盘相关支持的行为差异,包括: