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

@@ -1,5 +1,7 @@
#include "Windowing/EditorWindowManager.h"
#include "Windowing/Content/EditorWindowContentController.h"
#include "Windowing/Content/EditorWindowContentFactory.h"
#include "Windowing/Coordinator/EditorWindowLifecycleCoordinator.h"
#include "Windowing/Coordinator/EditorUtilityWindowCoordinator.h"
#include "Windowing/Coordinator/EditorWindowWorkspaceCoordinator.h"
@@ -16,10 +18,16 @@ EditorWindowManager::EditorWindowManager(
EditorWindowHostRuntimeServices& hostRuntime)
: m_editorContext(editorContext)
, m_hostRuntime(hostRuntime) {
m_contentFactory = CreateDefaultEditorWindowContentFactory(windowSystem);
m_workspaceCoordinator =
std::make_unique<EditorWindowWorkspaceCoordinator>(m_hostRuntime, windowSystem);
std::make_unique<EditorWindowWorkspaceCoordinator>(
m_hostRuntime,
windowSystem,
*m_contentFactory);
m_utilityCoordinator =
std::make_unique<EditorUtilityWindowCoordinator>(m_hostRuntime);
std::make_unique<EditorUtilityWindowCoordinator>(
m_hostRuntime,
*m_contentFactory);
m_lifecycleCoordinator = std::make_unique<EditorWindowLifecycleCoordinator>(
m_hostRuntime,
*m_workspaceCoordinator);
@@ -33,8 +41,19 @@ EditorWindowManager::~EditorWindowManager() = default;
EditorHostWindow* EditorWindowManager::CreateWorkspaceWindow(
const UIEditorWindowWorkspaceState& windowState,
const EditorWindowCreateParams& params) {
EditorHostWindow* const window =
m_hostRuntime.CreateWorkspaceWindow(windowState, params);
if (m_contentFactory == nullptr) {
return nullptr;
}
if (windowState.windowId.empty()) {
return nullptr;
}
if (!params.windowId.empty() && windowState.windowId != params.windowId) {
return nullptr;
}
EditorHostWindow* const window = m_hostRuntime.CreateHostWindow(
m_contentFactory->CreateWorkspaceContentController(windowState),
params);
if (window != nullptr) {
m_workspaceCoordinator->RegisterExistingWindow(*window);
}
@@ -44,7 +63,13 @@ EditorHostWindow* EditorWindowManager::CreateWorkspaceWindow(
EditorHostWindow* EditorWindowManager::CreateUtilityWindow(
const EditorUtilityWindowDescriptor& descriptor,
const EditorWindowCreateParams& params) {
EditorHostWindow* const window = m_hostRuntime.CreateUtilityWindow(descriptor, params);
if (m_contentFactory == nullptr) {
return nullptr;
}
EditorHostWindow* const window = m_hostRuntime.CreateHostWindow(
m_contentFactory->CreateUtilityContentController(descriptor),
params);
if (window != nullptr) {
m_workspaceCoordinator->RegisterExistingWindow(*window);
}