From 9ada66a78ea58d8b498f1dd26bf0783e1a442c51 Mon Sep 17 00:00:00 2001 From: Laurens Duin <85798751+Laurens256@users.noreply.github.com> Date: Tue, 5 Aug 2025 08:04:53 +0200 Subject: bar/popouts: add audio device switcher (#319) * feat: basic audio switcher * feat: replace VerticalSlider with StyledSlider * fix: styling * fix: formatting * chore: make sound icons consistent, change slider styling * feat: styled slider component variants * chore: cleanup * chore: cleanup * fix: pr fixes * fix: remove redundant code * chore: remove old code * fix: controls styling * fixes * more tweaks * radiobtn: add interaction stuff Anim slider --------- Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> --- services/Audio.qml | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'services') diff --git a/services/Audio.qml b/services/Audio.qml index c91adbc..54cea3b 100644 --- a/services/Audio.qml +++ b/services/Audio.qml @@ -6,20 +6,39 @@ import Quickshell.Services.Pipewire Singleton { id: root + readonly property var nodes: Pipewire.nodes.values.reduce((acc, node) => { + if (!node.isStream) { + if (node.isSink) acc.sinks.push(node) + else if (node.audio) acc.sources.push(node) + } + return acc + }, { sources: [], sinks: [] }) + + readonly property list sinks: nodes.sinks + readonly property list sources: nodes.sources + readonly property PwNode sink: Pipewire.defaultAudioSink readonly property PwNode source: Pipewire.defaultAudioSource - readonly property bool muted: sink?.audio?.muted ?? false + readonly property bool muted: !!sink?.audio?.muted readonly property real volume: sink?.audio?.volume ?? 0 - function setVolume(volume: real): void { + function setVolume(newVolume: real): void { if (sink?.ready && sink?.audio) { sink.audio.muted = false; - sink.audio.volume = volume; + sink.audio.volume = newVolume; } } + function setAudioSink(newSink: PwNode): void { + Pipewire.preferredDefaultAudioSink = newSink + } + + function setAudioSource(newSource: PwNode): void { + Pipewire.preferredDefaultAudioSource = newSource + } + PwObjectTracker { - objects: [Pipewire.defaultAudioSink, Pipewire.defaultAudioSource] + objects: [...root.sinks, ...root.sources] } } -- cgit v1.2.3-freya