new_editor: fix detached multi-tab tab dragging
This commit is contained in:
@@ -466,52 +466,65 @@ bool EditorWindowWorkspaceCoordinator::TryStartGlobalTabDrag(
|
||||
request.screenPoint,
|
||||
dragHotspot);
|
||||
|
||||
if (sourceWindow.IsPrimary()) {
|
||||
UIEditorWindowWorkspaceController windowWorkspaceController =
|
||||
BuildLiveWindowWorkspaceController(sourceWindow.GetWindowId());
|
||||
const UIEditorWindowWorkspaceOperationResult result =
|
||||
windowWorkspaceController.DetachPanelToNewWindow(
|
||||
sourceWindow.GetWindowId(),
|
||||
request.nodeId,
|
||||
request.panelId);
|
||||
if (result.status != UIEditorWindowWorkspaceOperationStatus::Changed) {
|
||||
const auto tryStartDetachedPanelGlobalDrag =
|
||||
[this, &request, &dragHotspot](
|
||||
UIEditorWindowWorkspaceController& windowWorkspaceController,
|
||||
const UIEditorWindowWorkspaceOperationResult& result) {
|
||||
if (!SynchronizeWindowsFromController(
|
||||
windowWorkspaceController,
|
||||
result.targetWindowId,
|
||||
request.screenPoint)) {
|
||||
LogRuntimeTrace("drag", "failed to synchronize detached drag window state");
|
||||
return false;
|
||||
}
|
||||
|
||||
EditorWindow* detachedWindow = m_hostRuntime.FindWindow(result.targetWindowId);
|
||||
if (!IsLiveInteractiveWindow(detachedWindow)) {
|
||||
LogRuntimeTrace("drag", "detached drag window was not created.");
|
||||
return false;
|
||||
}
|
||||
|
||||
BeginGlobalTabDragSession(
|
||||
detachedWindow->GetWindowId(),
|
||||
detachedWindow->GetWorkspaceController().GetWorkspace().root.nodeId,
|
||||
request.panelId,
|
||||
request.screenPoint,
|
||||
dragHotspot);
|
||||
UpdateGlobalTabDragOwnerWindowPosition();
|
||||
SetCapture(detachedWindow->GetHwnd());
|
||||
SetForegroundWindow(detachedWindow->GetHwnd());
|
||||
LogRuntimeTrace(
|
||||
"drag",
|
||||
"failed to start global tab drag from primary window: " + result.message);
|
||||
return false;
|
||||
}
|
||||
"started global tab drag by detaching panel '" + request.panelId +
|
||||
"' into window '" + std::string(detachedWindow->GetWindowId()) + "'");
|
||||
return true;
|
||||
};
|
||||
|
||||
if (!SynchronizeWindowsFromController(
|
||||
windowWorkspaceController,
|
||||
result.targetWindowId,
|
||||
request.screenPoint)) {
|
||||
LogRuntimeTrace("drag", "failed to synchronize detached drag window state");
|
||||
return false;
|
||||
}
|
||||
UIEditorWindowWorkspaceController windowWorkspaceController =
|
||||
BuildLiveWindowWorkspaceController(sourceWindow.GetWindowId());
|
||||
const UIEditorWindowWorkspaceOperationResult result =
|
||||
windowWorkspaceController.DetachPanelToNewWindow(
|
||||
sourceWindow.GetWindowId(),
|
||||
request.nodeId,
|
||||
request.panelId);
|
||||
if (result.status == UIEditorWindowWorkspaceOperationStatus::Changed) {
|
||||
return tryStartDetachedPanelGlobalDrag(windowWorkspaceController, result);
|
||||
}
|
||||
|
||||
EditorWindow* detachedWindow = m_hostRuntime.FindWindow(result.targetWindowId);
|
||||
if (!IsLiveInteractiveWindow(detachedWindow)) {
|
||||
LogRuntimeTrace("drag", "detached drag window was not created.");
|
||||
return false;
|
||||
}
|
||||
|
||||
BeginGlobalTabDragSession(
|
||||
detachedWindow->GetWindowId(),
|
||||
detachedWindow->GetWorkspaceController().GetWorkspace().root.nodeId,
|
||||
request.panelId,
|
||||
request.screenPoint,
|
||||
dragHotspot);
|
||||
UpdateGlobalTabDragOwnerWindowPosition();
|
||||
SetCapture(detachedWindow->GetHwnd());
|
||||
SetForegroundWindow(detachedWindow->GetHwnd());
|
||||
if (sourceWindow.IsPrimary()) {
|
||||
LogRuntimeTrace(
|
||||
"drag",
|
||||
"started global tab drag by detaching panel '" + request.panelId +
|
||||
"' into window '" + std::string(detachedWindow->GetWindowId()) + "'");
|
||||
return true;
|
||||
"failed to start global tab drag from primary window: " + result.message);
|
||||
return false;
|
||||
}
|
||||
|
||||
sourceWindow.ResetInteractionState();
|
||||
if (result.status != UIEditorWindowWorkspaceOperationStatus::NoOp) {
|
||||
LogRuntimeTrace(
|
||||
"drag",
|
||||
"failed to start global tab drag from detached window: " + result.message);
|
||||
return false;
|
||||
}
|
||||
if (!CanStartGlobalTabDragFromWindow(sourceWindow, request.nodeId, request.panelId)) {
|
||||
LogRuntimeTrace(
|
||||
"drag",
|
||||
|
||||
Reference in New Issue
Block a user