diff --git a/widget/WirePlumber.tsx b/widget/WirePlumber.tsx index 518c0d5..f68ef68 100644 --- a/widget/WirePlumber.tsx +++ b/widget/WirePlumber.tsx @@ -2,11 +2,57 @@ import { bind, derive } from "astal"; import { Gdk } from "astal/gtk4"; import AstalWp from "gi://AstalWp"; +const volIncr = 5 / 100; + const WirePlumber = function () { const audio = AstalWp.get_default()?.audio!; const speakers = bind(audio, "speakers"); + return speakers.as((speakers) => { + const defaultSpeaker = speakers.find((speaker) => speaker.is_default); + if (!defaultSpeaker) { + return <>; + } + return ( + { + defaultSpeaker.set_volume( + Math.min(defaultSpeaker.volume + -Math.sign(dy) * volIncr, 1.0), + ); + }} + > + + ); + }); + return ( {speakers.as((speakers) => { @@ -25,6 +71,11 @@ const WirePlumber = function () { tooltipText={bind(defaultSpeaker, "description").as( (description) => description, )} + onScroll={(_, __, dy) => { + bind(defaultSpeaker, "volume").as((vol) => { + defaultSpeaker.set_volume(vol + Math.sign(dy) * volIncr); + }); + }} /> ); })}