diff --git a/packages/native-core/src/real_dom.rs b/packages/native-core/src/real_dom.rs index b14461e10..6cbedd90e 100644 --- a/packages/native-core/src/real_dom.rs +++ b/packages/native-core/src/real_dom.rs @@ -420,6 +420,11 @@ impl<'a, V: FromAnyValue + Send + Sync> NodeMut<'a, V> { self.dom } + #[inline] + pub fn parent_mut(&mut self) -> Option> { + self.parent_id().map(|id| NodeMut { id, dom: self.dom }) + } + #[inline] pub fn get_mut(&mut self) -> Option<&mut T> { // mark the node state as dirty diff --git a/packages/tui/src/lib.rs b/packages/tui/src/lib.rs index ff0d85cfa..9f316ed58 100644 --- a/packages/tui/src/lib.rs +++ b/packages/tui/src/lib.rs @@ -75,7 +75,11 @@ impl TuiContext { pub fn render>>( cfg: Config, - f: impl FnOnce(&Arc>, &Arc>, UnboundedSender) -> R, + create_renderer: impl FnOnce( + &Arc>, + &Arc>, + UnboundedSender, + ) -> R, ) -> Result<()> { let mut rdom = RealDom::new(Box::new([ TaffyLayout::to_type_erased(), @@ -105,7 +109,7 @@ pub fn render>>( let rdom = Arc::new(RwLock::new(rdom)); let taffy = Arc::new(Mutex::new(Taffy::new())); - let mut renderer = f(&rdom, &taffy, event_tx_clone); + let mut renderer = create_renderer(&rdom, &taffy, event_tx_clone); { let mut rdom = rdom.write().unwrap();