Files
dots-hyprland/dots/.config/quickshell/ii/modules/ii/polkit/PolkitContent.qml
T

105 lines
2.8 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: PolkitService.cleanMessage
}
MaterialTextField {
id: inputField
Layout.fillWidth: true
focus: true
enabled: PolkitService.interactionAvailable
placeholderText: PolkitService.cleanPrompt
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 {
Layout.bottomMargin: 10 // I honestly don't know why this is necessary
Item {
Layout.fillWidth: true
}
DialogButton {
buttonText: Translation.tr("Cancel")
onClicked: PolkitService.cancel();
}
DialogButton {
enabled: PolkitService.interactionAvailable
buttonText: Translation.tr("OK")
onClicked: root.submit();
}
}
}
}