forked from Shinonome/dots-hyprland
114 lines
3.2 KiB
QML
114 lines
3.2 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Widgets
|
|
import qs.services
|
|
import qs.modules.common
|
|
import qs.modules.common.widgets
|
|
|
|
Item {
|
|
id: root
|
|
readonly property bool usePasswordChars: !PolkitService.flow?.responseVisible ?? true
|
|
|
|
Keys.onPressed: event => { // Esc to close
|
|
if (event.key === Qt.Key_Escape) {
|
|
PolkitService.cancel();
|
|
}
|
|
}
|
|
|
|
function submit() {
|
|
PolkitService.submit(inputField.text);
|
|
}
|
|
Connections {
|
|
target: PolkitService
|
|
function onInteractionAvailableChanged() {
|
|
if (!PolkitService.interactionAvailable) return;
|
|
inputField.text = "";
|
|
inputField.forceActiveFocus();
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: bg
|
|
anchors.fill: parent
|
|
color: Appearance.colors.colScrim
|
|
opacity: 0
|
|
Component.onCompleted: {
|
|
opacity = 1
|
|
}
|
|
Behavior on opacity {
|
|
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
|
}
|
|
}
|
|
|
|
WindowDialog {
|
|
anchors.centerIn: parent
|
|
backgroundWidth: 450
|
|
show: false
|
|
Component.onCompleted: {
|
|
show = true
|
|
}
|
|
|
|
MaterialSymbol {
|
|
Layout.alignment: Qt.AlignHCenter
|
|
iconSize: 26
|
|
text: "security"
|
|
color: Appearance.colors.colSecondary
|
|
}
|
|
|
|
WindowDialogTitle {
|
|
id: titleText
|
|
Layout.fillWidth: true
|
|
horizontalAlignment: Text.AlignHCenter
|
|
text: Translation.tr("Authentication")
|
|
}
|
|
|
|
WindowDialogParagraph {
|
|
Layout.fillWidth: true
|
|
horizontalAlignment: Text.AlignLeft
|
|
text: {
|
|
if (!PolkitService.flow) return;
|
|
return PolkitService.flow.message.endsWith(".")
|
|
? PolkitService.flow.message.slice(0, -1)
|
|
: PolkitService.flow.message
|
|
}
|
|
}
|
|
|
|
MaterialTextField {
|
|
id: inputField
|
|
Layout.fillWidth: true
|
|
focus: true
|
|
enabled: PolkitService.interactionAvailable
|
|
placeholderText: {
|
|
const inputPrompt = PolkitService.flow?.inputPrompt.trim() ?? "";
|
|
const cleanedInputPrompt = inputPrompt.endsWith(":") ? inputPrompt.slice(0, -1) : inputPrompt;
|
|
return cleanedInputPrompt || (root.usePasswordChars ? Translation.tr("Password") : Translation.tr("Input"))
|
|
}
|
|
echoMode: root.usePasswordChars ? TextInput.Password : TextInput.Normal
|
|
onAccepted: root.submit();
|
|
|
|
Keys.onPressed: event => { // Esc to close
|
|
if (event.key === Qt.Key_Escape) {
|
|
PolkitService.cancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
WindowDialogButtonRow {
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
DialogButton {
|
|
buttonText: Translation.tr("Cancel")
|
|
onClicked: PolkitService.cancel();
|
|
}
|
|
DialogButton {
|
|
enabled: PolkitService.interactionAvailable
|
|
buttonText: Translation.tr("OK")
|
|
onClicked: root.submit();
|
|
}
|
|
}
|
|
}
|
|
}
|