diff --git a/crates/tek_tui/src/tui_command.rs b/crates/tek_tui/src/tui_command.rs index 37f8360e..4da9b754 100644 --- a/crates/tek_tui/src/tui_command.rs +++ b/crates/tek_tui/src/tui_command.rs @@ -153,7 +153,7 @@ impl Command for PhraseLengthCommand { fn execute (self, state: &mut T) -> Perhaps { use PhraseLengthFocus::*; use PhraseLengthCommand::*; - let mode = state.phrases_mode_mut(); + let mut mode = state.phrases_mode_mut().clone(); if let Some(PhrasesMode::Length( phrase, ref mut length, @@ -180,10 +180,11 @@ impl Command for PhraseLengthCommand { Tick => { *length = length.saturating_sub(1) }, }, Self::Set(length) => { - let mut phrase = state.phrases()[*phrase].write().unwrap(); + let mut phrase = state.phrases()[phrase].write().unwrap(); let old_length = phrase.length; phrase.length = length; - *mode = None; + std::mem::drop(phrase); + *state.phrases_mode_mut() = None; return Ok(Some(Self::Set(old_length))) }, _ => unreachable!() diff --git a/crates/tek_tui/src/tui_control.rs b/crates/tek_tui/src/tui_control.rs index 7f67f37d..4f9af61e 100644 --- a/crates/tek_tui/src/tui_control.rs +++ b/crates/tek_tui/src/tui_control.rs @@ -44,8 +44,8 @@ impl ArrangerControl for ArrangerTui { } fn activate (&mut self) { if let ArrangerSelection::Scene(s) = self.selected { - for (t, track) in self.tracks().iter().enumerate() { - let phrase = self.scenes()[s].clips[t].clone(); + for (t, track) in self.tracks.iter_mut().enumerate() { + let phrase = self.scenes[s].clips[t].clone(); if track.player.play_phrase.is_some() || phrase.is_some() { track.enqueue_next(phrase.as_ref()); }