system settings
git clone https://git.lucas.co/cce-system-interface.git
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/pages/packages.rs | 3 +--
src/pages/services.rs | 3 +--
src/pages/timers.rs | 3 +--
src/renderer.rs | 15 ++++-----------
4 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/src/pages/packages.rs b/src/pages/packages.rs
index 19add7a..a81c524 100644
--- a/src/pages/packages.rs
+++ b/src/pages/packages.rs
@@ -1325,8 +1325,7 @@ impl crate::pages::AppPage for PackagesState {
if list.get_item_draw_y(idx, 4.0).is_none() {
continue;
}
- let (id, ptr) = (i.id(), i.as_ptr_mut());
- ctx.register_widget(id, ptr);
+ ctx.register_host(i);
}
}
diff --git a/src/pages/services.rs b/src/pages/services.rs
index 3db63c6..1d62535 100644
--- a/src/pages/services.rs
+++ b/src/pages/services.rs
@@ -497,8 +497,7 @@ impl crate::pages::AppPage for ServicesState {
if list.get_item_draw_y(idx, 4.0).is_none() {
continue;
}
- let (id, ptr) = (i.id(), i.as_ptr_mut());
- ctx.register_widget(id, ptr);
+ ctx.register_host(i);
}
}
diff --git a/src/pages/timers.rs b/src/pages/timers.rs
index aaa2c11..f7a4705 100644
--- a/src/pages/timers.rs
+++ b/src/pages/timers.rs
@@ -815,8 +815,7 @@ impl crate::pages::AppPage for TimersState {
if list.get_item_draw_y(idx, 4.0).is_none() {
continue;
}
- let (id, ptr) = (i.id(), i.as_ptr_mut());
- ctx.register_widget(id, ptr);
+ ctx.register_host(i);
}
}
diff --git a/src/renderer.rs b/src/renderer.rs
index e09e2e3..1657dab 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -795,18 +795,11 @@ impl SystemInterface {
// never go through it, so re-register them here. The page buttons are
// per-rebuild clones — registration follows the fresh allocations.
{
- let id = self.search_box.id();
- let ptr = self.search_box.as_ptr_mut();
- self.ui_context.register_widget(id, ptr);
- let id = self.page_dropdown.id();
- let ptr = self.page_dropdown.as_ptr_mut();
- self.ui_context.register_widget(id, ptr);
- let id = self.page_scroll_bar.id();
- let ptr = self.page_scroll_bar.as_ptr_mut();
- self.ui_context.register_widget(id, ptr);
+ self.ui_context.register_host(&mut self.search_box);
+ self.ui_context.register_host(&mut self.page_dropdown);
+ self.ui_context.register_host(&mut self.page_scroll_bar);
for (btn, _) in self.page_buttons.iter_mut() {
- let (id, ptr) = (btn.id(), btn.as_ptr_mut());
- self.ui_context.register_widget(id, ptr);
+ self.ui_context.register_host(btn);
}
}
// A Tab step's focus, handed to the fresh clone at the same rect (the