Files
arthur-os/default/sddm/omarchy/Main.qml
T
David Heinemeier HanssonandGitHub 5cf83d2073 Match sddm to decrypt style (#5645)
* Make SDDM screen match the normal decrypt screen as close as possible

* Try with a different error style on wrong pw

* Do red lock on failure too
2026-05-07 11:16:40 +02:00

117 lines
2.8 KiB
QML

import QtQuick 2.0
import SddmComponents 2.0
Rectangle {
id: root
width: 640
height: 480
color: "#1a1b26"
property string currentUser: userModel.lastUser
property bool loginFailed: false
property int sessionIndex: {
for (var i = 0; i < sessionModel.rowCount(); i++) {
var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString()
if (name.indexOf("uwsm") !== -1)
return i
}
return sessionModel.lastIndex
}
Connections {
target: sddm
function onLoginFailed() {
root.loginFailed = true
password.text = ""
password.focus = true
}
function onLoginSucceeded() {
root.loginFailed = false
}
}
Column {
anchors.centerIn: parent
spacing: 40
Image {
id: logo
source: "logo.png"
width: Math.min(sourceSize.width, root.width * 0.8)
height: sourceSize.width > 0 ? Math.round(width * sourceSize.height / sourceSize.width) : 0
fillMode: Image.PreserveAspectFit
anchors.horizontalCenter: parent.horizontalCenter
}
Row {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 15
Image {
source: root.loginFailed ? "lock-failed.png" : "lock.png"
width: 34
height: 38
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
}
Item {
width: entry.width
height: entry.height
Image {
id: entry
source: root.loginFailed ? "entry-failed.png" : "entry.png"
anchors.centerIn: parent
}
Row {
anchors.left: parent.left
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
spacing: 5
Repeater {
model: Math.min(password.text.length, 21)
Image {
source: "bullet.png"
width: 7
height: 7
}
}
}
TextInput {
id: password
anchors.fill: parent
anchors.leftMargin: 20
anchors.rightMargin: 20
verticalAlignment: TextInput.AlignVCenter
echoMode: TextInput.Password
font.family: "JetBrainsMono Nerd Font"
font.pixelSize: 24
font.letterSpacing: 5
passwordCharacter: "\u2022"
color: "transparent"
selectionColor: "transparent"
selectedTextColor: "transparent"
focus: true
onTextChanged: root.loginFailed = false
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(root.currentUser, password.text, root.sessionIndex)
event.accepted = true
}
}
}
}
}
}
Component.onCompleted: password.forceActiveFocus()
}