git.lucas.co / cce-data-editor
structured data editor
git clone https://git.lucas.co/cce-data-editor.git

commit26ecf300ac1c04821d582e65185831a6c9e860ba
parent4ee1873df3
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 | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 9d91290..a755065 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2625,16 +2625,16 @@ impl Application for DataEditorApp {
             let in_raw = px >= rx && px <= rx + rw && py >= ry && py <= ry + rh;
             
             if !in_raw {
-                self.raw_json_editor.unfocus();
-                self.selected_value_editor.unfocus();
-                self.selected_color_editor.unfocus();
-                self.selected_spinbox_editor.unfocus();
-                self.selected_font_editor.unfocus();
-                self.selected_choice_editor.unfocus();
-                self.selected_len_editor.unfocus();
-                self.selected_unit_editor.unfocus();
-                self.selected_keybind_editor.unfocus();
-                self.tree_list.unfocus();
+                self.ui_context.unfocus_widget(&mut self.raw_json_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_value_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_color_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_spinbox_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_font_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_choice_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_len_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_unit_editor);
+                self.ui_context.unfocus_widget(&mut self.selected_keybind_editor);
+                self.ui_context.unfocus_widget(&mut self.tree_list);
                 // The manual unfocus sweep above leaves ctx.focused_widget stale;
                 // clear it so focus-derived state (the tree rim) sees reality.
                 self.ui_context.clear_focus();