sync: from linuxdeepin/dde-session-shell - #550
deepin-ci-robot wants to merge 1 commit into
Conversation
Synchronize source files from linuxdeepin/dde-session-shell. Source-pull-request: linuxdeepin/dde-session-shell#99
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: deepin-ci-robot 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 |
Reviewer's GuideSynchronizes selected files with upstream dde-session-shell, improving placeholder font fitting and rendering by accounting for QLineEdit text/layout margins so placeholder text does not overlap adjacent icons. Flow diagram for margin-aware placeholder renderingflowchart TD
A[Placeholder text and line edit geometry] --> B[Read textMargins]
B --> C[Read layout contentsMargins]
C --> D[Compute available text width]
D --> E[Fit placeholder font to available width]
E --> F[Build effective text rectangle]
F --> G[Elide text to rectangle width]
G --> H[Draw single-line placeholder]
G --> I[Show tooltip when text is elided]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
🔍 详细分析1. 语法逻辑 ✅评价: 优秀 ✅ 通过 潜在问题:
建议: 建议在 availWidth 计算后增加对负值或零值的保护判断,如 availWidth = qMax(availWidth, 1),避免极端情况下循环无意义执行。同时建议跟进 TODO 注释中的 font() 问题。 2. 代码质量 ✅评价: 良好 ✅ 通过 潜在问题:
建议: 建议将 margins 计算逻辑提取为独立的辅助方法,如 int DLineEditEx::availableTextWidth() const 或 QMargins DLineEditEx::effectiveMargins() const,减少代码重复,提高可维护性。 3. 代码性能 ✅评价: 优秀 ✅ 通过 潜在问题:
建议: 建议将 QFontMetrics 构造移到 while 循环外部,仅更新 fontTmp 后重新计算 boundingRect,减少不必要的对象构造开销。 4. 代码安全 🔒评价: 优秀 ✅ 通过
安全漏洞详情: 建议: 无安全漏洞,代码仅涉及 UI 占位文本渲染逻辑,不存在用户输入直接进入危险操作的风险路径。建议保持现有防御性编程习惯。 💡 改进建议代码示例// 建议提取公共 margins 计算方法,并优化循环性能
int DLineEditEx::availableTextWidth() const
{
QMargins textMargins = lineEdit()->textMargins();
QMargins layoutMargins(0, 0, 0, 0);
if (auto *layout = lineEdit()->layout()) {
layoutMargins = layout->contentsMargins();
}
int availWidth = width() - textMargins.left() - textMargins.right()
- layoutMargins.left() - layoutMargins.right();
return qMax(availWidth, 1); // 保护负值情况
}
void DLineEditEx::setPlaceholderTextFont(const QFont &font)
{
const QString &text = lineEdit()->placeholderText();
QFont fontTmp = font;
int availWidth = availableTextWidth();
QFontMetrics fm(fontTmp); // 循环外构造一次
while (fm.boundingRect(text).width() > availWidth) {
if (fontTmp.pointSize() <= 1) {
qWarning() << "Password line edit font size" << font.pointSize() << fontTmp.pointSize();
return;
}
fontTmp.setPointSize(fontTmp.pointSize() - 1);
fm = QFontMetrics(fontTmp); // 仅更新 metrics
}
setFont(fontTmp);
}本报告由 AI 代码审查工具自动生成 |
Synchronize source files from linuxdeepin/dde-session-shell.
Source-pull-request: linuxdeepin/dde-session-shell#99
Summary by Sourcery
Fix password placeholder sizing and elision so it fits correctly alongside embedded line-edit controls.
Bug Fixes:
Chores: