respect ph.dwHow on SetProperty and some other transfers from joystick_linux.c

Daniel Remenak dtremenak at gmail.com
Thu Oct 6 14:30:48 CDT 2005


> @@ -859,15 +939,14 @@
>      JoystickImpl *This = (JoystickImpl *)iface;
>      int                xfd = This->joyfd;
>      int                i,axes,buttons;
> -    int                wasacquired = 1;
>
>      TRACE("%p->(%p)\n",iface,lpDIDevCaps);
> -    if (xfd==-1) {
> +
>         /* yes, games assume we return something, even if unacquired */
> -       JoystickAImpl_Acquire(iface);
> -       xfd = This->joyfd;
> -       wasacquired = 0;
> +       if (xfd==-1) {
> +               IDirectInputDevice8_Acquire(iface);
>      }
> +
>      lpDIDevCaps->dwFlags       = DIDC_ATTACHED;
>      if (This->dinput->dwVersion >= 0x0800)
>          lpDIDevCaps->dwDevType = DI8DEVTYPE_JOYSTICK | (DI8DEVTYPEJOYSTICK_STANDARD << 8);
> @@ -885,15 +964,20 @@
>      lpDIDevCaps->dwAxes = axes;
>      lpDIDevCaps->dwButtons = buttons;
>
> -    if (!wasacquired)
> -       JoystickAImpl_Unacquire(iface);
> +       if (xfd==-1) {
> +               IDirectInputDevice8_Unacquire(iface);
> +       }
>
>      return DI_OK;
>  }
>

What's up with the change from JoystickAImpl_Acquire to
IDirectInputDevice8_Acquire?

It will break this function; in the middle of GetCapabilities is

    axes=0;
    for (i=0;i<ABS_MAX;i++) if (test_bit(This->absbits,i)) axes++;
    buttons=0;
    for (i=0;i<KEY_MAX;i++) if (test_bit(This->keybits,i)) buttons++;

    if (This->has_ff)
	 lpDIDevCaps->dwFlags |= DIDC_FORCEFEEDBACK;

absbits, keybits, and has_ff are all set properly only when the
joystick is acquired with JoystickAImpl_Acquire.  absbits and keybits
are also set during joydev_have, but if you have more than one device
they may not be set for the correct device unless you explicitly
acquire it.  has_ff is not set at all until the stick is acquired.



More information about the wine-devel mailing list