diff --git a/sddm-theme/Login.qml b/sddm-theme/Login.qml index 0e973a94b..49d6805d8 100644 --- a/sddm-theme/Login.qml +++ b/sddm-theme/Login.qml @@ -1,126 +1,126 @@ import "components" import QtQuick 2.0 import QtQuick.Layouts 1.2 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents SessionManagementScreen { id: root property Item mainPasswordBox: passwordBox property bool showUsernamePrompt: !showUserList property string lastUserName property bool loginScreenUiVisible: false //the y position that should be ensured visible when the on screen keyboard is visible property int visibleBoundary: mapFromItem(loginButton, 0, 0).y onHeightChanged: visibleBoundary = mapFromItem(loginButton, 0, 0).y + loginButton.height + units.smallSpacing property int fontSize: config.fontSize signal loginRequest(string username, string password) onShowUsernamePromptChanged: { if (!showUsernamePrompt) { lastUserName = "" } } /* * Login has been requested with the following username and password * If username field is visible, it will be taken from that, otherwise from the "name" property of the currentIndex */ function startLogin() { var username = showUsernamePrompt ? userNameInput.text : userList.selectedUser var password = passwordBox.text footer.enabled = false mainStack.enabled = false userListComponent.userList.opacity = 0.5 //this is partly because it looks nicer //but more importantly it works round a Qt bug that can trigger if the app is closed with a TextField focused //DAVE REPORT THE FRICKING THING AND PUT A LINK loginButton.forceActiveFocus(); loginRequest(username, password); } PlasmaComponents.TextField { id: userNameInput font.pointSize: fontSize + 1 Layout.fillWidth: true text: lastUserName visible: showUsernamePrompt focus: showUsernamePrompt && !lastUserName //if there's a username prompt it gets focus first, otherwise password does placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Username") onAccepted: if (root.loginScreenUiVisible) { passwordBox.forceActiveFocus() } } RowLayout { Layout.fillWidth: true PlasmaComponents.TextField { id: passwordBox font.pointSize: fontSize + 1 Layout.fillWidth: true placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Password") focus: !showUsernamePrompt || lastUserName echoMode: TextInput.Password - revealPasswordButtonShown: true + revealPasswordButtonShown: false // Disabled whilst SDDM does not have the breeze icon set loaded onAccepted: { if (root.loginScreenUiVisible) { startLogin(); } } Keys.onEscapePressed: { mainStack.currentItem.forceActiveFocus(); } //if empty and left or right is pressed change selection in user switch //this cannot be in keys.onLeftPressed as then it doesn't reach the password box Keys.onPressed: { if (event.key === Qt.Key_Left && !text) { userList.decrementCurrentIndex(); event.accepted = true } if (event.key === Qt.Key_Right && !text) { userList.incrementCurrentIndex(); event.accepted = true } } Connections { target: sddm onLoginFailed: { passwordBox.selectAll() passwordBox.forceActiveFocus() } } } PlasmaComponents.Button { id: loginButton Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Log In") implicitHeight: passwordBox.height - units.smallSpacing * 0.5 // otherwise it comes out taller than the password field Layout.rightMargin: 1 // prevents it from extending beyond the username field PlasmaCore.IconItem { // no iconSource because if you take away half a unit (implicitHeight), "go-next" gets cut off anchors.fill: parent anchors.margins: units.smallSpacing source: "go-next" } onClicked: startLogin(); } } }