fix: spinloop until listener ready

This commit is contained in:
dashie 2023-12-09 14:23:15 +00:00
parent 248fc9f526
commit c2557a714f
3 changed files with 19 additions and 6 deletions

View file

@ -426,6 +426,11 @@ pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
let imp = entry.1.imp();
let mut connected = imp.connected.borrow_mut();
*connected = imp.access_point.borrow().dbus_path == current_device.path;
if *connected {
imp.reset_wifi_connected.set_text("Connected");
} else {
imp.reset_wifi_connected.set_text("");
}
}
});
});

View file

@ -1,7 +1,9 @@
use gtk::prelude::FrameExt;
use std::cell::RefCell;
use std::hint::spin_loop;
use std::rc::Rc;
use std::sync::Arc;
use std::sync::atomic::Ordering;
use crate::components::base::setting_box::SettingBox;
use crate::components::base::utils::{start_audio_listener, Listeners, Position};
@ -73,10 +75,13 @@ pub const HANDLE_AUDIO_CLICK: fn(Arc<Listeners>, FlowBox, Rc<RefCell<Position>>)
let audio_output = Arc::new(SinkBox::new());
let audio_input = Arc::new(SourceBox::new());
start_audio_listener(
listeners,
listeners.clone(),
Some(audio_output.clone()),
Some(audio_input.clone()),
);
if !listeners.pulse_listener.load(Ordering::SeqCst) {
spin_loop();
}
populate_sinks(audio_output.clone());
populate_sources(audio_input.clone());
let sink_frame = wrap_in_flow_box_child(SettingBox::new(&*audio_output));
@ -93,7 +98,10 @@ pub const HANDLE_VOLUME_CLICK: fn(Arc<Listeners>, FlowBox, Rc<RefCell<Position>>
return;
}
let audio_output = Arc::new(SinkBox::new());
start_audio_listener(listeners, Some(audio_output.clone()), None);
start_audio_listener(listeners.clone(), Some(audio_output.clone()), None);
if !listeners.pulse_listener.load(Ordering::SeqCst) {
spin_loop();
}
populate_sinks(audio_output.clone());
let audio_frame = wrap_in_flow_box_child(SettingBox::new(&*audio_output));
reset_main.remove_all();
@ -107,7 +115,10 @@ pub const HANDLE_MICROPHONE_CLICK: fn(Arc<Listeners>, FlowBox, Rc<RefCell<Positi
return;
}
let audio_input = Arc::new(SourceBox::new());
start_audio_listener(listeners, None, Some(audio_input.clone()));
start_audio_listener(listeners.clone(), None, Some(audio_input.clone()));
if !listeners.pulse_listener.load(Ordering::SeqCst) {
spin_loop();
}
populate_sources(audio_input.clone());
let source_frame = wrap_in_flow_box_child(SettingBox::new(&*audio_input));
reset_main.remove_all();

View file

@ -25,6 +25,3 @@ row.audioRow {
border-color: transparent;
}
flowboxchild {
max-width: 800px;
}