diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/interactive/app/handlers.rs | 13 | ||||
-rw-r--r-- | src/interactive/widgets/mark.rs | 10 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/interactive/app/handlers.rs b/src/interactive/app/handlers.rs index 850ce12..20fc8ec 100644 --- a/src/interactive/app/handlers.rs +++ b/src/interactive/app/handlers.rs @@ -29,17 +29,24 @@ impl CursorDirection { impl TerminalApp { pub fn cycle_focus(&mut self) { use FocussedPane::*; + self.window.mark_pane.as_mut().map(|p| p.set_focus(false)); self.state.focussed = match ( self.state.focussed, &self.window.help_pane, - &self.window.mark_pane, + &mut self.window.mark_pane, ) { (Main, Some(_), _) => Help, - (Help, _, Some(_)) => Mark, + (Help, _, Some(ref mut pane)) => { + pane.set_focus(true); + Mark + } (Help, _, None) => Main, (Mark, _, _) => Main, (Main, None, None) => Main, - (Main, None, Some(_)) => Mark, + (Main, None, Some(ref mut pane)) => { + pane.set_focus(true); + Mark + } }; } diff --git a/src/interactive/widgets/mark.rs b/src/interactive/widgets/mark.rs index 67596bd..047c71a 100644 --- a/src/interactive/widgets/mark.rs +++ b/src/interactive/widgets/mark.rs @@ -18,6 +18,7 @@ pub struct MarkPane { selected: Option<usize>, marked: EntryMarkMap, list: List, + has_focus: bool, } pub struct MarkPaneProps { @@ -25,7 +26,16 @@ pub struct MarkPaneProps { } impl MarkPane { + pub fn set_focus(&mut self, has_focus: bool) { + self.has_focus = has_focus; + if has_focus { + self.selected = Some(self.marked.len().saturating_sub(1)); + } else { + self.selected = None + } + } pub fn toggle_index(mut self, index: TreeIndex, tree: &Tree) -> Option<Self> { + // TODO: use HashMapEntry (Vacant/Occupied) if self.marked.get(&index).is_some() { self.marked.remove(&index); } else { |