Harden editor app windowing boundary
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user