summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/interactive/app/handlers.rs13
-rw-r--r--src/interactive/widgets/mark.rs10
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 {