Module: wine Branch: master Commit: 1bc557eea06a81a729d9d9a4bf26abbf57936452 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1bc557eea06a81a729d9d9a4bf...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Tue Jan 9 13:44:07 2007 -0700
dinput: [joystick_linux] Use correct offset to queue events.
---
dlls/dinput/joystick_linux.c | 34 ++++++++++++++++++++-------------- 1 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c index c297f70..1a6b063 100644 --- a/dlls/dinput/joystick_linux.c +++ b/dlls/dinput/joystick_linux.c @@ -778,7 +778,11 @@ static void joy_polldev(JoystickImpl *Th WARN("no device\n"); return; } - while (1) { + while (1) + { + LONG value; + int inst_id = -1; + plfd.fd = This->joyfd; plfd.events = POLLIN; if (poll(&plfd,1,0) != 1) @@ -789,19 +793,19 @@ static void joy_polldev(JoystickImpl *Th } TRACE("js_event: type 0x%x, number %d, value %d\n", jse.type,jse.number,jse.value); - if (jse.type & JS_EVENT_BUTTON) { - int offset = This->base.data_format.offsets[jse.number + 12]; - int value = jse.value?0x80:0x00; - - This->js.rgbButtons[jse.number] = value; - queue_event((LPDIRECTINPUTDEVICE8A)This, offset, value, jse.time, This->dinput->evsequence++); - } else if (jse.type & JS_EVENT_AXIS) { + if (jse.type & JS_EVENT_BUTTON) + { + inst_id = DIDFT_MAKEINSTANCE(jse.number) | DIDFT_PSHBUTTON; + This->js.rgbButtons[jse.number] = value = jse.value ? 0x80 : 0x00; + } + else if (jse.type & JS_EVENT_AXIS) + { int number = This->axis_map[jse.number]; /* wine format object index */ - if (number < 12) { - int offset = This->base.data_format.offsets[number]; - int index = offset_to_object(This->base.data_format.user_df, offset); - LONG value = map_axis(This, jse.value, index);
+ if (number < 12) + { + inst_id = DIDFT_MAKEINSTANCE(jse.number) | (number < 8 ? DIDFT_AXIS : DIDFT_POV); + value = map_axis(This, jse.value, number); /* FIXME do deadzone and saturation here */
TRACE("changing axis %d => %d\n", jse.number, number); @@ -860,11 +864,13 @@ static void joy_polldev(JoystickImpl *Th value = calculate_pov(This, 3); break; } - - queue_event((LPDIRECTINPUTDEVICE8A)This, offset, value, jse.time, This->dinput->evsequence++); } else WARN("axis %d not supported\n", number); } + if (inst_id >= 0) + queue_event((LPDIRECTINPUTDEVICE8A)This, + id_to_offset(&This->base.data_format, inst_id), + value, jse.time, This->dinput->evsequence++); } }