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

commita6d3c73fe2c2d30621b623070e45e61123aa1088
parent57cc580153
authorLucas Galante <lsgalante12@gmail.com>
date2026-10-07 15:29
refactor: register widgets by reference (UiContext::register_host)

register_widget(id, ptr) took a raw pointer in a safe function; cce-ui is
making it an unsafe fn now that every app registers through
register_host(&mut w), which takes the widget's own id and a live borrow.
Registration loops that existed only to hand the registry raw pointers
(and the unsafe blocks and self_ptr casts around them) are gone.

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

 src/main.rs | 37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index a7c325f..e938116 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1740,26 +1740,23 @@ impl Application for DataEditorApp {
             // The root plate container is DISSOLVED (Phase 6): top-level widgets register directly
             // (parentless) and the window plate is emitted below as prims. The splitter still
             // owns its two panes.
-            let self_ptr = self as *mut Self;
-            unsafe {
-                self.ui_context.register_widget(self.btn_open.base().id(), (*self_ptr).btn_open.as_ptr_mut());
-                self.ui_context.register_widget(self.tree_list.base().id(), (*self_ptr).tree_list.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_value_editor.base().id(), (*self_ptr).selected_value_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_color_editor.base().id(), (*self_ptr).selected_color_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_spinbox_editor.base().id(), (*self_ptr).selected_spinbox_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_font_editor.base().id(), (*self_ptr).selected_font_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_choice_editor.base().id(), (*self_ptr).selected_choice_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_len_editor.base().id(), (*self_ptr).selected_len_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_unit_editor.base().id(), (*self_ptr).selected_unit_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_keybind_editor.base().id(), (*self_ptr).selected_keybind_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_bool_editor.base().id(), (*self_ptr).selected_bool_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_button_editor.base().id(), (*self_ptr).selected_button_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_bevel_editor.base().id(), (*self_ptr).selected_bevel_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.selected_ramp_editor.base().id(), (*self_ptr).selected_ramp_editor.as_ptr_mut());
-                self.ui_context.register_widget(self.menubar.id(), (*self_ptr).menubar.as_ptr_mut());
-                self.ui_context.register_widget(self.statusbar.base().id(), (*self_ptr).statusbar.as_ptr_mut());
-                self.ui_context.register_widget(self.raw_json_editor.base().id(), (*self_ptr).raw_json_editor.as_ptr_mut());
-            }
+            self.ui_context.register_host(&mut self.btn_open);
+            self.ui_context.register_host(&mut self.tree_list);
+            self.ui_context.register_host(&mut self.selected_value_editor);
+            self.ui_context.register_host(&mut self.selected_color_editor);
+            self.ui_context.register_host(&mut self.selected_spinbox_editor);
+            self.ui_context.register_host(&mut self.selected_font_editor);
+            self.ui_context.register_host(&mut self.selected_choice_editor);
+            self.ui_context.register_host(&mut self.selected_len_editor);
+            self.ui_context.register_host(&mut self.selected_unit_editor);
+            self.ui_context.register_host(&mut self.selected_keybind_editor);
+            self.ui_context.register_host(&mut self.selected_bool_editor);
+            self.ui_context.register_host(&mut self.selected_button_editor);
+            self.ui_context.register_host(&mut self.selected_bevel_editor);
+            self.ui_context.register_host(&mut self.selected_ramp_editor);
+            self.ui_context.register_host(&mut self.menubar);
+            self.ui_context.register_host(&mut self.statusbar);
+            self.ui_context.register_host(&mut self.raw_json_editor);
             self.ui_context.rebuild_spatial_grid();
         }