mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-08-01 19:18:28 -04:00
@@ -22,6 +22,16 @@ func TestLockScreenPasswordFieldBypassesTextInputIME(t *testing.T) {
|
|||||||
if !strings.Contains(content, "Keys.onPressed") || !strings.Contains(content, "event.text") {
|
if !strings.Contains(content, "Keys.onPressed") || !strings.Contains(content, "event.text") {
|
||||||
t.Fatalf("passwordField should handle physical key text manually instead of relying on a text input control")
|
t.Fatalf("passwordField should handle physical key text manually instead of relying on a text input control")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wayland IMEs commit unconsumed printable keys as text-input text rather
|
||||||
|
// than forwarding raw keys, so the lock screen needs an IME commit sink
|
||||||
|
// alongside raw key handling.
|
||||||
|
if !strings.Contains(content, "id: imeCommitSink") {
|
||||||
|
t.Fatalf("passwordField must keep the imeCommitSink TextInput so IME-routed keyboards can type (#2950)")
|
||||||
|
}
|
||||||
|
if !strings.Contains(content, "Qt.ImhSensitiveData") {
|
||||||
|
t.Fatalf("imeCommitSink must advertise hidden-text hints so IMEs treat it as a password field")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLockScreenPamSupportsManagedAndSystemPolicies(t *testing.T) {
|
func TestLockScreenPamSupportsManagedAndSystemPolicies(t *testing.T) {
|
||||||
|
|||||||
@@ -932,7 +932,9 @@ Item {
|
|||||||
pam.passwd.start();
|
pam.passwd.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Keys.onPressed: event => {
|
Keys.onPressed: event => handleKey(event)
|
||||||
|
|
||||||
|
function handleKey(event) {
|
||||||
if (demoMode) {
|
if (demoMode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1042,6 +1044,36 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wayland IMEs commit unconsumed printable keys as text-input text
|
||||||
|
// (ibus ibuswaylandim.c) instead of forwarding raw keys, so an active
|
||||||
|
// text input must exist to receive them; the hidden-text hints put
|
||||||
|
// fcitx5 into plain keyboard passthrough (CapabilityFlag::Password).
|
||||||
|
// Raw keys stay in handleKey (#2950).
|
||||||
|
TextInput {
|
||||||
|
id: imeCommitSink
|
||||||
|
|
||||||
|
focus: true
|
||||||
|
width: 1
|
||||||
|
height: 1
|
||||||
|
opacity: 0
|
||||||
|
echoMode: TextInput.Password
|
||||||
|
inputMethodHints: Qt.ImhHiddenText | Qt.ImhSensitiveData | Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase
|
||||||
|
Keys.onPressed: event => {
|
||||||
|
passwordField.handleKey(event);
|
||||||
|
if (!event.accepted && (event.modifiers & (Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier)))
|
||||||
|
event.accepted = true;
|
||||||
|
}
|
||||||
|
onTextChanged: {
|
||||||
|
if (text.length === 0)
|
||||||
|
return;
|
||||||
|
const committed = text;
|
||||||
|
text = "";
|
||||||
|
if (demoMode || root.unlocking || pam.passwd.active)
|
||||||
|
return;
|
||||||
|
passwordField.insertText(committed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
if (!demoMode) {
|
if (!demoMode) {
|
||||||
forceActiveFocus();
|
forceActiveFocus();
|
||||||
|
|||||||
Reference in New Issue
Block a user