Bug 85632 - Improve pointer acceleration for high-resolution mice
Summary: Improve pointer acceleration for high-resolution mice
Status: RESOLVED FIXED
Alias: None
Product: Wayland
Classification: Unclassified
Component: libinput (show other bugs)
Version: unspecified
Hardware: Other All
: medium normal
Assignee: Wayland bug list
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-10-30 05:09 UTC by Peter Hutterer
Modified: 2014-12-05 03:34 UTC (History)
5 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Description Peter Hutterer 2014-10-30 05:09:14 UTC
Same as bug #79056 but for mice.

The pointer acceleration uses device-specific input data to apply acceleration. That data is resolution-dependent, the deltas provided by a low-resolution mouse are less than the ones provide by a high-resolution mouse.

This causes high-resolution mice to max out the pointer acceleration quickly, effectively running at maximum acceleration at all times.

The main difficulty here is: devices do not allow detection of the actual resolution, maintaining a database of all devices with a non-standard resolution is going to be difficult. Even unclear if it's possible at all, what if devices share USB IDs? Good suggestions welcome.
Comment 1 Peter Hutterer 2014-10-31 04:35:47 UTC
Patches leading up to 79898da377ba58857be0bd104de694eb1e66f41f allow for a DPI setting on the device now, currently always the default.
Comment 2 Derek Foreman 2014-10-31 14:48:54 UTC
At some point I do think we'll need some manner of DPI configuration API - I have a mouse here with a three way switch (a real physical switch on the bottom of the mouse) between 450, 1800, 3500 dpi.  I think ideally the mythical udev database of mice and their DPI would enumerate all 3, and libinput would allow selecting one of the pre-defined ones?

Since that infrastructure doesn't exist today, I'm not sure how to proceed.
Comment 3 Peter Hutterer 2014-11-02 22:10:32 UTC
libinput's config APIs are for run-time changes of user-specific settings. I don't think DPI really falls into that category, it's a HW property, even when it's variable. So it looks like we need _some_ API to change it (udev properties?), I'm not yet convinced that a proper API is needed.

What could work for those devices is to mark them as variable resolution and pick one resolution as the default. This also replicates the functionality as advertised by the vendor that changing the resolution changes the speed of the mouse.

Maybe something like LIBINPUT_MOUSE_DPI="800" for a normal mouse and LIBINPUT_MOUSE_DPI="v800" for variable resolution.
Comment 4 Peter Hutterer 2014-12-05 03:34:01 UTC
As of 3c7e3a19735b64eaa7937035d026b62c5fccbf5c, libinput assumes a default of 1000dpi and reads the actual dpi from the udev property if available.

See the udev hwdb file for more info
http://cgit.freedesktop.org/systemd/systemd/tree/hwdb/70-mouse.hwdb


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.