Factor out common code for focusing the next view (#4607)

There is some common code between Editor::focus_next and Editor::focus
that can be eliminated by refactoring Tree::focus_next into a function
that only returns the next ViewId.
pull/4578/head^2
Michael Davis 2 years ago committed by GitHub
parent 6eec14ee37
commit b474ee1843
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1243,16 +1243,7 @@ impl Editor {
} }
pub fn focus_next(&mut self) { pub fn focus_next(&mut self) {
let prev_id = self.tree.focus; self.focus(self.tree.next());
self.tree.focus_next();
let id = self.tree.focus;
// if leaving the view: mode should reset and the cursor should be
// within view
if prev_id != id {
self.mode = Mode::Normal;
self.ensure_cursor_in_view(id);
}
} }
pub fn focus_direction(&mut self, direction: tree::Direction) { pub fn focus_direction(&mut self, direction: tree::Direction) {

@ -219,7 +219,7 @@ impl Tree {
if self.focus == index { if self.focus == index {
// focus on something else // focus on something else
self.focus_next(); self.focus = self.next();
} }
stack.push(index); stack.push(index);
@ -521,7 +521,7 @@ impl Tree {
Some(child_id) Some(child_id)
} }
pub fn focus_next(&mut self) { pub fn next(&self) -> ViewId {
// This function is very dumb, but that's because we don't store any parent links. // This function is very dumb, but that's because we don't store any parent links.
// (we'd be able to go parent.next_sibling() recursively until we find something) // (we'd be able to go parent.next_sibling() recursively until we find something)
// For now that's okay though, since it's unlikely you'll be able to open a large enough // For now that's okay though, since it's unlikely you'll be able to open a large enough
@ -532,11 +532,11 @@ impl Tree {
.skip_while(|&(id, _view)| id != self.focus) .skip_while(|&(id, _view)| id != self.focus)
.skip(1); // Skip focused value .skip(1); // Skip focused value
if let Some((id, _)) = views.next() { if let Some((id, _)) = views.next() {
self.focus = id; id
} else { } else {
// extremely crude, take the first item again // extremely crude, take the first item again
let (key, _) = self.traverse().next().unwrap(); let (key, _) = self.traverse().next().unwrap();
self.focus = key; key
} }
} }

Loading…
Cancel
Save