new_editor: revalidate same-window workspace mutations

This commit is contained in:
2026-04-17 22:12:01 +08:00
parent 0ef6d2a365
commit 066442cee5
2 changed files with 26 additions and 0 deletions

View File

@@ -234,6 +234,7 @@ UIEditorWindowWorkspaceOperationResult UIEditorWindowWorkspaceController::MovePa
}
if (sourceWindowId == targetWindowId) {
const UIEditorWindowWorkspaceSet windowSetBefore = m_windowSet;
UIEditorWindowWorkspaceState* window =
FindMutableUIEditorWindowWorkspaceState(m_windowSet, sourceWindowId);
if (window == nullptr) {
@@ -261,6 +262,17 @@ UIEditorWindowWorkspaceOperationResult UIEditorWindowWorkspaceController::MovePa
}
m_windowSet.activeWindowId = std::string(targetWindowId);
const UIEditorWindowWorkspaceValidationResult validation = ValidateState();
if (!validation.IsValid()) {
m_windowSet = windowSetBefore;
return BuildOperationResult(
UIEditorWindowWorkspaceOperationStatus::Rejected,
"Move produced invalid state: " + validation.message,
sourceWindowId,
targetWindowId,
panelId);
}
return BuildOperationResult(
UIEditorWindowWorkspaceOperationStatus::Changed,
"Panel moved within the same window.",
@@ -344,6 +356,7 @@ UIEditorWindowWorkspaceOperationResult UIEditorWindowWorkspaceController::DockPa
}
if (sourceWindowId == targetWindowId) {
const UIEditorWindowWorkspaceSet windowSetBefore = m_windowSet;
UIEditorWindowWorkspaceState* window =
FindMutableUIEditorWindowWorkspaceState(m_windowSet, sourceWindowId);
if (window == nullptr) {
@@ -372,6 +385,17 @@ UIEditorWindowWorkspaceOperationResult UIEditorWindowWorkspaceController::DockPa
}
m_windowSet.activeWindowId = std::string(targetWindowId);
const UIEditorWindowWorkspaceValidationResult validation = ValidateState();
if (!validation.IsValid()) {
m_windowSet = windowSetBefore;
return BuildOperationResult(
UIEditorWindowWorkspaceOperationStatus::Rejected,
"Dock produced invalid state: " + validation.message,
sourceWindowId,
targetWindowId,
panelId);
}
return BuildOperationResult(
UIEditorWindowWorkspaceOperationStatus::Changed,
"Panel docked within the same window.",