Harden editor app windowing boundary

This commit is contained in:
2026-04-26 16:01:07 +08:00
parent f4afaf184e
commit ac626d48c4
31 changed files with 473 additions and 553 deletions

View File

@@ -56,6 +56,23 @@ const UIEditorWindowWorkspaceState* EditorWindowSystem::FindWindowState(
return FindUIEditorWindowWorkspaceState(GetWindowSet(), windowId);
}
bool EditorWindowSystem::TryBuildLiveWindowWorkspaceController(
std::string_view windowId,
UIEditorWorkspaceController& outController) {
UIEditorWindowWorkspaceState* const windowState =
m_workspaceStore->FindMutableWindowState(windowId);
if (windowState == nullptr) {
outController = {};
return false;
}
outController = UIEditorWorkspaceController::BindToState(
GetPanelRegistry(),
windowState->workspace,
windowState->session);
return true;
}
UIEditorWindowWorkspaceController EditorWindowSystem::BuildWorkspaceMutationController() const {
return UIEditorWindowWorkspaceController(GetPanelRegistry(), GetWindowSet());
}
@@ -78,37 +95,6 @@ EditorWindowSynchronizationPlan EditorWindowSystem::BuildPlanForWindowSet(
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, request.windowState.windowId);
if (existingState == nullptr) {
outError =
"live window mutation references unknown window '" +
request.windowState.windowId + "'";
return {};
}
existingState->workspace = request.windowState.workspace;
existingState->session = request.windowState.session;
return BuildPlanForWindowSet(
nextWindowSet,
hostWindows,
primaryWindowTitle,
{},
{},
outError);
}
EditorWindowSynchronizationPlan EditorWindowSystem::BuildPlanForDestroyedWindow(
std::string_view windowId,
const std::vector<EditorWindowHostSnapshot>& hostWindows,