52 lines
1.4 KiB
QML
52 lines
1.4 KiB
QML
// Output / input device picker. Writing Pipewire.preferredDefaultAudioSink is
|
|
// what actually moves audio; the default* properties are read-only reflections
|
|
// of what the session manager settled on.
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Services.Pipewire
|
|
import qs.config
|
|
import qs.services
|
|
|
|
Item {
|
|
id: root
|
|
|
|
// false → input devices.
|
|
property bool output: true
|
|
property alias maxHeight: list.maxHeight
|
|
|
|
implicitHeight: list.implicitHeight
|
|
|
|
readonly property var nodes: root.output ? AudioDevices.outputs : AudioDevices.inputs
|
|
|
|
readonly property var current: AudioDevices.current(root.output)
|
|
|
|
function select(node): void {
|
|
AudioDevices.select(root.output, node)
|
|
}
|
|
|
|
ScrollColumn {
|
|
id: list
|
|
anchors.fill: parent
|
|
maxHeight: 220
|
|
|
|
Repeater {
|
|
model: root.nodes
|
|
|
|
RowButton {
|
|
id: nodeRow
|
|
|
|
required property var modelData
|
|
|
|
width: parent.width
|
|
implicitHeight: 38
|
|
icon: root.output ? "audio-speakers-symbolic" : "audio-input-microphone-symbolic"
|
|
iconFallback: "audio-card-symbolic"
|
|
label: AudioDevices.label(nodeRow.modelData)
|
|
selected: nodeRow.modelData === root.current
|
|
onClicked: root.select(nodeRow.modelData)
|
|
}
|
|
}
|
|
}
|
|
}
|