Added documentation that the UIApplicationSupportsIndirectInputEvents key must be set to true

in your application's Info.plist in order to get real Bluetooth mouse events.
This commit is contained in:
Sam Lantinga 2021-11-09 20:32:16 -08:00
parent a7e2e3a329
commit 19c129faba
4 changed files with 39 additions and 19 deletions

View File

@ -8,6 +8,10 @@ This is a list of major changes in SDL's version history.
Android: Android:
* Added support for audio output and capture using AAudio * Added support for audio output and capture using AAudio
iOS:
* Added documentation that the UIApplicationSupportsIndirectInputEvents key must be set to true in your application's Info.plist in order to get real Bluetooth mouse events.
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
2.0.16: 2.0.16:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View File

@ -30,5 +30,7 @@
<string>iOS Launch Screen</string> <string>iOS Launch Screen</string>
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array/> <array/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict> </dict>
</plist> </plist>

View File

@ -191,6 +191,12 @@ SDL_bool SDL_IsTextInputActive()
-- returns whether or not text events are enabled (and the onscreen keyboard is visible) -- returns whether or not text events are enabled (and the onscreen keyboard is visible)
Notes -- Mouse
==============================================================================
iOS now supports Bluetooth mice on iPad, but by default will provide the mouse input as touch. In order for SDL to see the real mouse events, you should set the key UIApplicationSupportsIndirectInputEvents to true in your Info.plist
Notes -- Reading and Writing files Notes -- Reading and Writing files
============================================================================== ==============================================================================

View File

@ -268,29 +268,37 @@ void SDL_InitGCMouse(void)
@autoreleasepool { @autoreleasepool {
/* There is a bug where mouse accumulates duplicate deltas over time in iOS 14.0 */ /* There is a bug where mouse accumulates duplicate deltas over time in iOS 14.0 */
if (@available(iOS 14.1, tvOS 14.1, *)) { if (@available(iOS 14.1, tvOS 14.1, *)) {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; /* iOS will not send the new pointer touch events if you don't have this key,
* and we need them to differentiate between mouse events and real touch events.
*/
BOOL indirect_input_available = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIApplicationSupportsIndirectInputEvents"] boolValue];
if (indirect_input_available) {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
mouse_connect_observer = [center addObserverForName:GCMouseDidConnectNotification mouse_connect_observer = [center addObserverForName:GCMouseDidConnectNotification
object:nil object:nil
queue:nil queue:nil
usingBlock:^(NSNotification *note) { usingBlock:^(NSNotification *note) {
GCMouse *mouse = note.object; GCMouse *mouse = note.object;
OnGCMouseConnected(mouse); OnGCMouseConnected(mouse);
}]; }];
mouse_disconnect_observer = [center addObserverForName:GCMouseDidDisconnectNotification mouse_disconnect_observer = [center addObserverForName:GCMouseDidDisconnectNotification
object:nil object:nil
queue:nil queue:nil
usingBlock:^(NSNotification *note) { usingBlock:^(NSNotification *note) {
GCMouse *mouse = note.object; GCMouse *mouse = note.object;
OnGCMouseDisconnected(mouse); OnGCMouseDisconnected(mouse);
}]; }];
for (GCMouse *mouse in [GCMouse mice]) { for (GCMouse *mouse in [GCMouse mice]) {
OnGCMouseConnected(mouse); OnGCMouseConnected(mouse);
}
SDL_GetMouse()->SetRelativeMouseMode = SetGCMouseRelativeMode;
} else {
NSLog(@"You need UIApplicationSupportsIndirectInputEvents in your Info.plist for mouse support");
} }
SDL_GetMouse()->SetRelativeMouseMode = SetGCMouseRelativeMode;
} }
} }
} }