git.lucas.co / cce-list
things-to-remember checklist
git clone https://git.lucas.co/cce-list.git

commit1ffafd8a1fb5b76d9c1d28b71007bf77d53aa1eb
parent66200cb81a
authorLucas Galante <lsgalante12@gmail.com>
date2026-10-08 12:34
refactor(focus): drive focus through UiContext::focus_widget / unfocus_widget

A direct w.focus() / w.unfocus() left the window's record of focus (the Tab
walk, the accessibility tree) behind: on a widget that had let go, or beside
a newly focused one. The UiContext helpers do what the direct call did and
keep the record in step (cce-ui's global-state RFC, phase 2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

 src/main.rs | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 797df6f..86bca48 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -352,7 +352,7 @@ impl ListApp {
 
     fn begin_new_list(&mut self) {
         self.set_mode(Mode::NamingList);
-        self.input_box.focus();
+        self.ui_context.focus_widget(&mut self.input_box);
         self.needs_rebuild = true;
     }
 
@@ -391,7 +391,7 @@ impl ListApp {
             return;
         }
         self.set_mode(Mode::ConfirmDelete);
-        self.input_box.unfocus();
+        self.ui_context.unfocus_widget(&mut self.input_box);
         self.needs_rebuild = true;
     }
 
@@ -937,7 +937,7 @@ impl Application for ListApp {
             }
         }
         if state == ElementState::Pressed && !self.input_box.hit_test(px, py, &self.ui_context) {
-            self.input_box.unfocus();
+            self.ui_context.unfocus_widget(&mut self.input_box);
             *needs_rebuild = true;
         }
         if self.ui_context.propagate_event(&ev, self.input_box.id()) {
@@ -993,7 +993,7 @@ impl Application for ListApp {
                 }
             }
             if let Key::Named(NamedKey::Escape) = event.logical_key {
-                self.input_box.unfocus();
+                self.ui_context.unfocus_widget(&mut self.input_box);
                 if self.mode != Mode::Items {
                     self.set_mode(Mode::Items);
                 }