mirror of
https://github.com/arabianq/pipewire-soundpad.git
synced 2026-04-28 06:21:23 +00:00
fix: deadlock in play_toggle
This commit is contained in:
+16
-12
@@ -56,20 +56,24 @@ impl SoundpadGui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn play_toggle(&mut self) {
|
pub fn play_toggle(&mut self) {
|
||||||
let mut guard = self.audio_player_state_shared.lock().unwrap();
|
let (new_state, request) = {
|
||||||
guard.state = match guard.state {
|
let guard = self.audio_player_state_shared.lock().unwrap();
|
||||||
PlayerState::Playing => {
|
match guard.state {
|
||||||
make_request_sync(Request::pause()).ok();
|
PlayerState::Playing => (Some(PlayerState::Paused), Some(Request::pause())),
|
||||||
guard.new_state = Some(PlayerState::Paused);
|
PlayerState::Paused => (Some(PlayerState::Playing), Some(Request::resume())),
|
||||||
PlayerState::Paused
|
PlayerState::Stopped => (None, None),
|
||||||
}
|
}
|
||||||
PlayerState::Paused => {
|
|
||||||
make_request_sync(Request::resume()).ok();
|
|
||||||
guard.new_state = Some(PlayerState::Playing);
|
|
||||||
PlayerState::Playing
|
|
||||||
}
|
|
||||||
PlayerState::Stopped => PlayerState::Stopped,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if let Some(req) = request {
|
||||||
|
make_request_sync(req).ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(state) = new_state {
|
||||||
|
let mut guard = self.audio_player_state_shared.lock().unwrap();
|
||||||
|
guard.new_state = Some(state.clone());
|
||||||
|
guard.state = state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn open_file(&mut self) {
|
pub fn open_file(&mut self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user