fix: prevent building overlay with stale layout

This commit is contained in:
Nick Senger 2022-05-10 17:18:08 -07:00
parent d4ed8afa1e
commit 3be8f6e989
No known key found for this signature in database
GPG key ID: F905159224DB77D8
2 changed files with 63 additions and 13 deletions

View file

@ -376,6 +376,38 @@ where
let mut local_messages = Vec::new();
let mut local_shell = Shell::new(&mut local_messages);
if self
.instance
.state
.borrow()
.as_ref()
.and_then(|state| state.borrow_cache().as_ref())
.and_then(|cache| cache.borrow_overlay().as_ref())
.is_none()
{
let component =
self.instance.state.take().unwrap().into_heads().component;
self.instance.state = RefCell::new(Some(
StateBuilder {
component,
message: PhantomData,
cache_builder: |state| {
Some(
CacheBuilder {
element: state.view(),
overlay_builder: |element| {
element.overlay(layout, renderer)
},
}
.build(),
)
},
}
.build(),
));
}
let event_status = self
.with_overlay_mut_maybe(|overlay| {
overlay.on_event(
@ -410,9 +442,7 @@ where
Some(
CacheBuilder {
element: state.view(),
overlay_builder: |element| {
element.overlay(layout, renderer)
},
overlay_builder: |_| None,
}
.build(),
)