Skip to content

Commit 717e099

Browse files
committed
fix(sound): use popup dropdown widget
1 parent 363716c commit 717e099

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

cosmic-settings/src/pages/sound/device_profiles.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
// Copyright 2025 System76 <[email protected]>
22
// SPDX-License-Identifier: GPL-3.0-only
33

4-
use cosmic::widget;
4+
use cosmic::{Apply, widget};
55
use cosmic_settings_page::{self as page, Section, section};
66
use cosmic_settings_sound_subscription::{self as subscription, pipewire};
77
use itertools::Itertools;
88
use slotmap::SlotMap;
99

1010
#[derive(Clone, Debug)]
1111
pub enum Message {
12-
/// Messages handled by the sound module in cosmic-settings-subscriptions
13-
Subscription(subscription::Message),
12+
Surface(cosmic::surface::Action),
1413
}
1514

1615
impl From<Message> for crate::pages::Message {
@@ -59,8 +58,12 @@ impl page::Page<crate::pages::Message> for Page {
5958
}
6059

6160
impl Page {
62-
pub fn update(&mut self, _message: Message) -> cosmic::Task<crate::app::Message> {
63-
cosmic::Task::none()
61+
pub fn update(&mut self, message: Message) -> cosmic::Task<crate::app::Message> {
62+
match message {
63+
Message::Surface(a) => {
64+
return cosmic::Task::done(crate::app::Message::Surface(a));
65+
}
66+
}
6467
}
6568
}
6669

@@ -75,15 +78,15 @@ pub fn view() -> Section<crate::pages::Message> {
7578
.model
7679
.device_profiles
7780
.iter()
78-
.filter_map(|(object_id, profiles)| {
79-
let name = sound_page.model.device_names.get(object_id)?.as_str();
81+
.filter_map(|(device_id, profiles)| {
82+
let name = sound_page.model.device_names.get(device_id)?.as_str();
8083

8184
// TODO: cache
8285
let active_profile =
8386
sound_page
8487
.model
8588
.active_profiles
86-
.get(object_id)
89+
.get(device_id)
8790
.and_then(|profile| {
8891
profiles
8992
.iter()
@@ -103,10 +106,17 @@ pub fn view() -> Section<crate::pages::Message> {
103106
})
104107
.map(|p| p.description.clone());
105108

106-
let dropdown =
107-
widget::dropdown(Vec::from_iter(profiles), active_profile, move |pos| {
108-
super::Message::SetProfile(object_id, pos).into()
109-
});
109+
let dropdown = widget::dropdown::popup_dropdown(
110+
Vec::from_iter(profiles),
111+
active_profile,
112+
move |id| super::Message::SetProfile(device_id, id),
113+
cosmic::iced::window::Id::RESERVED,
114+
super::Message::Surface,
115+
crate::Message::from,
116+
)
117+
.apply(cosmic::Element::from)
118+
.map(crate::pages::Message::from);
119+
110120
Some((
111121
name,
112122
widget::settings::item::builder(name).control(dropdown),

0 commit comments

Comments
 (0)