Skip to content

Commit 62123cb

Browse files
committed
refactor: use a more reliable method to implement page up and down in filetreelist
1 parent 10b510b commit 62123cb

File tree

2 files changed

+12
-44
lines changed

2 files changed

+12
-44
lines changed

Diff for: filetreelist/src/filetree.rs

+11-43
Original file line numberDiff line numberDiff line change
@@ -116,45 +116,14 @@ impl FileTree {
116116

117117
fn selection_page_updown(
118118
&self,
119-
current_index: usize,
120-
up: bool,
119+
range: impl Iterator<Item = usize>,
121120
) -> Option<usize> {
122-
let mut index = current_index;
123-
124-
let mut count = 0;
125-
loop {
126-
index = {
127-
let new_index = if up {
128-
index.saturating_sub(1)
129-
} else {
130-
index.saturating_add(1)
131-
};
132-
133-
if new_index == index {
134-
break;
135-
}
136-
137-
if new_index >= self.items.len() {
138-
break;
139-
}
140-
141-
new_index
142-
};
143-
144-
if self.is_visible_index(index) {
145-
count += 1;
146-
}
147-
148-
if count >= self.window_height.get().unwrap_or(0) {
149-
break;
150-
}
151-
}
121+
let page_size = self.window_height.get().unwrap_or(0);
152122

153-
if index == current_index {
154-
None
155-
} else {
156-
Some(index)
157-
}
123+
range
124+
.filter(|index| self.is_visible_index(*index))
125+
.take(page_size)
126+
.last()
158127
}
159128

160129
///
@@ -176,13 +145,12 @@ impl FileTree {
176145
}
177146
MoveSelection::End => self.selection_end(selection),
178147
MoveSelection::PageUp => {
179-
Self::selection_page_updown(self, selection, true)
180-
}
181-
MoveSelection::PageDown => {
182-
Self::selection_page_updown(
183-
self, selection, false,
184-
)
148+
self.selection_page_updown((0..=selection).rev())
185149
}
150+
MoveSelection::PageDown => self
151+
.selection_page_updown(
152+
selection..(self.items.len()),
153+
),
186154
};
187155

188156
let changed_index =

Diff for: src/components/revision_files.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ impl RevisionFilesComponent {
277277

278278
self.tree
279279
.window_height
280-
.set(Some(tree_height.saturating_sub(1)));
280+
.set(Some(tree_height));
281281

282282
self.tree.visual_selection().map_or_else(
283283
|| {

0 commit comments

Comments
 (0)