Files
GameDevTVObstacleDodge/Library/PackageCache/com.unity.collab-proxy@1ec4e416a4af/Editor/UI/RunModal.cs

120 lines
4.1 KiB
C#
Raw Normal View History

2026-01-08 16:50:20 +00:00
using System.Reflection;
using UnityEditorWindow = UnityEditor.EditorWindow;
#if !UNITY_6000_0_OR_NEWER
using Unity.PlasticSCM.Editor.UnityInternals.UnityEditor;
using EditorWindow = Unity.PlasticSCM.Editor.UnityInternals.UnityEditor.EditorWindow;
#else
using UnityEditor;
using EditorWindow = UnityEditor.EditorWindow;
#endif
namespace Unity.PlasticSCM.Editor.UI
{
internal static class RunModal
{
static RunModal()
{
InitializeInfo();
}
internal static void Dialog(UnityEditorWindow window)
{
ShowAsUtility(window);
SavedGUIState savedGUIState = CreateSavedGUIState();
PushDispatcherContext(window);
MakeModal(window);
PopDispatcherContext(window);
ApplySavedGUIState(savedGUIState);
}
static void MakeModal(UnityEditorWindow window)
{
// MakeModal(m_Parent.window);
#if !UNITY_6000_0_OR_NEWER
HostView hostView = window.m_Parent();
#else
HostView hostView = window.m_Parent;
#endif
ContainerWindow parentWindow = hostView.window;
EditorWindow.Internal_MakeModal(parentWindow);
}
static void ShowAsUtility(UnityEditorWindow window)
{
// ShowWithMode(ShowMode.Utility);
#if !UNITY_6000_0_OR_NEWER
window.ShowWithMode(2);
#else
window.ShowWithMode((ShowMode)2);
#endif
}
static SavedGUIState CreateSavedGUIState()
{
// SavedGUIState guiState = SavedGUIState.Create();
return SavedGUIState.Create();
}
static void ApplySavedGUIState(SavedGUIState savedGUIState)
{
// guiState.ApplyAndForget();
savedGUIState.ApplyAndForget();
}
static void PopDispatcherContext(UnityEditorWindow window)
{
//UnityEngine.UIElements.EventDispatcher.editorDispatcher.PopDispatcherContext();
object editorDispatcher = mEditorDispatcherProp2020.GetValue(null);
mPopContextMethod2020.Invoke(editorDispatcher, null);
}
static void PushDispatcherContext(UnityEditorWindow window)
{
//UnityEngine.UIElements.EventDispatcher.editorDispatcher.PushDispatcherContext();
object editorDispatcher = mEditorDispatcherProp2020.GetValue(null);
mPushContextMethod2020.Invoke(editorDispatcher, null);
}
static void InitializeInfo()
{
var flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static;
mEditorDispatcherProp2020 = typeof(UnityEngine.UIElements.EventDispatcher).GetProperty("editorDispatcher", flags);
mPushContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PushDispatcherContext", flags);
mPopContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PopDispatcherContext", flags);
}
static PropertyInfo mEditorDispatcherProp2020;
static MethodInfo mPushContextMethod2020;
static MethodInfo mPopContextMethod2020;
// // How ContainerWindows are visualized. Used with ContainerWindow.Show
// internal enum ShowMode
// {
// // Show as a normal window with max, min & close buttons.
// NormalWindow = 0,
// // Used for a popup menu. On mac this means light shadow and no titlebar.
// PopupMenu = 1,
// // Utility window - floats above the app. Disappears when app loses focus.
// Utility = 2,
// // Window has no shadow or decorations. Used internally for dragging stuff around.
// NoShadow = 3,
// // The Unity main window. On mac, this is the same as NormalWindow, except window doesn't have a close button.
// MainWindow = 4,
// // Aux windows. The ones that close the moment you move the mouse out of them.
// AuxWindow = 5,
// // Like PopupMenu, but without keyboard focus
// cm-help.es.txtTooltip = 6
// }
}
}