git.lucas.co / cce-system-interface
system settings
git clone https://git.lucas.co/cce-system-interface.git

commit4fbbeb55886c022eaeeb9f87c1cc5cc05a101575
parent2ed7cad897
authorLucas Galante <[email protected]>
date2026-07-12 15:16
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);
                     }
                 }
             }