From af604625b3ee8e980ca102168b0f012724d1ca7d Mon Sep 17 00:00:00 2001 From: dotCooCoo Date: Wed, 4 Nov 2026 01:21:06 -0800 Subject: [PATCH] Panels: showing a hidden floating group returns its window's panels `window.panel` on a panel whose group was hidden returned the whole layout and every floating panel in every window. It now returns `{floating}` with the panels of the restored panel's window, as it does when it shows a panel that already floats. --- crates/ui-egui/src/panel_docking.rs | 9 +++++---- crates/ui-egui/src/panel_docking/tests.rs | 13 +++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/crates/ui-egui/src/panel_docking.rs b/crates/ui-egui/src/panel_docking.rs index 9d8c71538..0deb2c3c0 100644 --- a/crates/ui-egui/src/panel_docking.rs +++ b/crates/ui-egui/src/panel_docking.rs @@ -339,10 +339,11 @@ fn show_panel(app: &mut VectorcraftApp, params: &Value) -> Result if !layout.contains(&panel.to_string()) && !app.ui.docking_hidden.contains_key(panel) && crate::panels::library_panel::parse(panel).is_some() { return crate::panels::library_panel::float(app, panel); } - if app.ui.docking_hidden.contains_key(panel) { - return restore_hidden_group(app, panel); - } - let value = shared_command(app, "window.panel.activate", &json!({"panel": panel}))?; + let value = if app.ui.docking_hidden.contains_key(panel) { + restore_hidden_group(app, panel)? + } else { + shared_command(app, "window.panel.activate", &json!({"panel": panel}))? + }; let layout = layout_of(&app.ui); Ok(match floating_window(&layout, panel) { Some(window) => json!({"floating": window_panels(window)}), diff --git a/crates/ui-egui/src/panel_docking/tests.rs b/crates/ui-egui/src/panel_docking/tests.rs index 2bae524dd..f8287944b 100644 --- a/crates/ui-egui/src/panel_docking/tests.rs +++ b/crates/ui-egui/src/panel_docking/tests.rs @@ -612,6 +612,19 @@ fn f7_hides_and_restores_a_floating_tab_group() { assert!(showing(&h.app.ui, "layers")); } +#[test] +fn showing_a_hidden_floating_group_returns_its_window_panels() { + let mut h = Harness::new(); + h.app.run("window.panel.float", json!({"panel": "swatches"})).unwrap(); + h.app.run("window.panel.float", json!({"panel": "layers", "group": true})).unwrap(); + h.app.run("window.panel.activate", json!({"panel": "layers"})).unwrap(); + h.frame(vec![]); + h.press(egui::Key::F7, egui::Modifiers::NONE); + assert!(floating_window(&h.layout(), "layers").is_none()); + let reply = h.app.run("window.panel", json!({"panel": "layers"})).unwrap(); + assert_eq!(reply, json!({"floating": ["properties", "layers", "libraries"]}), "only the restored window's panels"); +} + #[test] fn f7_toggles_a_multi_tab_icon_flyout() { let mut h = Harness::new();