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:
Kirill Bulatov 2023-11-13 13:21:26 +02:00 committed by GitHub
commit 81cc6e84b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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
}