From 7af98b70087812099e10840986b97800f0e0be07 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 26 Apr 2025 14:26:28 +0300 Subject: [PATCH] delete autoremoved clips from pool --- crates/app/src/model.rs | 10 +++++++--- crates/midi/src/pool/pool_model.rs | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/app/src/model.rs b/crates/app/src/model.rs index 58844874..b60877a3 100644 --- a/crates/app/src/model.rs +++ b/crates/app/src/model.rs @@ -210,14 +210,18 @@ impl Tek { // Remove clip from arrangement when exiting empty clip editor pub fn clip_auto_remove (&mut self) { - if let Some(ref pool) = self.pool + if let Some(ref mut pool) = self.pool && let Selection::Clip(t, s) = self.selected && let Some(scene) = self.scenes.get_mut(s) && let Some(slot) = scene.clips.get_mut(t) - && let Some(clip) = slot + && let Some(clip) = slot.as_mut() { + let mut swapped = None; if clip.read().unwrap().count_midi_messages() == 0 { - *slot = None; + std::mem::swap(&mut swapped, slot); + } + if let Some(clip) = swapped { + pool.delete_clip(&clip.read().unwrap()); } } } diff --git a/crates/midi/src/pool/pool_model.rs b/crates/midi/src/pool/pool_model.rs index b238b1cf..87112a17 100644 --- a/crates/midi/src/pool/pool_model.rs +++ b/crates/midi/src/pool/pool_model.rs @@ -103,4 +103,12 @@ impl MidiPool { self.clip.store(index, Relaxed); (index, clip) } + pub fn delete_clip (&mut self, clip: &MidiClip) -> bool { + let index = self.clips.read().unwrap().iter().position(|x|*x.read().unwrap()==*clip); + if let Some(index) = index { + self.clips.write().unwrap().remove(index); + return true + } + false + } }