11// Copyright 2025 System76 <[email protected] > 22// SPDX-License-Identifier: GPL-3.0-only
33
4- use cosmic:: widget;
4+ use cosmic:: { Apply , widget} ;
55use cosmic_settings_page:: { self as page, Section , section} ;
66use cosmic_settings_sound_subscription:: { self as subscription, pipewire} ;
77use itertools:: Itertools ;
88use slotmap:: SlotMap ;
99
1010#[ derive( Clone , Debug ) ]
11- pub enum Message {
12- /// Messages handled by the sound module in cosmic-settings-subscriptions
13- Subscription ( subscription:: Message ) ,
14- }
11+ pub enum Message { }
1512
1613impl From < Message > for crate :: pages:: Message {
1714 fn from ( message : Message ) -> Self {
@@ -75,15 +72,15 @@ pub fn view() -> Section<crate::pages::Message> {
7572 . model
7673 . device_profiles
7774 . iter ( )
78- . filter_map ( |( object_id , profiles) | {
79- let name = sound_page. model . device_names . get ( object_id ) ?. as_str ( ) ;
75+ . filter_map ( |( device_id , profiles) | {
76+ let name = sound_page. model . device_names . get ( device_id ) ?. as_str ( ) ;
8077
8178 // TODO: cache
8279 let active_profile =
8380 sound_page
8481 . model
8582 . active_profiles
86- . get ( object_id )
83+ . get ( device_id )
8784 . and_then ( |profile| {
8885 profiles
8986 . iter ( )
@@ -103,10 +100,17 @@ pub fn view() -> Section<crate::pages::Message> {
103100 } )
104101 . map ( |p| p. description . clone ( ) ) ;
105102
106- let dropdown =
107- widget:: dropdown ( Vec :: from_iter ( profiles) , active_profile, move |pos| {
108- super :: Message :: SetProfile ( object_id, pos) . into ( )
109- } ) ;
103+ let dropdown = widget:: dropdown:: popup_dropdown (
104+ Vec :: from_iter ( profiles) ,
105+ active_profile,
106+ move |id| super :: Message :: SetProfile ( device_id, id) ,
107+ cosmic:: iced:: window:: Id :: RESERVED ,
108+ super :: Message :: Surface ,
109+ crate :: Message :: from,
110+ )
111+ . apply ( cosmic:: Element :: from)
112+ . map ( crate :: pages:: Message :: from) ;
113+
110114 Some ( (
111115 name,
112116 widget:: settings:: item:: builder ( name) . control ( dropdown) ,
0 commit comments