diff --git a/src/pipewire_manager.rs b/src/pipewire_manager.rs index 8184a6c..4827f69 100644 --- a/src/pipewire_manager.rs +++ b/src/pipewire_manager.rs @@ -272,6 +272,26 @@ impl PipewireManager { Some((id, self.devices.borrow()[&device_id].profiles[&id].description.clone())) }); + let factory = gtk::SignalListItemFactory::new(); + + factory.connect_setup(move |factory, item| { + let label = gtk::Label::new(None); + item.downcast_ref::() + .unwrap() + .set_child(Some(&label)); + }); + + factory.connect_bind(move |factory, item| { + let list_item = item.downcast_ref::().unwrap(); + let label = list_item.child().unwrap().downcast::().unwrap(); + + // using list_item.set_child( Some(&>label<) ) + // instead of label.set_label( >label<.label() ) + // results in weird broken behavior + label.set_label(&list_item.item().unwrap().downcast::().unwrap().label()) + }); + + combo_row.set_factory(Some(&factory)); let model = adw::gio::ListStore::new::(); @@ -316,9 +336,35 @@ impl PipewireManager { tx.send( Command::DeviceCommand(device_id, DeviceCommand::SetProfile(selected_profile_id)) ).unwrap(); + + + println!("{}", &selected_profile_name); } )); + /* + + // works, TODO: figure out preferred style + + combo_row.set_use_subtitle(true); + combo_row.connect_subtitle_notify(clone!( + #[weak] + model, + move |c| { + let model_entry = c.selected(); + let selected_profile_name = model + .item(model_entry) + .unwrap() + .downcast::() + .unwrap() + .label(); + + c.set_subtitle(&selected_profile_name); + } + )); + + */ + if let Some((_, name)) = active_profile { if let Ok(position) = profile_names.binary_search(&&name) { combo_row.set_selected(position as u32)