diff --git a/Source/OpenTK/Platform/SDL2/Sdl2.cs b/Source/OpenTK/Platform/SDL2/Sdl2.cs
index 5aa6dad4..5d0cde57 100644
--- a/Source/OpenTK/Platform/SDL2/Sdl2.cs
+++ b/Source/OpenTK/Platform/SDL2/Sdl2.cs
@@ -116,22 +116,11 @@ namespace OpenTK.Platform.SDL2
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_FreeSurface", ExactSpelling = true)]
public static extern void FreeSurface(IntPtr surface);
- [SuppressUnmanagedCodeSecurity]
- [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerName", ExactSpelling = true)]
- static extern IntPtr GameControllerNameInternal(IntPtr gamecontroller);
+ #region GameContoller
- ///
- /// Return the name for an openend game controller instance.
- ///
- /// The name of the game controller name.
- /// Pointer to a game controller instance returned by GameControllerOpen.
- public static string GameControllerName(IntPtr gamecontroller)
- {
- unsafe
- {
- return new string((sbyte*)GameControllerNameInternal(gamecontroller));
- }
- }
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerEventState", ExactSpelling = true)]
+ public static extern EventState GameControllerEventState(EventState state);
[SuppressUnmanagedCodeSecurity]
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetAxis", ExactSpelling = true)]
@@ -177,6 +166,27 @@ namespace OpenTK.Platform.SDL2
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerGetJoystick", ExactSpelling = true)]
public static extern IntPtr GameControllerGetJoystick(IntPtr gamecontroller);
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetCurrentDisplayMode", ExactSpelling = true)]
+ public static extern int GetCurrentDisplayMode(int displayIndex, out DisplayMode mode);
+
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerName", ExactSpelling = true)]
+ static extern IntPtr GameControllerNameInternal(IntPtr gamecontroller);
+
+ ///
+ /// Return the name for an openend game controller instance.
+ ///
+ /// The name of the game controller name.
+ /// Pointer to a game controller instance returned by GameControllerOpen.
+ public static string GameControllerName(IntPtr gamecontroller)
+ {
+ unsafe
+ {
+ return new string((sbyte*)GameControllerNameInternal(gamecontroller));
+ }
+ }
+
///
/// Opens a game controller for use.
///
@@ -189,9 +199,7 @@ namespace OpenTK.Platform.SDL2
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GameControllerOpen", ExactSpelling = true)]
public static extern IntPtr GameControllerOpen(int joystick_index);
- [SuppressUnmanagedCodeSecurity]
- [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetCurrentDisplayMode", ExactSpelling = true)]
- public static extern int GetCurrentDisplayMode(int displayIndex, out DisplayMode mode);
+ #endregion
[SuppressUnmanagedCodeSecurity]
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_GetDisplayBounds", ExactSpelling = true)]
@@ -280,6 +288,10 @@ namespace OpenTK.Platform.SDL2
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickClose", ExactSpelling = true)]
public static extern void JoystickClose(IntPtr joystick);
+ [SuppressUnmanagedCodeSecurity]
+ [DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickEventState", ExactSpelling = true)]
+ public static extern EventState JoystickEventState(EventState enabled);
+
[SuppressUnmanagedCodeSecurity]
[DllImport(lib, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SDL_JoystickGetAxis", ExactSpelling = true)]
public static extern short JoystickGetAxis(IntPtr joystick, int axis);
@@ -545,6 +557,13 @@ namespace OpenTK.Platform.SDL2
ES = 0x0004
}
+ enum EventState
+ {
+ Query = -1,
+ Ignore = 0,
+ Enable = 1
+ }
+
enum EventType
{
FIRSTEVENT = 0,
diff --git a/Source/OpenTK/Platform/SDL2/Sdl2InputDriver.cs b/Source/OpenTK/Platform/SDL2/Sdl2InputDriver.cs
index 023af9a2..f5df4654 100644
--- a/Source/OpenTK/Platform/SDL2/Sdl2InputDriver.cs
+++ b/Source/OpenTK/Platform/SDL2/Sdl2InputDriver.cs
@@ -55,6 +55,9 @@ namespace OpenTK.Platform.SDL2
{
lock (SDL.Sync)
{
+ SDL.GameControllerEventState(EventState.Enable);
+ SDL.JoystickEventState(EventState.Enable);
+
EventFilterDelegate = Marshal.GetFunctionPointerForDelegate(EventFilterDelegate_GCUnsafe);
driver_handle = new IntPtr(count++);
DriverHandles.Add(driver_handle, this);