From d6e5b38847c577b12b69eaba32f80e097acceba6 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Wed, 1 Jul 2026 19:47:32 +0300 Subject: [PATCH] fix(properties): close color picker when a panel dropdown opens (#235) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Properties panel color picker is a custom bool-driven dropdown, while Layer/Linetype/Lineweight are combo_boxes. Combo_boxes close each other on blur, but nothing closed the color picker — so opening the Layer dropdown while the color picker was open left both showing and overlapping. Give every panel combo_box an on_open handler that collapses the color picker, so at most one panel dropdown is open at a time. Co-Authored-By: Claude Opus 4.8 --- src/app/mod.rs | 4 ++++ src/app/update/mod.rs | 7 +++++++ src/ui/properties.rs | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/src/app/mod.rs b/src/app/mod.rs index bb6af37b3..31fc33a10 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1435,6 +1435,10 @@ pub enum Message { PropAttrCommit(String), /// Toggle the inline color picker dropdown open/closed. PropColorPickerToggle, + /// Collapse the inline color picker dropdown. Fired when another + /// properties-panel dropdown (a combo_box) opens, so at most one panel + /// dropdown is open at a time and they can't overlap. (#235) + PropColorPickerClose, /// Toggle the full ACI colour palette expansion. PropColorPaletteToggle, /// Enter the model-space editing mode inside the given viewport (MSPACE). diff --git a/src/app/update/mod.rs b/src/app/update/mod.rs index 137794324..6153a6d6f 100644 --- a/src/app/update/mod.rs +++ b/src/app/update/mod.rs @@ -2123,6 +2123,13 @@ impl OpenCADStudio { Task::none() } + Message::PropColorPickerClose => { + let i = self.active_tab; + self.tabs[i].properties.color_picker_open = false; + self.tabs[i].properties.color_palette_open = false; + Task::none() + } + Message::PropColorPaletteToggle => { self.tabs[self.active_tab].properties.color_palette_open = !self.tabs[self.active_tab].properties.color_palette_open; diff --git a/src/ui/properties.rs b/src/ui/properties.rs index c37efebf1..f553fa985 100644 --- a/src/ui/properties.rs +++ b/src/ui/properties.rs @@ -207,6 +207,7 @@ impl PropertiesPanel { .size(FONT_SZ) .padding([2, 6]) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill) .into() }; @@ -387,6 +388,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into()) @@ -489,6 +491,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into()) @@ -509,6 +512,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into()) @@ -542,6 +546,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into()) @@ -574,6 +579,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into()) @@ -655,6 +661,7 @@ impl PropertiesPanel { right: 6.0, }) .input_style(combo_input_style) + .on_open(Message::PropColorPickerClose) .width(Length::Fill); prop_row_widget(label, combo.into())