public static bool TryGetWindowLocker(Type windowType, out EditorWindowLocker locker) { if (typeof(EditorWindow).IsAssignableFrom(windowType) && GetLockTrackerField(windowType) != null) { locker = new EditorWindowLocker(windowType); return(true); } locker = null; return(false); }
public static void CloneWindow() { var window = EditorWindow.focusedWindow; var newWindow = UnityEngine.Object.Instantiate(window); var windowType = newWindow.GetType(); if (!_cachedLockers.TryGetValue(windowType, out var locker)) { if (EditorWindowLocker.TryGetWindowLocker(windowType, out locker)) { _cachedLockers[windowType] = locker; } } locker?.LockWindow(newWindow, true); newWindow.Show(); SetupRect(newWindow, window.position); }