diff --git a/Source/OpenTK/Platform/MacOS/Application.cs b/Source/OpenTK/Platform/MacOS/Application.cs index ba2ccdc4..5c649787 100644 --- a/Source/OpenTK/Platform/MacOS/Application.cs +++ b/Source/OpenTK/Platform/MacOS/Application.cs @@ -40,8 +40,21 @@ namespace OpenTK.Platform.MacOS.Carbon API.Gestalt(GestaltSelector.SystemVersionBugFix, out osBugfix); Debug.Print("Running on Mac OS X {0}.{1}.{2}.", osMajor, osMinor, osBugfix); + + TransformProcessToForeground(); } + private static void TransformProcessToForeground() + { + Carbon.ProcessSerialNumber psn = new ProcessSerialNumber(); + + Debug.Print("Setting process to be foreground application."); + + API.GetCurrentProcess(ref psn); + API.TransformProcessType(ref psn, ProcessApplicationTransformState.kProcessTransformToForegroundApplication); + API.SetFrontProcess(ref psn); + } + internal static CarbonGLNative WindowEventHandler { get { return eventHandler; } diff --git a/Source/OpenTK/Platform/MacOS/CarbonBindings/CarbonAPI.cs b/Source/OpenTK/Platform/MacOS/CarbonBindings/CarbonAPI.cs index 1e7bc61a..117dc84f 100644 --- a/Source/OpenTK/Platform/MacOS/CarbonBindings/CarbonAPI.cs +++ b/Source/OpenTK/Platform/MacOS/CarbonBindings/CarbonAPI.cs @@ -388,8 +388,22 @@ namespace OpenTK.Platform.MacOS.Carbon }; #endregion + #region --- Process Manager --- - enum HICoordinateSpace + enum ProcessApplicationTransformState : int + { + kProcessTransformToForegroundApplication = 1, + } + + struct ProcessSerialNumber + { + public ulong high; + public ulong low; + } + + #endregion + + enum HICoordinateSpace { _72DPIGlobal = 1, ScreenPixel = 2, @@ -756,8 +770,18 @@ namespace OpenTK.Platform.MacOS.Carbon internal static extern void DisposeEventHandlerUPP(IntPtr userUPP); #endregion + #region --- Process Manager --- - [DllImport(carbon)] + [DllImport(carbon)] + internal static extern int TransformProcessType(ref Carbon.ProcessSerialNumber psn, ProcessApplicationTransformState type); + [DllImport(carbon)] + internal static extern int GetCurrentProcess(ref Carbon.ProcessSerialNumber psn); + [DllImport(carbon)] + internal static extern int SetFrontProcess(ref Carbon.ProcessSerialNumber psn); + + #endregion + + [DllImport(carbon)] static extern IntPtr GetControlBounds(IntPtr control, out Rect bounds); internal static Rect GetControlBounds(IntPtr control)