|
@@ -658,38 +658,47 @@ SDL_SYS_HapticOpenFromDevice8(SDL_Haptic * haptic,
|
|
|
haptic->hwdata->device = device8;
|
|
|
haptic->hwdata->is_joystick = is_joystick;
|
|
|
|
|
|
- /* Grab it exclusively to use force feedback stuff. */
|
|
|
- ret = IDirectInputDevice8_SetCooperativeLevel(haptic->hwdata->device,
|
|
|
- SDL_HelperWindow,
|
|
|
- DISCL_EXCLUSIVE |
|
|
|
- DISCL_BACKGROUND);
|
|
|
- if (FAILED(ret)) {
|
|
|
- DI_SetError("Setting cooperative level to exclusive", ret);
|
|
|
- goto acquire_err;
|
|
|
- }
|
|
|
+ /* !!! FIXME: opening a haptic device here first will make an attempt to
|
|
|
+ !!! FIXME: SDL_JoystickOpen() that same device fail later, since we
|
|
|
+ !!! FIXME: have it open in exclusive mode. But this will allow
|
|
|
+ !!! FIXME: SDL_JoystickOpen() followed by SDL_HapticOpenFromJoystick()
|
|
|
+ !!! FIXME: to work, and that's probably the common case. Still,
|
|
|
+ !!! FIXME: ideally, We need to unify the opening code. */
|
|
|
+
|
|
|
+ if (!is_joystick) { /* if is_joystick, we already set this up elsewhere. */
|
|
|
+ /* Grab it exclusively to use force feedback stuff. */
|
|
|
+ ret = IDirectInputDevice8_SetCooperativeLevel(haptic->hwdata->device,
|
|
|
+ SDL_HelperWindow,
|
|
|
+ DISCL_EXCLUSIVE |
|
|
|
+ DISCL_BACKGROUND);
|
|
|
+ if (FAILED(ret)) {
|
|
|
+ DI_SetError("Setting cooperative level to exclusive", ret);
|
|
|
+ goto acquire_err;
|
|
|
+ }
|
|
|
|
|
|
- /* Set data format. */
|
|
|
- ret = IDirectInputDevice8_SetDataFormat(haptic->hwdata->device,
|
|
|
- &c_dfDIJoystick2);
|
|
|
- if (FAILED(ret)) {
|
|
|
- DI_SetError("Setting data format", ret);
|
|
|
- goto acquire_err;
|
|
|
- }
|
|
|
+ /* Set data format. */
|
|
|
+ ret = IDirectInputDevice8_SetDataFormat(haptic->hwdata->device,
|
|
|
+ &c_dfDIJoystick2);
|
|
|
+ if (FAILED(ret)) {
|
|
|
+ DI_SetError("Setting data format", ret);
|
|
|
+ goto acquire_err;
|
|
|
+ }
|
|
|
|
|
|
- /* Get number of axes. */
|
|
|
- ret = IDirectInputDevice8_EnumObjects(haptic->hwdata->device,
|
|
|
- DI_DeviceObjectCallback,
|
|
|
- haptic, DIDFT_AXIS);
|
|
|
- if (FAILED(ret)) {
|
|
|
- DI_SetError("Getting device axes", ret);
|
|
|
- goto acquire_err;
|
|
|
- }
|
|
|
+ /* Get number of axes. */
|
|
|
+ ret = IDirectInputDevice8_EnumObjects(haptic->hwdata->device,
|
|
|
+ DI_DeviceObjectCallback,
|
|
|
+ haptic, DIDFT_AXIS);
|
|
|
+ if (FAILED(ret)) {
|
|
|
+ DI_SetError("Getting device axes", ret);
|
|
|
+ goto acquire_err;
|
|
|
+ }
|
|
|
|
|
|
- /* Acquire the device. */
|
|
|
- ret = IDirectInputDevice8_Acquire(haptic->hwdata->device);
|
|
|
- if (FAILED(ret)) {
|
|
|
- DI_SetError("Acquiring DirectInput device", ret);
|
|
|
- goto acquire_err;
|
|
|
+ /* Acquire the device. */
|
|
|
+ ret = IDirectInputDevice8_Acquire(haptic->hwdata->device);
|
|
|
+ if (FAILED(ret)) {
|
|
|
+ DI_SetError("Acquiring DirectInput device", ret);
|
|
|
+ goto acquire_err;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Reset all actuators - just in case. */
|