gpui: Ensure first tab index is selected on first focus (#35247)
This fixes an issue with tab indices where we would actually focus the second focus handle on first focus instead of the first one. The test was updated accordingly. Release Notes: - N/A --------- Co-authored-by: Jason Lee <huacnlee@gmail.com>
This commit is contained in:
parent
6c5791532e
commit
8f952f1b58
2 changed files with 30 additions and 17 deletions
|
@ -32,20 +32,18 @@ impl TabHandles {
|
|||
self.handles.clear();
|
||||
}
|
||||
|
||||
fn current_index(&self, focused_id: Option<&FocusId>) -> usize {
|
||||
self.handles
|
||||
.iter()
|
||||
.position(|h| Some(&h.id) == focused_id)
|
||||
.unwrap_or_default()
|
||||
fn current_index(&self, focused_id: Option<&FocusId>) -> Option<usize> {
|
||||
self.handles.iter().position(|h| Some(&h.id) == focused_id)
|
||||
}
|
||||
|
||||
pub(crate) fn next(&self, focused_id: Option<&FocusId>) -> Option<FocusHandle> {
|
||||
let ix = self.current_index(focused_id);
|
||||
|
||||
let mut next_ix = ix + 1;
|
||||
if next_ix + 1 > self.handles.len() {
|
||||
next_ix = 0;
|
||||
}
|
||||
let next_ix = self
|
||||
.current_index(focused_id)
|
||||
.and_then(|ix| {
|
||||
let next_ix = ix + 1;
|
||||
(next_ix < self.handles.len()).then_some(next_ix)
|
||||
})
|
||||
.unwrap_or_default();
|
||||
|
||||
if let Some(next_handle) = self.handles.get(next_ix) {
|
||||
Some(next_handle.clone())
|
||||
|
@ -55,7 +53,7 @@ impl TabHandles {
|
|||
}
|
||||
|
||||
pub(crate) fn prev(&self, focused_id: Option<&FocusId>) -> Option<FocusHandle> {
|
||||
let ix = self.current_index(focused_id);
|
||||
let ix = self.current_index(focused_id).unwrap_or_default();
|
||||
let prev_ix;
|
||||
if ix == 0 {
|
||||
prev_ix = self.handles.len().saturating_sub(1);
|
||||
|
@ -108,8 +106,14 @@ mod tests {
|
|||
]
|
||||
);
|
||||
|
||||
// next
|
||||
assert_eq!(tab.next(None), Some(tab.handles[1].clone()));
|
||||
// Select first tab index if no handle is currently focused.
|
||||
assert_eq!(tab.next(None), Some(tab.handles[0].clone()));
|
||||
// Select last tab index if no handle is currently focused.
|
||||
assert_eq!(
|
||||
tab.prev(None),
|
||||
Some(tab.handles[tab.handles.len() - 1].clone())
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
tab.next(Some(&tab.handles[0].id)),
|
||||
Some(tab.handles[1].clone())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue