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
|
where
|
||||||
Tag: 'static,
|
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>>(
|
let scroll_state = cx.element_state::<Tag, Rc<ScrollState>>(
|
||||||
element_id,
|
element_id,
|
||||||
Rc::new(ScrollState {
|
Rc::new(ScrollState {
|
||||||
scroll_to: Cell::new(scroll_to),
|
|
||||||
scroll_position: Default::default(),
|
|
||||||
type_tag: TypeTag::new::<Tag>(),
|
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.scroll_state = Some((scroll_state, cx.handle().id()));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue