fix(layers): key rename and picker state by name, not row

LayerPanel.editing and color_picker_row were positional indices, so a sort/sync/filter between start and commit retargeted renames and swatches. Both are Option<String> now; commit resolves fresh with graceful no-op on deleted layers. Existing rename tests migrated. Tests: layer_rename_commit_follows_name_across_resort (RED first) plus deleted/empty no-op and picker-resort pins. Full suite: 2019 passed / 0 failed / 25 ignored.
This commit is contained in:
Karim Jerbi committed 2026-10-09 21:22:47 +01:00
1 parent 2d3077e29d
commit 6d6a8b1439
3 files changed
+158 -37

No files matched your search

+4 -6
View File
@@ -3612,10 +3612,8 @@ impl OpenCADStudio {
};
self.tabs[i].layers.selected = Some(idx);
self.tabs[i].layers.selected_multi = vec![idx];
if let Some(layer) = self.tabs[i].layers.layers.get(idx) {
self.tabs[i].layers.edit_buf = layer.name.clone();
}
self.tabs[i].layers.editing = Some(idx);
self.tabs[i].layers.edit_buf = name.clone();
self.tabs[i].layers.editing = Some(name);
Task::none()
}
@@ -3633,11 +3631,11 @@ impl OpenCADStudio {
return Task::none();
};
let panel = &mut self.tabs[i].layers;
if panel.color_picker_row == Some(idx) {
if panel.color_picker_row.as_deref() == Some(name.as_str()) {
panel.color_picker_row = None;
panel.color_full_palette = false;
} else {
panel.color_picker_row = Some(idx);
panel.color_picker_row = Some(name);
panel.color_full_palette = false;
panel.selected = Some(idx);
// Opening the swatch on a row outside the current