system settings
git clone https://git.lucas.co/cce-system-interface.git
refactor: id-keyed popover/context-menu API (cce-ui Phase 6bc slice 2)
register_popover takes &mut; active_popovers holds WidgetIds resolved
through ui_context.tree; context_menu::mouse_input takes the ctx.
src/input_handler.rs | 2 +-
src/renderer.rs | 11 ++++++-----
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/input_handler.rs b/src/input_handler.rs
index 68ab447..8a7ed45 100644
--- a/src/input_handler.rs
+++ b/src/input_handler.rs
@@ -98,7 +98,7 @@ impl SystemInterface {
// CSD Close Button Interaction removed
if cce_ui::widget::context_menu::is_visible() {
- if cce_ui::widget::context_menu::mouse_input(button, state, lx_no_scroll, ly_no_scroll) {
+ if cce_ui::widget::context_menu::mouse_input(button, state, lx_no_scroll, ly_no_scroll, Some(&mut self.ui_context)) {
let mut actions = Vec::new();
self.propagate_widget_changes(&mut actions);
for action in actions {
diff --git a/src/renderer.rs b/src/renderer.rs
index 3645a00..fb20d7a 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -581,14 +581,15 @@ impl SystemInterface {
// Chrome popover (the page dropdown) is in window coords; page-widget popovers
// (notifications/fonts menus) are in page coords and shift with the viewport —
// the same scroll subtraction the old popup positioner applied at creation.
- let chrome_ptr = self.page_dropdown.as_ptr();
+ let chrome_id = self.page_dropdown.id();
let mut page_pop_pc = PageContent::new();
- for popover_ptr in &self.ui_context.active_popovers {
+ for &pop_id in &self.ui_context.active_popovers {
+ let Some(pop_ptr) = self.ui_context.tree.get_ptr(pop_id) else { continue };
unsafe {
- if std::ptr::addr_eq(*popover_ptr, chrome_ptr) {
- (**popover_ptr).render_popover(&mut popover_pc);
+ if pop_id == chrome_id {
+ (*pop_ptr).render_popover(&mut popover_pc);
} else {
- (**popover_ptr).render_popover(&mut page_pop_pc);
+ (*pop_ptr).render_popover(&mut page_pop_pc);
}
}
}