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

commit5a3f4ca6996c930ccecb8555859277a1f32c3f4d
parentef7119758c
authorLucas Galante <[email protected]>
date2026-06-19 03:24
Fix menubar button highlight routing across boundary

 src/main.rs | 47 +++++++++++++++++++++++++++++++++++------------
 1 file changed, 35 insertions(+), 12 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 1a33e48..2a5d5a2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1820,14 +1820,11 @@ fn collect_popover_rects(w: &dyn cce_ui::widget::Element, popovers: &mut Vec<(f3
         let ly = self.cursor_y / s + self.scroll_y;
         cce_ui::widget::hover_animation::set_cursor_pos(lx, ly_no_scroll);
         let mut changed = false;
-        if lx_no_scroll < self.sidebar_width {
-            if self.menubar.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
-                changed = true;
-            }
-        } else {
-            if self.switcher.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
-                changed = true;
-            }
+        if self.menubar.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+            changed = true;
+        }
+        if self.switcher.cursor_moved(lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+            changed = true;
         }
         for w in &mut self.widgets {
             let was = w.hovering;
@@ -2371,7 +2368,31 @@ fn collect_popover_rects(w: &dyn cce_ui::widget::Element, popovers: &mut Vec<(f3
             }
         }
 
-        if lx_no_scroll < self.sidebar_width {
+        let mut handled = false;
+        if state == cce_ui::widget::ElementState::Pressed {
+            if lx_no_scroll < self.sidebar_width {
+                if self.menubar.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+                    use cce_ui::widget::MenuController;
+                    if let Some((idx, _)) = self.menubar.menu_click() {
+                        if idx < Page::ALL.len() {
+                            cce_ui::widget::focus::clear_focus();
+                            let new_page = Page::ALL[idx];
+                            self.app.current_page = new_page;
+                            self.current_page_shared.store(idx as u8, std::sync::atomic::Ordering::SeqCst);
+                            self.scroll_y = 0.0;
+                            pages::interface::write_config_value("last_page", &format!("\"{}\"", new_page.label().to_lowercase()));
+                        }
+                    }
+                    self.needs_rebuild = true;
+                    handled = true;
+                }
+            } else {
+                if self.switcher.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
+                    self.needs_rebuild = true;
+                    handled = true;
+                }
+            }
+        } else {
             if self.menubar.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
                 use cce_ui::widget::MenuController;
                 if let Some((idx, _)) = self.menubar.menu_click() {
@@ -2385,14 +2406,16 @@ fn collect_popover_rects(w: &dyn cce_ui::widget::Element, popovers: &mut Vec<(f3
                     }
                 }
                 self.needs_rebuild = true;
-                return true;
+                handled = true;
             }
-        } else {
             if self.switcher.mouse_input(button, state, lx_no_scroll, ly_no_scroll, &mut self.ui_context) {
                 self.needs_rebuild = true;
-                return true;
+                handled = true;
             }
         }
+        if handled {
+            return true;
+        }
 
         if button != cce_ui::widget::MouseButton::Left && button != cce_ui::widget::MouseButton::Right { return false; }
         if button == cce_ui::widget::MouseButton::Left && state == cce_ui::widget::ElementState::Released {