[Bug 49163] New: rawinput_mouse_experimental mishandles xf86_input_joystick axis handling

WineHQ Bugzilla wine-bugs at winehq.org
Fri May 15 12:12:41 CDT 2020


https://bugs.winehq.org/show_bug.cgi?id=49163

            Bug ID: 49163
           Summary: rawinput_mouse_experimental mishandles
                    xf86_input_joystick axis handling
           Product: Wine-staging
           Version: 5.8
          Hardware: x86-64
                OS: Linux
            Status: UNCONFIRMED
          Severity: major
          Priority: P2
         Component: -unknown
          Assignee: wine-bugs at winehq.org
          Reporter: skotlex at mailforce.net
                CC: leslie_alistair at hotmail.com, z.figura12 at gmail.com
      Distribution: ---

Case scenario where the issue occurs:
1. Playing a game like Guild Wars 2, enabling "action camera" (in which the
cursor vanishes and moving the mouse causes the camera to move around).
2. Using xf86_input_joystick to use a gamepad axis to handle the pointer.

Results: The camera becomes "stuck" at a specific angle/direction, and no
matter the movement of the joystick, the view angle isn't changed. When "action
camera" is disabled, the mouse moves appropriately, but whenever reenabled, the
view becomes stuck at the same vector.

This doesn't occur on wine-vanilla-5.8, or wine-staging-4.21, it's present in
all wine-staging-5.x versions, and I've traced the origin to the patchset
"user32_rawinput_mouse_experimental", specifically the patch
"user32-rawinput-mouse-experimental/0001-winex11.drv-Add-support-for-absolute-RawMotion-event.patch"

The bug doesn't occur when using the touchpad, only when using a gamepad. The
touchpad registers its axes as Relative (checking the runtime code in
process_rawinput_message()), however the gamepad does them as Absolute.

Checking the code of xf86_input_joystick I see these two calls that stand out:
1. In jstk.c, function jstkDeviceControlProc, joystick axes are initialized
with InitValuatorAxisStruct() with mode Absolute, probably because the joystick
itself reports axis data in absolute mode.

2. However, axis handling and parsing of data is done in jstk_axis.c, and when
it's time to invoke a movement event, it calls xf86PostMotionEvent (from either
the jstkAxisTimer() or jstkHandleAbsoluteAxis()) with the argument
"is_absolute=0" in all cases.

If I modify process_rawinput_message() to set the input as MOUSE_MOVE_RELATIVE
regardless of msg_data->flags, it works (though the camera is super-sensitive
to movement), obviously that isn't the right solution, but confirms the issue
is related to the device's mode handling.

I am not completely certain the bug belongs in wine rather than xorg, but
considering that it's the first time I have an issue with the gamepad driver,
and it's caused by a wine-experimental-patchset, I decided to report here
first.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list