From ac8e8b2bf06c2dff98dda107ae1e91443ea284d4 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 9 Nov 2024 14:30:17 +0100 Subject: [PATCH] focus: exit on next/prev --- crates/tek_core/src/command.rs | 2 +- crates/tek_core/src/focus.rs | 2 ++ crates/tek_sequencer/src/arranger_cmd.rs | 18 +++++++++--------- crates/tek_sequencer/src/sequencer_cmd.rs | 12 ++++++------ 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/crates/tek_core/src/command.rs b/crates/tek_core/src/command.rs index ac1bb8e2..1fd72494 100644 --- a/crates/tek_core/src/command.rs +++ b/crates/tek_core/src/command.rs @@ -5,9 +5,9 @@ pub trait Command: Sized { fn execute (self, state: &mut S) -> Perhaps; } pub fn delegate , S> ( + cmd: C, wrap: impl Fn(C)->B, state: &mut S, - cmd: C ) -> Perhaps { Ok(cmd.execute(state)?.map(|x|wrap(x))) } diff --git a/crates/tek_core/src/focus.rs b/crates/tek_core/src/focus.rs index 43c9a7ff..897a3392 100644 --- a/crates/tek_core/src/focus.rs +++ b/crates/tek_core/src/focus.rs @@ -64,6 +64,7 @@ pub trait FocusGrid { if self.focused() == current { // FIXME: prevent infinite loop self.focus_next() } + self.focus_exit(); self.update_focus(); } fn focus_prev (&mut self) { @@ -80,6 +81,7 @@ pub trait FocusGrid { if self.focused() == current { // FIXME: prevent infinite loop self.focus_prev() } + self.focus_exit(); self.update_focus(); } } diff --git a/crates/tek_sequencer/src/arranger_cmd.rs b/crates/tek_sequencer/src/arranger_cmd.rs index 986bda3e..22decbce 100644 --- a/crates/tek_sequencer/src/arranger_cmd.rs +++ b/crates/tek_sequencer/src/arranger_cmd.rs @@ -38,21 +38,21 @@ impl Command> for ArrangerCommand { fn execute (self, state: &mut Arranger) -> Perhaps { let undo = match self { Self::Focus(cmd) => { - delegate(Self::Focus, state, cmd) - }, - Self::Transport(cmd) => if let Some(ref transport) = state.transport { - delegate(Self::Transport, &mut*transport.write().unwrap(), cmd) - } else { - Ok(None) + delegate(cmd, Self::Focus, state) }, Self::Phrases(cmd) => { - delegate(Self::Phrases, &mut*state.phrases.write().unwrap(), cmd) + delegate(cmd, Self::Phrases, &mut*state.phrases.write().unwrap()) }, Self::Editor(cmd) => { - delegate(Self::Editor, &mut state.editor, cmd) + delegate(cmd, Self::Editor, &mut state.editor) }, Self::Arrangement(cmd) => { - delegate(Self::Arrangement, &mut state.arrangement, cmd) + delegate(cmd, Self::Arrangement, &mut state.arrangement) + }, + Self::Transport(cmd) => if let Some(ref transport) = state.transport { + delegate(cmd, Self::Transport, &mut*transport.write().unwrap()) + } else { + Ok(None) }, }?; state.show_phrase(); diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 6cc707dd..14603faa 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -75,16 +75,16 @@ impl Command> for SequencerCommand { fn execute (self, state: &mut Sequencer) -> Perhaps { match self { Self::Focus(cmd) => { - return delegate(Self::Focus, state, cmd) - }, - Self::Transport(cmd) => if let Some(ref transport) = state.transport { - return delegate(Self::Transport, &mut*transport.write().unwrap(), cmd) + return delegate(cmd, Self::Focus, state) }, Self::Phrases(cmd) => { - return delegate(Self::Phrases, &mut*state.phrases.write().unwrap(), cmd) + return delegate(cmd, Self::Phrases, &mut*state.phrases.write().unwrap()) }, Self::Editor(cmd) => { - return delegate(Self::Editor, &mut state.editor, cmd) + return delegate(cmd, Self::Editor, &mut state.editor) + }, + Self::Transport(cmd) => if let Some(ref transport) = state.transport { + return delegate(cmd, Self::Transport, &mut*transport.write().unwrap()) }, } Ok(None)