pane: Another stab at focus flickers in tab bar
This time around, we address the flicker seen in #3857 by querying the active item (that might've just been added), as it knows whether it has focus even if the parent Pane does not. Co-authored-by: Thorsten <thorsten@zed.dev>
This commit is contained in:
parent
027f425804
commit
0497b2f212
1 changed files with 11 additions and 0 deletions
|
@ -342,7 +342,18 @@ impl Pane {
|
|||
}
|
||||
|
||||
pub fn has_focus(&self, cx: &WindowContext) -> bool {
|
||||
// In addition to checking our own focus handle,
|
||||
// we need to account for a brief moment (when active item is being switched)
|
||||
// where we don't have focus.
|
||||
// We not only check whether our focus handle contains focus, but also
|
||||
// whether the active_item might have focus, because we might have just activated an item
|
||||
// but that hasn't rendered yet. So before the next render, we might have transfered focus
|
||||
// to the item and `focus_handle.contains_focus` returns false because the `active_item`
|
||||
// is not hooked up to us in the dispatch tree.
|
||||
self.focus_handle.contains_focused(cx)
|
||||
|| self
|
||||
.active_item()
|
||||
.map_or(false, |item| item.focus_handle(cx).contains_focused(cx))
|
||||
}
|
||||
|
||||
fn focus_in(&mut self, cx: &mut ViewContext<Self>) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue