Files
Panama/config/dot/quickshell/modules/quicksettings/AudioDeviceList.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)
}
}
}
}