Warning, /plasma/kscreenlocker/greeter/fallbacktheme/LockScreen.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2011 Martin Gräßlin <mgraesslin@kde.org> 0003 SPDX-FileCopyrightText: 2023 Nate Graham <nate@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 import QtQuick 2.15 0009 import QtQuick.Controls as QQC2 0010 0011 import org.kde.kirigami 2.20 as Kirigami 0012 import org.kde.plasma.core as PlasmaCore 0013 import org.kde.kquickcontrolsaddons 2.0 0014 import org.kde.ksvg 1.0 as KSvg 0015 import org.kde.plasma.private.sessions 2.0 0016 0017 Item { 0018 id: lockScreen 0019 0020 property alias capsLockOn: unlockUI.capsLockOn 0021 property bool locked: false 0022 0023 signal unlockRequested() 0024 0025 // if there's no image, have a pure black background 0026 Rectangle { 0027 width: parent.width 0028 height: parent.height 0029 color: "black" 0030 } 0031 0032 SessionsModel { 0033 id: sessionsModel 0034 } 0035 0036 Image { 0037 anchors.fill: parent 0038 source: "file:" + PlasmaCore.Theme.wallpaperPathForSize(parent.width, parent.height) 0039 smooth: true 0040 } 0041 0042 KSvg.FrameSvgItem { 0043 id: dialog 0044 0045 visible: lockScreen.locked 0046 anchors.centerIn: parent 0047 width: mainStack.currentItem.implicitWidth + margins.left + margins.right 0048 height: mainStack.currentItem.implicitHeight + margins.top + margins.bottom 0049 imagePath: "widgets/background" 0050 0051 Behavior on height { 0052 enabled: mainStack.currentItem != null 0053 NumberAnimation { 0054 duration: Kirigami.Units.longDuration 0055 } 0056 } 0057 Behavior on width { 0058 enabled: mainStack.currentItem != null 0059 NumberAnimation { 0060 duration: Kirigami.Units.longDuration 0061 } 0062 } 0063 0064 QQC2.StackView { 0065 id: mainStack 0066 0067 clip: true 0068 anchors { 0069 fill: parent 0070 leftMargin: dialog.margins.left 0071 topMargin: dialog.margins.top 0072 rightMargin: dialog.margins.right 0073 bottomMargin: dialog.margins.bottom 0074 } 0075 initialItem: unlockUI 0076 } 0077 } 0078 0079 Greeter { 0080 id: unlockUI 0081 0082 switchUserEnabled: sessionsModel.canSwitchUser 0083 0084 visible: opacity > 0 0085 opacity: mainStack.currentItem == unlockUI 0086 Behavior on opacity { 0087 NumberAnimation { 0088 duration: Kirigami.Units.longDuration 0089 } 0090 } 0091 0092 Connections { 0093 function onAccepted() { 0094 lockScreen.unlockRequested(); 0095 } 0096 function onSwitchUserClicked() { 0097 mainStack.push(userSessionsUIComponent); 0098 mainStack.currentItem.forceActiveFocus(); 0099 } 0100 } 0101 } 0102 0103 function returnToLogin() { 0104 mainStack.pop(); 0105 unlockUI.resetFocus(); 0106 } 0107 0108 Component { 0109 id: userSessionsUIComponent 0110 0111 SessionSwitching { 0112 id: userSessionsUI 0113 0114 visible: false 0115 0116 Connections { 0117 function onSwitchingCanceled() { 0118 returnToLogin(); 0119 } 0120 function onSessionActivated() { 0121 returnToLogin(); 0122 } 0123 function onNewSessionStarted() { 0124 returnToLogin(); 0125 } 0126 } 0127 } 0128 } 0129 }