Rewrite the lockscreen

This simplifies the lockscreen code.
This commit is contained in:
Nicolas Fella 2019-10-31 06:20:36 +00:00 committed by Bhushan Shah
parent 7d12429efc
commit b9fb0516aa
3 changed files with 94 additions and 236 deletions

View file

@ -30,7 +30,7 @@ ColumnLayout {
text: Qt.formatTime(timeSource.data["Local"]["DateTime"]) text: Qt.formatTime(timeSource.data["Local"]["DateTime"])
//we fill the width then align the text so that we can make the text shrink to fit //we fill the width then align the text so that we can make the text shrink to fit
Layout.fillWidth: true Layout.fillWidth: true
horizontalAlignment: Text.AlignRight horizontalAlignment: Text.AlignHCenter
font.weight: Font.DemiBold font.weight: Font.DemiBold
fontSizeMode: Text.HorizontalFit fontSizeMode: Text.HorizontalFit
@ -39,11 +39,11 @@ ColumnLayout {
PlasmaComponents.Label { PlasmaComponents.Label {
text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate); text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate);
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignHCenter
} }
RowLayout { RowLayout {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignHCenter
visible: pmSource.data["Battery"]["Has Cumulative"] visible: pmSource.data["Battery"]["Has Cumulative"]
PW.BatteryIcon { PW.BatteryIcon {
@ -69,7 +69,7 @@ ColumnLayout {
return i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1% battery remaining", battery.percent) return i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1% battery remaining", battery.percent)
} }
} }
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignHCenter
wrapMode: Text.Wrap wrapMode: Text.Wrap
} }
} }

View file

@ -19,76 +19,107 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.private.sessions 2.0 import org.kde.plasma.workspace.keyboardlayout 1.0
import "../components" import "../components"
Image { PlasmaCore.ColorScope {
id: root id: block
property bool viewVisible: false colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
property bool debug: false
property string notification
property Item userSelect: null
property int interfaceVersion: org_kde_plasma_screenlocker_greeter_interfaceVersion ? org_kde_plasma_screenlocker_greeter_interfaceVersion : 0
signal clearPassword()
source: backgroundPath || "../components/artwork/background.png"
fillMode: Image.PreserveAspectCrop
asynchronous: true
onStatusChanged: {
if (status == Image.Error) {
source = "../components/artwork/background.png";
}
}
LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
LayoutMirroring.childrenInherit: true
Connections {
target: authenticator
onFailed: {
root.notification = i18nd("plasma_lookandfeel_org.kde.lookandfeel","Unlocking failed");
}
onGraceLockedChanged: {
if (!authenticator.graceLocked) {
root.notification = "";
root.clearPassword();
}
}
onMessage: {
root.notification = msg;
}
onError: {
root.notification = err;
}
}
SessionsModel {
id: sessionsModel
}
PlasmaCore.DataSource {
id: keystateSource
engine: "keystate"
connectedSources: "Caps Lock"
}
StackView {
id: stackView
anchors.fill: parent anchors.fill: parent
initialItem: Loader { Rectangle {
active: root.viewVisible anchors.top: parent.top
source: "MainBlock.qml" anchors.left: parent.left
anchors.right: parent.right
color: PlasmaCore.ColorScope.backgroundColor
opacity: 0.8
height: infoPane.height + units.largeSpacing * 2
}
InfoPane {
id: infoPane
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: units.largeSpacing
}
Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: PlasmaCore.ColorScope.backgroundColor
opacity: 0.8
height: mainLayout.height + units.largeSpacing * 2
}
ColumnLayout {
id: mainLayout
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
bottomMargin: units.largeSpacing
}
spacing: units.largeSpacing
RowLayout {
Layout.alignment: Qt.AlignHCenter
PlasmaComponents.TextField {
id: passwordInput
placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Password")
echoMode: TextInput.Password
enabled: !authenticator.graceLocked
onAccepted: actionButton.clicked(null)
focus: false
onVisibleChanged: {
if (visible) {
forceActiveFocus();
}
text = "";
}
onTextChanged: {
if (text == "") {
clearTimer.stop();
} else {
clearTimer.restart();
} }
} }
Component.onCompleted: { Timer {
// version support checks id: clearTimer
if (root.interfaceVersion < 1) { interval: 30000
// ksmserver of 5.4, with greeter of 5.5 repeat: false
root.viewVisible = true; onTriggered: {
passwordInput.text = "";
}
}
}
DialerIconButton {
source: "edit-clear"
callback: function() {
if (passwordInput.text.length > 0) {
passwordInput.text = passwordInput.text.substr(0, passwordInput.text.length - 1);
}
}
}
}
Dialer {
id: dialer
Layout.fillWidth: true
}
PlasmaComponents.Button {
id: actionButton
Layout.alignment: Qt.AlignHCenter
Layout.minimumWidth: passwordInput.width
text: i18n("Unlock")
enabled: !authenticator.graceLocked
onClicked: authenticator.tryUnlock(passwordInput.text);
} }
} }
} }

View file

@ -1,173 +0,0 @@
/********************************************************************
This file is part of the KDE project.
Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.1
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.workspace.keyboardlayout 1.0
import "../components"
PlasmaCore.ColorScope {
id: block
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
anchors.fill: parent
Component.onCompleted: appearAnimation.running = true;
SequentialAnimation {
id: appearAnimation
ParallelAnimation {
YAnimator {
target: topPanel
from: -topPanel.height
to: 0
duration: units.longDuration
}
YAnimator {
target: bottomPanel
from: block.height
to: block.height - bottomPanel.height
duration: units.longDuration
}
}
ScriptAction {
script: {
topPanel.anchors.top = block.top;
bottomPanel.anchors.bottom = block.bottom;
}
}
}
Item {
id: topPanel
y: -height
anchors {
left: parent.left
right: parent.right
}
height: infoPane.height + units.largeSpacing * 2
Rectangle {
anchors.fill: parent
color: PlasmaCore.ColorScope.backgroundColor
opacity: 0.8
}
InfoPane {
id: infoPane
anchors.centerIn: parent
}
}
Item {
id: bottomPanel
height: mainLayout.height + units.largeSpacing * 2
anchors {
left: parent.left
right: parent.right
}
y: parent.height
Rectangle {
anchors.fill: parent
color: PlasmaCore.ColorScope.backgroundColor
opacity: 0.8
}
function unlockFunction() {
authenticator.tryUnlock(passwordInput.text);
}
ColumnLayout {
id: mainLayout
anchors {
left: parent.left
right: parent.right
verticalCenter: parent.verticalCenter
}
spacing: units.largeSpacing
RowLayout {
anchors.horizontalCenter: parent.horizontalCenter
PlasmaComponents.TextField {
id: passwordInput
placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Password")
echoMode: TextInput.Password
enabled: !authenticator.graceLocked
onAccepted: actionButton.clicked(null)
focus: false
onVisibleChanged: {
if (visible) {
forceActiveFocus();
}
text = "";
}
onTextChanged: {
if (text == "") {
clearTimer.stop();
} else {
clearTimer.restart();
}
}
Timer {
id: clearTimer
interval: 30000
repeat: false
onTriggered: {
passwordInput.text = "";
}
}
}
DialerIconButton {
source: "edit-clear"
callback: function() {
if (passwordInput.text.length > 0) {
passwordInput.text = passwordInput.text.substr(0, passwordInput.text.length - 1);
}
}
}
Connections {
target: root
onClearPassword: {
passwordInput.selectAll();
passwordInput.forceActiveFocus();
}
}
}
Dialer {
id: dialer
Layout.fillWidth: true
}
PlasmaComponents.Button {
id: actionButton
Layout.alignment: Qt.AlignHCenter
Layout.minimumWidth: passwordInput.width
text: i18n("Unlock")
enabled: !authenticator.graceLocked
onClicked: {
bottomPanel.unlockFunction();
}
}
}
}
}