From fbd84f98d303a4c02fca81fee463053b13b71385 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 4 Aug 2025 04:17:40 -0500 Subject: [PATCH] Added focus on widget #26 --- src/widget.rs | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/widget.rs b/src/widget.rs index 984dda5..2a2de8e 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -69,6 +69,7 @@ pub struct WidgetLoad(BoxedElement, HashMap); pub struct StaticWidget { element: Mutex, components: Mutex>, + focused: Mutex, } /// A widget with dynamic content and dependency tracking. @@ -81,6 +82,7 @@ pub struct DynWidget { load: Mutex WidgetLoad + Send + Sync>>, dependencies: Mutex>>, injection: Mutex WidgetLoad + Send + Sync>>>, + focused: Mutex, } /// A reference-counted wrapper around either a static or dynamic widget. @@ -129,6 +131,20 @@ impl Widget { } impl Widget { + pub fn is_focused(&self) -> bool { + match self { + Self::Dynamic(w) => *w.focused.lock().unwrap(), + Self::Static(w) => *w.focused.lock().unwrap(), + } + } + + pub fn set_focused(&self, f: bool) { + match self { + Self::Dynamic(w) => *w.focused.lock().unwrap() = f, + Self::Static(w) => *w.focused.lock().unwrap() = f, + } + } + pub fn get_elem(&self) -> MutexGuard { match self { Widget::Static(w) => w.get_elem(), @@ -232,12 +248,14 @@ impl Widget { wrapper.call(self, e); } - match &**self { - Widget::Dynamic(w) => { - w.get_elem().event(e); - } - Widget::Static(w) => { - w.get_elem().event(e); + if self.is_focused() { + match &**self { + Widget::Dynamic(w) => { + w.get_elem().event(e); + } + Widget::Static(w) => { + w.get_elem().event(e); + } } } } @@ -255,6 +273,7 @@ impl StaticWidget { Self { element: Mutex::new(e), components: Mutex::new(HashMap::new()), + focused: Mutex::new(false), } } @@ -299,6 +318,7 @@ impl DynWidget { load: Mutex::new(Box::new(e)), dependencies: Mutex::new(Vec::new()), injection: Mutex::new(None), + focused: Mutex::new(false), } }