mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-29 15:03: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"])
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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