-
Notifications
You must be signed in to change notification settings - Fork 12
fix: Password lineEdit cannot input char after setting a special keyb… #45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…oard layout as title Log: as title Pms: BUG-317167,BUG-329229
Synchronize source files from linuxdeepin/dde-session-shell. Source-pull-request: linuxdeepin/dde-session-shell#45
deepin pr auto review这段代码主要添加了键盘布局切换的功能,用于在密码认证过程中临时切换到美式键盘布局,认证完成后恢复原来的布局。我来分析一下代码的各个方面: 语法逻辑
代码质量
代码性能
代码安全
改进建议
void AuthPassword::setKBLayout(const QString &layout)
{
if (layout.isEmpty()) {
qCWarning(DDE_SHELL) << "Empty keyboard layout provided";
return;
}
qCDebug(DDE_SHELL) << "Set keyboard layout: " << layout;
QProcess process;
process.start("/usr/bin/setxkbmap", {layout});
if (!process.waitForFinished(1000)) { // 设置超时
qCWarning(DDE_SHELL) << "Failed to set keyboard layout:" << layout;
return;
}
if (process.exitCode() != 0) {
qCWarning(DDE_SHELL) << "setxkbmap failed with exit code:"
<< process.exitCode()
<< "Error:" << process.readAllStandardError();
}
}
class AuthPassword {
private:
QString m_currentKBLayout; // 添加当前布局缓存
bool m_layoutChanged; // 标记布局是否已更改
};
void AuthPassword::setKBLayout(const QString &layout)
{
// 验证布局名称是否合法
static const QRegularExpression layoutRegex("^[a-z]{2,3}(_[a-z]{2,3})?(?:,[a-z]{2,3}(_[a-z]{2,3})?)*$");
if (!layoutRegex.match(layout).hasMatch()) {
qCWarning(DDE_SHELL) << "Invalid keyboard layout format:" << layout;
return;
}
// ... 其余代码
}
void AuthPassword::initConnections()
{
// ... 现有代码
connect(this, &AuthPassword::authFinished, this, [this](const AuthState state) {
if (state == AS_Success && !m_originalKBLayout.isEmpty()) {
setKBLayout(m_originalKBLayout);
m_originalKBLayout.clear();
}
});
}
这些改进将提高代码的健壮性、安全性和可维护性,同时提供更好的用户体验。 |
Synchronize source files from linuxdeepin/dde-session-shell. Source-pull-request: linuxdeepin/dde-session-shell#45
Synchronize source files from linuxdeepin/dde-session-shell. Source-pull-request: linuxdeepin/dde-session-shell#45
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: waterlovemelon, yixinshark 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 |
Synchronize source files from linuxdeepin/dde-session-shell. Source-pull-request: linuxdeepin/dde-session-shell#45
…oard layout
as title
Log: as title
Pms: BUG-317167,BUG-329229