mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-06 18:46:49 +00:00
pane: When opening a buffer, actually scroll to the selected tab. (#3306)
Previously it might've reused a shared state. Deals with https://github.com/zed-industries/community/issues/2262 also fixes influencer's feedback. No gpui2 port, due to 0 scrollable functionality in it yet. Release Notes: - Fixed tabs not being scrolled to on buffer (re)open (https://github.com/zed-industries/community/issues/2262)
This commit is contained in:
commit
81cc6e84b7
1 changed files with 9 additions and 2 deletions
|
@ -67,14 +67,21 @@ impl<V: 'static> Flex<V> {
|
|||
where
|
||||
Tag: 'static,
|
||||
{
|
||||
// Don't assume that this initialization is what scroll_state really is in other panes:
|
||||
// `element_state` is shared and there could be init races.
|
||||
let scroll_state = cx.element_state::<Tag, Rc<ScrollState>>(
|
||||
element_id,
|
||||
Rc::new(ScrollState {
|
||||
scroll_to: Cell::new(scroll_to),
|
||||
scroll_position: Default::default(),
|
||||
type_tag: TypeTag::new::<Tag>(),
|
||||
scroll_to: Default::default(),
|
||||
scroll_position: Default::default(),
|
||||
}),
|
||||
);
|
||||
// Set scroll_to separately, because the default state is already picked as `None` by other panes
|
||||
// by the time we start setting it here, hence update all others' state too.
|
||||
scroll_state.update(cx, |this, _| {
|
||||
this.scroll_to.set(scroll_to);
|
||||
});
|
||||
self.scroll_state = Some((scroll_state, cx.handle().id()));
|
||||
self
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue