public void SwitchToWorkspace(IWorkspace targetWorkspace) { Logger.Debug("SwitchToWorkspace({0})", targetWorkspace); if (targetWorkspace != null) { var focusedMonitor = _context.MonitorContainer.FocusedMonitor; var destMonitor = _context.WorkspaceContainer.GetDesiredMonitorForWorkspace(targetWorkspace) ?? focusedMonitor; var currentWorkspace = _context.WorkspaceContainer.GetWorkspaceForMonitor(destMonitor); var sourceMonitor = _context.WorkspaceContainer.GetCurrentMonitorForWorkspace(targetWorkspace); if (targetWorkspace != currentWorkspace) { _lastWorkspace = currentWorkspace; _context.WorkspaceContainer.AssignWorkspaceToMonitor(currentWorkspace, sourceMonitor); _context.WorkspaceContainer.AssignWorkspaceToMonitor(targetWorkspace, destMonitor); currentWorkspace.DoLayout(); targetWorkspace.DoLayout(); WorkspaceUpdated?.Invoke(); targetWorkspace.FocusLastFocusedWindow(); } } }