mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
Rewrite the lockscreen
This simplifies the lockscreen code.
This commit is contained in:
parent
7d12429efc
commit
b9fb0516aa
3 changed files with 94 additions and 236 deletions
|
|
@ -30,7 +30,7 @@ ColumnLayout {
|
|||
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
|
||||
Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignRight
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
|
||||
font.weight: Font.DemiBold
|
||||
fontSizeMode: Text.HorizontalFit
|
||||
|
|
@ -39,11 +39,11 @@ ColumnLayout {
|
|||
|
||||
PlasmaComponents.Label {
|
||||
text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate);
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
visible: pmSource.data["Battery"]["Has Cumulative"]
|
||||
|
||||
PW.BatteryIcon {
|
||||
|
|
@ -69,7 +69,7 @@ ColumnLayout {
|
|||
return i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1% battery remaining", battery.percent)
|
||||
}
|
||||
}
|
||||
Layout.alignment: Qt.AlignRight
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
}
|
||||
|
|
@ -19,76 +19,107 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
import QtQuick 2.0
|
||||
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.private.sessions 2.0
|
||||
import org.kde.plasma.workspace.keyboardlayout 1.0
|
||||
import "../components"
|
||||
|
||||
Image {
|
||||
id: root
|
||||
property bool viewVisible: false
|
||||
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()
|
||||
PlasmaCore.ColorScope {
|
||||
id: block
|
||||
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
|
||||
anchors.fill: parent
|
||||
|
||||
source: backgroundPath || "../components/artwork/background.png"
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
asynchronous: true
|
||||
|
||||
onStatusChanged: {
|
||||
if (status == Image.Error) {
|
||||
source = "../components/artwork/background.png";
|
||||
}
|
||||
Rectangle {
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
color: PlasmaCore.ColorScope.backgroundColor
|
||||
opacity: 0.8
|
||||
height: infoPane.height + units.largeSpacing * 2
|
||||
}
|
||||
|
||||
LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
|
||||
LayoutMirroring.childrenInherit: true
|
||||
InfoPane {
|
||||
id: infoPane
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: units.largeSpacing
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: authenticator
|
||||
onFailed: {
|
||||
root.notification = i18nd("plasma_lookandfeel_org.kde.lookandfeel","Unlocking failed");
|
||||
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
|
||||
}
|
||||
onGraceLockedChanged: {
|
||||
if (!authenticator.graceLocked) {
|
||||
root.notification = "";
|
||||
root.clearPassword();
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
onMessage: {
|
||||
root.notification = msg;
|
||||
Dialer {
|
||||
id: dialer
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
onError: {
|
||||
root.notification = err;
|
||||
}
|
||||
}
|
||||
|
||||
SessionsModel {
|
||||
id: sessionsModel
|
||||
}
|
||||
|
||||
PlasmaCore.DataSource {
|
||||
id: keystateSource
|
||||
engine: "keystate"
|
||||
connectedSources: "Caps Lock"
|
||||
}
|
||||
|
||||
StackView {
|
||||
id: stackView
|
||||
anchors.fill: parent
|
||||
|
||||
initialItem: Loader {
|
||||
active: root.viewVisible
|
||||
source: "MainBlock.qml"
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
// version support checks
|
||||
if (root.interfaceVersion < 1) {
|
||||
// ksmserver of 5.4, with greeter of 5.5
|
||||
root.viewVisible = true;
|
||||
PlasmaComponents.Button {
|
||||
id: actionButton
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.minimumWidth: passwordInput.width
|
||||
text: i18n("Unlock")
|
||||
enabled: !authenticator.graceLocked
|
||||
onClicked: authenticator.tryUnlock(passwordInput.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue