Use explicit workspace mutation requests for window sync

This commit is contained in:
2026-04-26 00:25:49 +08:00
parent 5b6c46d382
commit c62a7fec0a
10 changed files with 130 additions and 23 deletions

View File

@@ -78,21 +78,39 @@ EditorWindowSynchronizationPlan EditorWindowSystem::BuildPlanForLiveWindowMutati
const std::vector<EditorWindowHostSnapshot>& hostWindows,
std::wstring_view primaryWindowTitle,
std::string& outError) const {
if (windowId.empty()) {
outError = "live window mutation missing window id";
EditorWindowWorkspaceMutationRequest request = {};
request.windowState.windowId = std::string(windowId);
request.windowState.workspace = workspaceController.GetWorkspace();
request.windowState.session = workspaceController.GetSession();
return BuildPlanForWorkspaceMutationRequest(
request,
hostWindows,
primaryWindowTitle,
outError);
}
EditorWindowSynchronizationPlan EditorWindowSystem::BuildPlanForWorkspaceMutationRequest(
const EditorWindowWorkspaceMutationRequest& request,
const std::vector<EditorWindowHostSnapshot>& hostWindows,
std::wstring_view primaryWindowTitle,
std::string& outError) const {
if (!request.IsValid()) {
outError = "live window mutation request missing window id";
return {};
}
UIEditorWindowWorkspaceSet nextWindowSet = GetWindowSet();
UIEditorWindowWorkspaceState* existingState =
FindMutableUIEditorWindowWorkspaceState(nextWindowSet, windowId);
FindMutableUIEditorWindowWorkspaceState(nextWindowSet, request.windowState.windowId);
if (existingState == nullptr) {
outError = "live window mutation references unknown window '" + std::string(windowId) + "'";
outError =
"live window mutation references unknown window '" +
request.windowState.windowId + "'";
return {};
}
existingState->workspace = workspaceController.GetWorkspace();
existingState->session = workspaceController.GetSession();
existingState->workspace = request.windowState.workspace;
existingState->session = request.windowState.session;
return BuildPlanForWindowSet(
nextWindowSet,
hostWindows,