diff --git a/src/app/update/command.rs b/src/app/update/command.rs index 09a2dd977..510aaa60c 100644 --- a/src/app/update/command.rs +++ b/src/app/update/command.rs @@ -879,6 +879,9 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task { if let Some(idx) = self.tabs[i].layers.selected { if let Some(layer) = self.tabs[i].layers.layers.get(idx) { let name = layer.name.clone(); + if name == self.tabs[i].layers.current_layer { + return Task::none(); + } // Mirror the change into the document header (CLAYER) too, // not just the per-tab default. Otherwise the no-selection // ribbon refresh (e.g. after Esc) re-reads the stale header diff --git a/src/ui/window/layers.rs b/src/ui/window/layers.rs index 43c6cacdb..5499e75ad 100644 --- a/src/ui/window/layers.rs +++ b/src/ui/window/layers.rs @@ -328,6 +328,10 @@ impl LayerPanel { .selected .map(|i| self.layers.get(i).map(|l| l.name == "0").unwrap_or(false)) .unwrap_or(false); + let can_set_current = self + .selected + .and_then(|i| self.layers.get(i)) + .is_some_and(|layer| layer.name != self.current_layer); // ── Toolbar ─────────────────────────────────────────────────────── let toolbar = container( @@ -343,7 +347,7 @@ impl LayerPanel { crate::ui::icons::CHECK, t!("Set Current"), Message::LayerSetCurrent, - has_sel, + can_set_current, ), iced::widget::Space::new().width(sizing.width), // Search box: filters rows by name as the user types (#343).