private static void CloseWindows(bool keepMainWindow)
{
try
{
// Close any existing tooltips
TooltipView.Close();
}
catch (Exception)
{
// ignored
}
// Close all container windows
ContainerWindow mainWindow = null;
UnityObject[] containers = Resources.FindObjectsOfTypeAll(typeof(ContainerWindow));
foreach (ContainerWindow window in containers)
{
try
{
if (window.showMode != ShowMode.MainWindow || !keepMainWindow || mainWindow != null)
{
window.Close();
UnityObject.DestroyImmediate(window, true);
}
else
{
UnityObject.DestroyImmediate(window.rootView, true);
window.rootView = null;
mainWindow = window;
}
}
catch (Exception)
{
// ignored
}
}
// Double check correct closing
UnityObject[] oldWindows = Resources.FindObjectsOfTypeAll(typeof(EditorWindow));
if (oldWindows.Length != 0)
{
string output = "";
foreach (EditorWindow killme in oldWindows)
{
output += "\n" + killme.GetType().Name;
UnityObject.DestroyImmediate(killme, true);
}
Debug.LogError("Failed to destroy editor windows: #" + oldWindows.Length + output);
}
UnityObject[] oldViews = Resources.FindObjectsOfTypeAll(typeof(View));
if (oldViews.Length != 0)
{
string output = "";
foreach (View killme in oldViews)
{
output += "\n" + killme.GetType().Name;
UnityObject.DestroyImmediate(killme, true);
}
Debug.LogError("Failed to destroy views: #" + oldViews.Length + output);
}
}