From 72e349e368f6d4600512354e75551b380cbf70c7 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 27 Mar 2025 18:02:40 +1100 Subject: sidebar: audio device selector module --- src/modules/sidebar/audio.tsx | 3 + src/modules/sidebar/modules/deviceselector.tsx | 126 +++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 src/modules/sidebar/modules/deviceselector.tsx (limited to 'src') diff --git a/src/modules/sidebar/audio.tsx b/src/modules/sidebar/audio.tsx index a5c1651..20a6551 100644 --- a/src/modules/sidebar/audio.tsx +++ b/src/modules/sidebar/audio.tsx @@ -1,3 +1,4 @@ +import DeviceSelector from "./modules/deviceselector"; import Media from "./modules/media"; import Streams from "./modules/streams"; @@ -6,5 +7,7 @@ export default () => ( + + ); diff --git a/src/modules/sidebar/modules/deviceselector.tsx b/src/modules/sidebar/modules/deviceselector.tsx new file mode 100644 index 0000000..03acc97 --- /dev/null +++ b/src/modules/sidebar/modules/deviceselector.tsx @@ -0,0 +1,126 @@ +import { bind, execAsync, Variable, type Binding } from "astal"; +import { Astal, Gtk } from "astal/gtk3"; +import AstalWp from "gi://AstalWp"; + +const Device = ({ + input, + defaultDevice, + showDropdown, + device, +}: { + input?: boolean; + defaultDevice: Binding; + showDropdown: Variable; + device: AstalWp.Endpoint; +}) => ( + +); + +const DefaultDevice = ({ input, device }: { input?: boolean; device: AstalWp.Endpoint }) => ( + + +); + +const Selector = ({ input, audio }: { input?: boolean; audio: AstalWp.Audio }) => { + const showDropdown = Variable(false); + const defaultDevice = bind(audio, input ? "defaultMicrophone" : "defaultSpeaker"); + + return ( + + + + {bind(audio, input ? "microphones" : "speakers").as(ds => + ds.map(d => ( + + )) + )} + + + + + + ); +}; + +const NoWp = () => ( + + + + +); + +export default () => { + const audio = AstalWp.get_default()?.get_audio(); + + if (!audio) return ; + + return ( + + + + + ); +}; -- cgit v1.2.3-freya