list.winehq.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview
thread

Re:

Lucas Zawacki

21 Jul 2011 21 Jul '11
9:44 p.m.

Sorry, this is a duplicate for the [3/4] patch, you can disregard it. 2011/7/21 Lucas Fialho Zawacki <lfzawacki(a)gmail.com>:

...

---  dlls/dinput/joystick.c |   60 +++++++++++++++++++++++++++++++++++++++++++++++-  1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c index b5c028c..2d8a818 100644 --- a/dlls/dinput/joystick.c +++ b/dlls/dinput/joystick.c @@ -500,9 +500,67 @@ HRESULT WINAPI JoystickWGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8W iface,                                                  LPCWSTR lpszUserName,                                                  DWORD dwFlags)  { +    JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface); +    DIDATAFORMAT data_format; +    DIOBJECTDATAFORMAT *obj_df = NULL; +    int i, action = 0, num_actions = 0; +    unsigned int offset = 0; +     FIXME("(%p)->(%p,%s,%08x): semi-stub !\n", iface, lpdiaf, debugstr_w(lpszUserName), dwFlags);

-    return DI_NOEFFECT; +    if (This->base.acquired) return DIERR_ACQUIRED; + +    data_format.dwSize = sizeof(data_format); +    data_format.dwObjSize = sizeof(DIOBJECTDATAFORMAT); +    data_format.dwFlags = DIDF_RELAXIS; +    data_format.dwDataSize = lpdiaf->dwDataSize; + +    /* count the actions */ +    for (i=0; i < lpdiaf->dwNumActions; i++) +        if (IsEqualGUID(&This->base.guid, &lpdiaf->rgoAction[i].guidInstance)) +            num_actions++; + +    if (num_actions == 0) return DI_NOEFFECT; + +    This->base.num_actions = num_actions; + +    /* Construct the dataformat and actionmap */ +    obj_df = HeapAlloc(GetProcessHeap(), 0, sizeof(DIOBJECTDATAFORMAT)*num_actions); +    data_format.rgodf = (LPDIOBJECTDATAFORMAT)obj_df; +    data_format.dwNumObjs = num_actions; + +    This->base.action_map = HeapAlloc(GetProcessHeap(), 0, sizeof(ActionMap)*num_actions); + +    for (i = 0; i < lpdiaf->dwNumActions; i++) +    { +        if (IsEqualGUID(&This->base.guid, &lpdiaf->rgoAction[i].guidInstance)) +        { +            LPDIDATAFORMAT df = This->base.data_format.wine_df; +            DWORD inst = DIDFT_GETINSTANCE(lpdiaf->rgoAction[i].dwObjID); +            DWORD type = DIDFT_GETTYPE(lpdiaf->rgoAction[i].dwObjID); +            LPDIOBJECTDATAFORMAT obj; + +            if (type == DIDFT_PSHBUTTON) type = DIDFT_BUTTON; +            if (type == DIDFT_RELAXIS) type = DIDFT_AXIS; + +            obj = dataformat_to_odf_by_type(df, inst, type); + +            memcpy(&obj_df[action], obj, df->dwObjSize); + +            This->base.action_map[action].uAppData = lpdiaf->rgoAction[i].uAppData; +            This->base.action_map[action].offset = offset; +            obj_df[action].dwOfs = offset; +            offset += (type & DIDFT_BUTTON) ? 1 : 4; + +            action++; +        } +    } + +    IDirectInputDevice8_SetDataFormat(iface, &data_format); + +    HeapFree(GetProcessHeap(), 0, obj_df); + +    return IDirectInputDevice8WImpl_SetActionMap(iface, lpdiaf, lpszUserName, dwFlags);  }

 HRESULT WINAPI JoystickAGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface, -- 1.7.0.4

0 0
Reply
Sign in to reply online Use email software

Back to the thread

Back to the list

HyperKitty Powered by HyperKitty version 1.3.12.