fix(layer): centralize rename flow

This commit is contained in:
Hakan Seven committed 2026-08-15 19:56:35 +03:00
1 parent b4da342f0e
commit 6cc1bf9755
10 files changed
+92 -107

No files matched your search

+17 -2
View File
@@ -223,6 +223,7 @@ impl OpenCADStudio {
selected_after: selected,
dirty_before,
dirty_after: true,
active_layer: None,
structure: (!objects.is_empty()).then_some(StructureSnapshot::Objects(objects)),
label: label.into(),
};
@@ -313,10 +314,12 @@ impl OpenCADStudio {
.collect();
let selected_after: Vec<Handle> = self.tabs[i].scene.selected.iter().copied().collect();
let dirty_after = self.tabs[i].dirty;
let active_layer_after = self.tabs[i].active_layer.clone();
if entities.is_empty()
&& !structure_changed
&& pending.selected_before == selected_after
&& pending.dirty_before == dirty_after
&& pending.active_layer == active_layer_after
{
return;
}
@@ -328,6 +331,8 @@ impl OpenCADStudio {
selected_after,
dirty_before: pending.dirty_before,
dirty_after,
active_layer: (pending.active_layer != active_layer_after)
.then_some((pending.active_layer, active_layer_after)),
structure: structure_changed.then_some(StructureSnapshot::Full(pending.structure_before)),
label: pending.label,
};
@@ -351,6 +356,7 @@ impl OpenCADStudio {
self.tabs[i].history.pending = Some(PendingHistorySnapshot {
label,
current_layout,
active_layer: self.tabs[i].active_layer.clone(),
selected_before,
dirty_before,
structure_before,
@@ -433,6 +439,7 @@ impl OpenCADStudio {
selected_after,
dirty_before: pending.dirty_before,
dirty_after: self.tabs[i].dirty,
active_layer: None,
structure: Some(StructureSnapshot::Layers(entries)),
label: pending.label,
};
@@ -487,6 +494,7 @@ impl OpenCADStudio {
selected_after: self.tabs[i].scene.selected.iter().copied().collect(),
dirty_before: pending.dirty_before,
dirty_after: self.tabs[i].dirty,
active_layer: None,
structure: Some(StructureSnapshot::TextStyles(entries)),
label: pending.label,
};
@@ -541,6 +549,7 @@ impl OpenCADStudio {
selected_after: self.tabs[i].scene.selected.iter().copied().collect(),
dirty_before: pending.dirty_before,
dirty_after: self.tabs[i].dirty,
active_layer: None,
structure: Some(StructureSnapshot::DimStyles(entries)),
label: pending.label,
};
@@ -603,6 +612,7 @@ impl OpenCADStudio {
selected_after: self.tabs[i].scene.selected.iter().copied().collect(),
dirty_before: pending.dirty_before,
dirty_after: self.tabs[i].dirty,
active_layer: None,
structure: Some(StructureSnapshot::Objects(entries)),
label: pending.label,
};
@@ -629,6 +639,7 @@ impl OpenCADStudio {
selected_after: self.tabs[i].scene.selected.iter().copied().collect(),
dirty_before,
dirty_after: true,
active_layer: None,
structure: Some(StructureSnapshot::Styles {
before,
after,
@@ -754,6 +765,7 @@ impl OpenCADStudio {
selected_after,
dirty_before: pending.dirty_before,
dirty_after,
active_layer: None,
structure,
label: pending.label,
};
@@ -908,6 +920,9 @@ impl OpenCADStudio {
} else {
d.current_layout_after.clone()
};
if let Some((before, after)) = &d.active_layer {
self.tabs[i].active_layer = if undo { before } else { after }.clone();
}
self.tabs[i].dirty = dirty;
changes
}
@@ -1055,7 +1070,7 @@ impl OpenCADStudio {
structure,
StructureSnapshot::Full(_) | StructureSnapshot::Layers(_)
)
}) || d.entities.iter().any(|(_, before, after)| {
}) || d.active_layer.is_some() || d.entities.iter().any(|(_, before, after)| {
before
.as_deref()
.is_some_and(|entity| matches!(entity, EntityType::Viewport(_)))
@@ -1110,7 +1125,7 @@ impl OpenCADStudio {
structure,
StructureSnapshot::Full(_) | StructureSnapshot::Layers(_)
)
}) || d.entities.iter().any(|(_, before, after)| {
}) || d.active_layer.is_some() || d.entities.iter().any(|(_, before, after)| {
before
.as_deref()
.is_some_and(|entity| matches!(entity, EntityType::Viewport(_)))