From a28080db184f785571c1e66f24d889acbf48fdd7 Mon Sep 17 00:00:00 2001 From: John Mitchell <6656977+StarArawn@users.noreply.github.com> Date: Mon, 1 May 2023 20:34:11 -0400 Subject: [PATCH] Fixed root context not working. --- src/context.rs | 6 ++---- src/context_entities.rs | 6 +++--- src/widget_context.rs | 18 ++++++++++++------ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/context.rs b/src/context.rs index d3df25c..b6ce293 100644 --- a/src/context.rs +++ b/src/context.rs @@ -227,10 +227,8 @@ impl KayakRootContext { parent_id: Option<Entity>, context_entity: Entity, ) { - if let Some(parent_id) = parent_id { - self.context_entities - .add_context_entity::<T>(parent_id, context_entity); - } + self.context_entities + .add_context_entity::<T>(parent_id, context_entity); } /// Returns a new/existing widget entity. diff --git a/src/context_entities.rs b/src/context_entities.rs index 5037f39..e1707a1 100644 --- a/src/context_entities.rs +++ b/src/context_entities.rs @@ -8,7 +8,7 @@ use dashmap::DashMap; #[derive(Debug, Clone)] pub struct ContextEntities { - ce: Arc<DashMap<Entity, DashMap<TypeId, Entity>>>, + ce: Arc<DashMap<Option<Entity>, DashMap<TypeId, Entity>>>, } impl ContextEntities { @@ -20,7 +20,7 @@ impl ContextEntities { pub fn add_context_entity<T: Default + 'static>( &self, - parent_id: Entity, + parent_id: Option<Entity>, context_entity: Entity, ) { if !self.ce.contains_key(&parent_id) { @@ -30,7 +30,7 @@ impl ContextEntities { inner.insert(T::default().type_id(), context_entity); } - pub fn get_context_entity<T: Default + 'static>(&self, parent_id: Entity) -> Option<Entity> { + pub fn get_context_entity<T: Default + 'static>(&self, parent_id: Option<Entity>) -> Option<Entity> { if !self.ce.contains_key(&parent_id) { return None; } diff --git a/src/widget_context.rs b/src/widget_context.rs index aabbdfc..1dd68d7 100644 --- a/src/widget_context.rs +++ b/src/widget_context.rs @@ -72,10 +72,8 @@ impl KayakWidgetContext { parent_id: Option<Entity>, context_entity: Entity, ) { - if let Some(parent_id) = parent_id { - self.context_entities - .add_context_entity::<T>(parent_id, context_entity); - } + self.context_entities + .add_context_entity::<T>(parent_id, context_entity); } /// Finds the closest matching context entity by traversing up the tree. @@ -86,7 +84,7 @@ impl KayakWidgetContext { // Check self first.. if let Some(entity) = self .context_entities - .get_context_entity::<T>(current_entity) + .get_context_entity::<T>(Some(current_entity)) { return Some(entity); } @@ -97,12 +95,20 @@ impl KayakWidgetContext { while parent.is_some() { if let Some(entity) = self .context_entities - .get_context_entity::<T>(parent.unwrap().0) + .get_context_entity::<T>(Some(parent.unwrap().0)) { return Some(entity); } parent = tree.get_parent(parent.unwrap()); } + + // Finally check root AKA no parent. + if let Some(entity) = self + .context_entities + .get_context_entity::<T>(None) + { + return Some(entity); + } } None -- GitLab