Mir

Merge lp:~andreas-pokorny/mir/add-option-to-disable-acceleration into lp:mir

Proposed by Andreas Pokorny
Status: Superseded
Proposed branch: lp:~andreas-pokorny/mir/add-option-to-disable-acceleration
Merge into: lp:mir
Diff against target: 459 lines (+124/-43)
12 files modified
examples/server_example_input_device_config.cpp (+31/-9)
examples/server_example_input_device_config.h (+2/-8)
include/client/mir_toolkit/mir_input_device.h (+7/-0)
include/platform/mir/input/pointer_settings.h (+4/-0)
include/server/mir/input/pointer_configuration.h (+10/-4)
src/platforms/evdev/libinput_device.cpp (+26/-9)
src/platforms/evdev/libinput_device.h (+1/-0)
src/server/input/default_device.cpp (+4/-2)
tests/include/mir/test/doubles/mock_libinput.h (+2/-0)
tests/mir_test_doubles/mock_libinput.cpp (+12/-0)
tests/mir_test_framework/fake_input_device_impl.cpp (+7/-4)
tests/unit-tests/input/evdev/test_libinput_device.cpp (+18/-7)
To merge this branch: bzr merge lp:~andreas-pokorny/mir/add-option-to-disable-acceleration
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Daniel van Vugt Needs Fixing
Review via email: mp+280523@code.launchpad.net

This proposal has been superseded by a proposal from 2015-12-15.

Commit message

add an option to disable pointer acceleration

This is a makeshift for unknown high dpi / high freq mice. This breaks input platform abi

Description of the change

This MP adds a configuration option to disable cursor acceleration for pointing devices. The option is used in a new program option in example servers - and there restricted to mice.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:3192
http://jenkins.qa.ubuntu.com/job/mir-ci/5847/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5309
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4215
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5258
    FAILURE: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/157/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/175
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/175/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/175
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/175/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5258
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5258/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7778
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26049
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/155
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/155/artifact/work/output/*zip*/output.zip
    FAILURE: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/14/console
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26052

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/mir-ci/5847/rebuild

review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Thanks for putting the time into this. I suspect this is slightly the wrong approach though:

+ bool enable_cursor_acceleration{true};

would be better replaced by an enum that matches enum libinput_config_accel_profile:

http://wayland.freedesktop.org/libinput/doc/latest/libinput_8h.html#ad63796972347f318b180e322e35cee79

So we could set it as LIBINPUT_CONFIG_ACCEL_PROFILE_NONE (or FLAT or ADAPTIVE) instead of enable_cursor_acceleration=false.

review: Needs Fixing
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

And therefore we would end up calling libinput_device_config_accel_set_profile:
http://wayland.freedesktop.org/libinput/doc/latest/group__config.html#ga6e72a6214840d76c8a43d3753c1d549d

Revision history for this message
Andreas Pokorny (andreas-pokorny) wrote :

Agreed. I guess that would turn that into a more permanent solution.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/server_example_input_device_config.cpp'
--- examples/server_example_input_device_config.cpp 2015-12-06 23:57:03 +0000
+++ examples/server_example_input_device_config.cpp 2015-12-15 13:25:30 +0000
@@ -31,21 +31,27 @@
3131
32///\example server_example_input_device_config.cpp32///\example server_example_input_device_config.cpp
33/// Demonstrate input device configuration33/// Demonstrate input device configuration
3434namespace
35char const* const me::disable_while_typing_opt = "disable-while-typing";35{
36char const* const me::mouse_cursor_acceleration_bias_opt = "mouse-cursor-acceleration-bias";36char const* const disable_while_typing_opt = "disable-while-typing";
37char const* const me::mouse_scroll_speed_scale_opt = "mouse-scroll-speed-scale";37char const* const mouse_acceleration_profile_opt = "mouse-acceleration-profile";
38char const* const me::touchpad_cursor_acceleration_bias_opt = "touchpad-cursor-acceleration-bias";38char const* const acceleration_profile_none = "none";
39char const* const me::touchpad_scroll_speed_scale_opt = "touchpad-scroll-speed-scale";39char const* const acceleration_profile_flat = "flat";
40char const* const me::touchpad_scroll_mode_opt = "touchpad-scroll-mode";40char const* const acceleration_profile_adaptive = "adaptive";
41char const* const mouse_cursor_acceleration_bias_opt = "mouse-cursor-acceleration-bias";
42char const* const mouse_scroll_speed_scale_opt = "mouse-scroll-speed-scale";
43char const* const touchpad_cursor_acceleration_bias_opt = "touchpad-cursor-acceleration-bias";
44char const* const touchpad_scroll_speed_scale_opt = "touchpad-scroll-speed-scale";
45char const* const touchpad_scroll_mode_opt = "touchpad-scroll-mode";
4146
42char const* const touchpad_scroll_mode_two_finger = "two-finger";47char const* const touchpad_scroll_mode_two_finger = "two-finger";
43char const* const touchpad_scroll_mode_edge = "edge";48char const* const touchpad_scroll_mode_edge = "edge";
4449
45char const* const me::touchpad_click_mode_opt= "touchpad-click-mode";50char const* const touchpad_click_mode_opt= "touchpad-click-mode";
4651
47char const* const touchpad_click_mode_area = "area";52char const* const touchpad_click_mode_area = "area";
48char const* const touchpad_click_mode_finger_count = "finger-count";53char const* const touchpad_click_mode_finger_count = "finger-count";
54}
4955
50void me::add_input_device_configuration_options_to(mir::Server& server)56void me::add_input_device_configuration_options_to(mir::Server& server)
51{57{
@@ -53,6 +59,9 @@
53 server.add_configuration_option(disable_while_typing_opt,59 server.add_configuration_option(disable_while_typing_opt,
54 "Disable touchpad while typing on keyboard configuration [true, false]",60 "Disable touchpad while typing on keyboard configuration [true, false]",
55 false);61 false);
62 server.add_configuration_option(mouse_acceleration_profile_opt,
63 "Select acceleration profile for mice and trackballs [none, flat, adaptive]",
64 acceleration_profile_adaptive);
56 server.add_configuration_option(mouse_cursor_acceleration_bias_opt,65 server.add_configuration_option(mouse_cursor_acceleration_bias_opt,
57 "Bias to the acceleration curve within the range [-1.0, 1.0] for mice",66 "Bias to the acceleration curve within the range [-1.0, 1.0] for mice",
58 0.0);67 0.0);
@@ -93,6 +102,15 @@
93 return mir_touchpad_scroll_mode_none;102 return mir_touchpad_scroll_mode_none;
94 };103 };
95104
105 auto to_profile = [](std::string const& val)
106 {
107 if (val == acceleration_profile_flat)
108 return mir_pointer_acceleration_profile_flat;
109 if (val == acceleration_profile_none)
110 return mir_pointer_acceleration_profile_none;
111 return mir_pointer_acceleration_profile_adaptive;
112 };
113
96 auto convert_to_click_mode = [](std::string const& val)114 auto convert_to_click_mode = [](std::string const& val)
97 {115 {
98 if (val == touchpad_click_mode_finger_count)116 if (val == touchpad_click_mode_finger_count)
@@ -107,6 +125,7 @@
107 auto const options = server.get_options();125 auto const options = server.get_options();
108 auto const input_config = std::make_shared<me::InputDeviceConfig>(126 auto const input_config = std::make_shared<me::InputDeviceConfig>(
109 options->get<bool>(disable_while_typing_opt),127 options->get<bool>(disable_while_typing_opt),
128 to_profile(options->get<std::string>(mouse_acceleration_profile_opt)),
110 clamp_to_range(options->get<double>(mouse_cursor_acceleration_bias_opt)),129 clamp_to_range(options->get<double>(mouse_cursor_acceleration_bias_opt)),
111 options->get<double>(mouse_scroll_speed_scale_opt),130 options->get<double>(mouse_scroll_speed_scale_opt),
112 clamp_to_range(options->get<double>(touchpad_cursor_acceleration_bias_opt)),131 clamp_to_range(options->get<double>(touchpad_cursor_acceleration_bias_opt)),
@@ -122,13 +141,15 @@
122/// Demonstrate how to implement an InputDeviceObserver that identifies and configures input devices.141/// Demonstrate how to implement an InputDeviceObserver that identifies and configures input devices.
123142
124me::InputDeviceConfig::InputDeviceConfig(bool disable_while_typing,143me::InputDeviceConfig::InputDeviceConfig(bool disable_while_typing,
144 MirPointerAccelerationProfile mouse_profile,
125 double mouse_cursor_acceleration_bias,145 double mouse_cursor_acceleration_bias,
126 double mouse_scroll_speed_scale,146 double mouse_scroll_speed_scale,
127 double touchpad_cursor_acceleration_bias,147 double touchpad_cursor_acceleration_bias,
128 double touchpad_scroll_speed_scale,148 double touchpad_scroll_speed_scale,
129 MirTouchpadClickModes click_mode,149 MirTouchpadClickModes click_mode,
130 MirTouchpadClickModes scroll_mode)150 MirTouchpadClickModes scroll_mode)
131 : disable_while_typing(disable_while_typing), mouse_cursor_acceleration_bias(mouse_cursor_acceleration_bias),151 : disable_while_typing(disable_while_typing), mouse_profile{mouse_profile},
152 mouse_cursor_acceleration_bias(mouse_cursor_acceleration_bias),
132 mouse_scroll_speed_scale(mouse_scroll_speed_scale),153 mouse_scroll_speed_scale(mouse_scroll_speed_scale),
133 touchpad_cursor_acceleration_bias(touchpad_cursor_acceleration_bias),154 touchpad_cursor_acceleration_bias(touchpad_cursor_acceleration_bias),
134 touchpad_scroll_speed_scale(touchpad_scroll_speed_scale), click_mode(click_mode), scroll_mode(scroll_mode)155 touchpad_scroll_speed_scale(touchpad_scroll_speed_scale), click_mode(click_mode), scroll_mode(scroll_mode)
@@ -154,6 +175,7 @@
154 else if (contains(device->capabilities(), mi::DeviceCapability::pointer))175 else if (contains(device->capabilities(), mi::DeviceCapability::pointer))
155 {176 {
156 mi::PointerConfiguration pointer_config( device->pointer_configuration().value() );177 mi::PointerConfiguration pointer_config( device->pointer_configuration().value() );
178 pointer_config.acceleration_profile = mouse_profile;
157 pointer_config.cursor_acceleration_bias = mouse_cursor_acceleration_bias;179 pointer_config.cursor_acceleration_bias = mouse_cursor_acceleration_bias;
158 pointer_config.vertical_scroll_scale = mouse_scroll_speed_scale;180 pointer_config.vertical_scroll_scale = mouse_scroll_speed_scale;
159 pointer_config.horizontal_scroll_scale = mouse_scroll_speed_scale;181 pointer_config.horizontal_scroll_scale = mouse_scroll_speed_scale;
160182
=== modified file 'examples/server_example_input_device_config.h'
--- examples/server_example_input_device_config.h 2015-12-06 23:57:03 +0000
+++ examples/server_example_input_device_config.h 2015-12-15 13:25:30 +0000
@@ -33,20 +33,13 @@
3333
34namespace examples34namespace examples
35{35{
36extern char const* const disable_while_typing_opt;
37extern char const* const mouse_cursor_acceleration_bias_opt;
38extern char const* const mouse_scroll_speed_scale_opt;
39extern char const* const touchpad_cursor_acceleration_bias_opt;
40extern char const* const touchpad_scroll_speed_scale_opt;
41extern char const* const touchpad_click_mode_opt;
42extern char const* const touchpad_scroll_mode_opt;
43
44void add_input_device_configuration_options_to(Server& server);36void add_input_device_configuration_options_to(Server& server);
4537
46class InputDeviceConfig : public mir::input::InputDeviceObserver38class InputDeviceConfig : public mir::input::InputDeviceObserver
47{39{
48public:40public:
49 InputDeviceConfig(bool disable_while_typing,41 InputDeviceConfig(bool disable_while_typing,
42 MirPointerAccelerationProfile mouse_profile,
50 double mouse_cursor_acceleration_bias,43 double mouse_cursor_acceleration_bias,
51 double mouse_scroll_speed_scale,44 double mouse_scroll_speed_scale,
52 double touchpad_cursor_acceleration_bias,45 double touchpad_cursor_acceleration_bias,
@@ -59,6 +52,7 @@
59 void changes_complete() override {}52 void changes_complete() override {}
60private:53private:
61 bool disable_while_typing;54 bool disable_while_typing;
55 MirPointerAccelerationProfile mouse_profile;
62 double mouse_cursor_acceleration_bias;56 double mouse_cursor_acceleration_bias;
63 double mouse_scroll_speed_scale;57 double mouse_scroll_speed_scale;
64 double touchpad_cursor_acceleration_bias;58 double touchpad_cursor_acceleration_bias;
6559
=== modified file 'include/client/mir_toolkit/mir_input_device.h'
--- include/client/mir_toolkit/mir_input_device.h 2015-10-26 03:33:22 +0000
+++ include/client/mir_toolkit/mir_input_device.h 2015-12-15 13:25:30 +0000
@@ -32,6 +32,13 @@
32 mir_pointer_handedness_left = 132 mir_pointer_handedness_left = 1
33} MirPointerHandedness;33} MirPointerHandedness;
3434
35typedef enum MirPointerAccelerationProfile
36{
37 mir_pointer_acceleration_profile_none = 0,
38 mir_pointer_acceleration_profile_flat = 1,
39 mir_pointer_acceleration_profile_adaptive = 2
40} MirPointerAccelerationProfile;
41
35typedef enum MirTouchpadClickMode42typedef enum MirTouchpadClickMode
36{43{
37 mir_touchpad_click_mode_none = 0,44 mir_touchpad_click_mode_none = 0,
3845
=== modified file 'include/platform/mir/input/pointer_settings.h'
--- include/platform/mir/input/pointer_settings.h 2015-10-26 03:33:22 +0000
+++ include/platform/mir/input/pointer_settings.h 2015-12-15 13:25:30 +0000
@@ -43,6 +43,10 @@
43 */43 */
44 double cursor_acceleration_bias{0.0};44 double cursor_acceleration_bias{0.0};
45 /**45 /**
46 * Acceleration profile
47 */
48 MirPointerAccelerationProfile acceleration_profile{mir_pointer_acceleration_profile_adaptive};
49 /**
46 * Scale horizontal scrolling linearly50 * Scale horizontal scrolling linearly
47 */51 */
48 double horizontal_scroll_scale{1.0};52 double horizontal_scroll_scale{1.0};
4953
=== modified file 'include/server/mir/input/pointer_configuration.h'
--- include/server/mir/input/pointer_configuration.h 2015-11-04 16:30:42 +0000
+++ include/server/mir/input/pointer_configuration.h 2015-12-15 13:25:30 +0000
@@ -33,10 +33,11 @@
33{33{
34 PointerConfiguration() {}34 PointerConfiguration() {}
3535
36 PointerConfiguration(MirPointerHandedness handedness, double acceleration_bias, double horizontal_scroll_scale,36 PointerConfiguration(MirPointerHandedness handedness, MirPointerAccelerationProfile acceleration_profile, double acceleration_bias,
37 double vertical_scroll_scale)37 double horizontal_scroll_scale, double vertical_scroll_scale)
38 : handedness{handedness}, cursor_acceleration_bias{acceleration_bias},38 : handedness{handedness}, acceleration_profile{acceleration_profile},
39 horizontal_scroll_scale{horizontal_scroll_scale}, vertical_scroll_scale{vertical_scroll_scale}39 cursor_acceleration_bias{acceleration_bias}, horizontal_scroll_scale{horizontal_scroll_scale},
40 vertical_scroll_scale{vertical_scroll_scale}
40 {41 {
41 }42 }
4243
@@ -47,6 +48,11 @@
47 MirPointerHandedness handedness{mir_pointer_handedness_right};48 MirPointerHandedness handedness{mir_pointer_handedness_right};
4849
49 /*!50 /*!
51 * Configure cursor acceleration profile
52 */
53 MirPointerAccelerationProfile acceleration_profile{mir_pointer_acceleration_profile_adaptive};
54
55 /*!
50 * Configures the intensity of the cursor acceleration. Values within the range of [-1, 1] are allowed.56 * Configures the intensity of the cursor acceleration. Values within the range of [-1, 1] are allowed.
51 * - 0: default acceleration57 * - 0: default acceleration
52 * - [-1, 0): reduced acceleration58 * - [-1, 0): reduced acceleration
5359
=== modified file 'src/platforms/evdev/libinput_device.cpp'
--- src/platforms/evdev/libinput_device.cpp 2015-12-07 01:13:18 +0000
+++ src/platforms/evdev/libinput_device.cpp 2015-12-15 13:25:30 +0000
@@ -167,9 +167,8 @@
167167
168 report->received_event_from_kernel(time.count(), EV_REL, 0, 0);168 report->received_event_from_kernel(time.count(), EV_REL, 0, 0);
169169
170 mir::geometry::Displacement const movement{170 mir::geometry::Displacement const movement{libinput_event_pointer_get_dx(pointer),
171 libinput_event_pointer_get_dx(pointer),171 libinput_event_pointer_get_dy(pointer)};
172 libinput_event_pointer_get_dy(pointer)};
173172
174 return builder->pointer_event(time, action, button_state, hscroll_value, vscroll_value, movement.dx.as_float(),173 return builder->pointer_event(time, action, button_state, hscroll_value, vscroll_value, movement.dx.as_float(),
175 movement.dy.as_float());174 movement.dy.as_float());
@@ -336,15 +335,26 @@
336 if (!contains(info.capabilities, mi::DeviceCapability::pointer))335 if (!contains(info.capabilities, mi::DeviceCapability::pointer))
337 return {};336 return {};
338337
339 auto dev = device();
340 auto accel_bias = libinput_device_config_accel_get_speed(dev);
341 auto left_handed = (libinput_device_config_left_handed_get(dev) == 1);
342
343 mi::PointerSettings settings;338 mi::PointerSettings settings;
344 settings.cursor_acceleration_bias = accel_bias;339 auto dev = device();
340 auto const left_handed = (libinput_device_config_left_handed_get(dev) == 1);
341 settings.handedness = left_handed? mir_pointer_handedness_left : mir_pointer_handedness_right;
342 switch(libinput_device_config_accel_get_profile(dev))
343 {
344 case LIBINPUT_CONFIG_ACCEL_PROFILE_NONE:
345 settings.acceleration_profile = mir_pointer_acceleration_profile_none;
346 break;
347 case LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT:
348 settings.acceleration_profile = mir_pointer_acceleration_profile_flat;
349 break;
350 case LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE:
351 settings.acceleration_profile = mir_pointer_acceleration_profile_adaptive;
352 break;
353 }
354
355 settings.cursor_acceleration_bias = libinput_device_config_accel_get_speed(dev);
345 settings.vertical_scroll_scale = vertical_scroll_scale;356 settings.vertical_scroll_scale = vertical_scroll_scale;
346 settings.horizontal_scroll_scale = horizontal_scroll_scale;357 settings.horizontal_scroll_scale = horizontal_scroll_scale;
347 settings.handedness = left_handed? mir_pointer_handedness_left : mir_pointer_handedness_right;
348 return settings;358 return settings;
349}359}
350360
@@ -358,6 +368,13 @@
358 libinput_device_config_left_handed_set(dev, mir_pointer_handedness_left == settings.handedness);368 libinput_device_config_left_handed_set(dev, mir_pointer_handedness_left == settings.handedness);
359 vertical_scroll_scale = settings.vertical_scroll_scale;369 vertical_scroll_scale = settings.vertical_scroll_scale;
360 horizontal_scroll_scale = settings.horizontal_scroll_scale;370 horizontal_scroll_scale = settings.horizontal_scroll_scale;
371 libinput_device_config_accel_set_profile(
372 dev,
373 (settings.acceleration_profile == mir_pointer_acceleration_profile_none) ?
374 LIBINPUT_CONFIG_ACCEL_PROFILE_NONE :
375 (settings.acceleration_profile == mir_pointer_acceleration_profile_flat) ?
376 LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT :
377 LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE);
361}378}
362379
363mir::optional_value<mi::TouchpadSettings> mie::LibInputDevice::get_touchpad_settings() const380mir::optional_value<mi::TouchpadSettings> mie::LibInputDevice::get_touchpad_settings() const
364381
=== modified file 'src/platforms/evdev/libinput_device.h'
--- src/platforms/evdev/libinput_device.h 2015-11-30 16:34:46 +0000
+++ src/platforms/evdev/libinput_device.h 2015-12-15 13:25:30 +0000
@@ -88,6 +88,7 @@
88 InputDeviceInfo info;88 InputDeviceInfo info;
89 mir::geometry::Point pointer_pos;89 mir::geometry::Point pointer_pos;
90 MirPointerButtons button_state;90 MirPointerButtons button_state;
91 bool enable_cursor_acceleration{true};
91 double vertical_scroll_scale{1.0};92 double vertical_scroll_scale{1.0};
92 double horizontal_scroll_scale{1.0};93 double horizontal_scroll_scale{1.0};
9394
9495
=== modified file 'src/server/input/default_device.cpp'
--- src/server/input/default_device.cpp 2015-11-04 19:47:19 +0000
+++ src/server/input/default_device.cpp 2015-12-15 13:25:30 +0000
@@ -62,8 +62,9 @@
6262
63 auto const& settings = pointer.value();63 auto const& settings = pointer.value();
6464
65 return PointerConfiguration(settings.handedness, settings.cursor_acceleration_bias,65 return PointerConfiguration(settings.handedness, settings.acceleration_profile,
66 settings.horizontal_scroll_scale, settings.vertical_scroll_scale);66 settings.cursor_acceleration_bias, settings.horizontal_scroll_scale,
67 settings.vertical_scroll_scale);
67}68}
6869
69mir::optional_value<mi::TouchpadConfiguration> mi::DefaultDevice::touchpad_configuration() const70mir::optional_value<mi::TouchpadConfiguration> mi::DefaultDevice::touchpad_configuration() const
@@ -88,6 +89,7 @@
8889
89 PointerSettings settings;90 PointerSettings settings;
90 settings.handedness = conf.handedness;91 settings.handedness = conf.handedness;
92 settings.acceleration_profile = conf.acceleration_profile;
91 settings.cursor_acceleration_bias = conf.cursor_acceleration_bias;93 settings.cursor_acceleration_bias = conf.cursor_acceleration_bias;
92 settings.vertical_scroll_scale = conf.vertical_scroll_scale;94 settings.vertical_scroll_scale = conf.vertical_scroll_scale;
93 settings.horizontal_scroll_scale = conf.horizontal_scroll_scale;95 settings.horizontal_scroll_scale = conf.horizontal_scroll_scale;
9496
=== modified file 'tests/include/mir/test/doubles/mock_libinput.h'
--- tests/include/mir/test/doubles/mock_libinput.h 2015-12-07 01:13:18 +0000
+++ tests/include/mir/test/doubles/mock_libinput.h 2015-12-15 13:25:30 +0000
@@ -121,6 +121,8 @@
121 MOCK_METHOD2(libinput_device_config_accel_set_speed, libinput_config_status(libinput_device*, double speed));121 MOCK_METHOD2(libinput_device_config_accel_set_speed, libinput_config_status(libinput_device*, double speed));
122 MOCK_METHOD1(libinput_device_config_accel_get_speed, double(libinput_device*));122 MOCK_METHOD1(libinput_device_config_accel_get_speed, double(libinput_device*));
123 MOCK_METHOD1(libinput_device_config_accel_get_default_speed, double(libinput_device*));123 MOCK_METHOD1(libinput_device_config_accel_get_default_speed, double(libinput_device*));
124 MOCK_METHOD2(libinput_device_config_accel_set_profile, libinput_config_status(libinput_device*, libinput_config_accel_profile));
125 MOCK_METHOD1(libinput_device_config_accel_get_profile, libinput_config_accel_profile(libinput_device*));
124 MOCK_METHOD1(libinput_device_config_scroll_has_natural_scroll, int(libinput_device*));126 MOCK_METHOD1(libinput_device_config_scroll_has_natural_scroll, int(libinput_device*));
125 MOCK_METHOD2(libinput_device_config_scroll_set_natural_scroll_enabled, libinput_config_status(libinput_device*, int enable));127 MOCK_METHOD2(libinput_device_config_scroll_set_natural_scroll_enabled, libinput_config_status(libinput_device*, int enable));
126 MOCK_METHOD1(libinput_device_config_scroll_get_natural_scroll_enabled, int(libinput_device*));128 MOCK_METHOD1(libinput_device_config_scroll_get_natural_scroll_enabled, int(libinput_device*));
127129
=== modified file 'tests/mir_test_doubles/mock_libinput.cpp'
--- tests/mir_test_doubles/mock_libinput.cpp 2015-12-07 01:13:18 +0000
+++ tests/mir_test_doubles/mock_libinput.cpp 2015-12-15 13:25:30 +0000
@@ -51,6 +51,8 @@
51 .WillByDefault(Return(LIBINPUT_CONFIG_STATUS_SUCCESS));51 .WillByDefault(Return(LIBINPUT_CONFIG_STATUS_SUCCESS));
52 ON_CALL(*this, libinput_device_config_middle_emulation_set_enabled(_, _))52 ON_CALL(*this, libinput_device_config_middle_emulation_set_enabled(_, _))
53 .WillByDefault(Return(LIBINPUT_CONFIG_STATUS_SUCCESS));53 .WillByDefault(Return(LIBINPUT_CONFIG_STATUS_SUCCESS));
54 ON_CALL(*this, libinput_device_config_accel_set_profile(_, _))
55 .WillByDefault(Return(LIBINPUT_CONFIG_STATUS_SUCCESS));
54}56}
5557
56void mtd::MockLibInput::wake()58void mtd::MockLibInput::wake()
@@ -458,6 +460,16 @@
458 return global_libinput->libinput_device_config_accel_get_default_speed(device);460 return global_libinput->libinput_device_config_accel_get_default_speed(device);
459}461}
460462
463libinput_config_status libinput_device_config_accel_set_profile(libinput_device* dev, libinput_config_accel_profile profile)
464{
465 return global_libinput->libinput_device_config_accel_set_profile(dev, profile);
466}
467
468libinput_config_accel_profile libinput_device_config_accel_get_profile(libinput_device* dev)
469{
470 return global_libinput->libinput_device_config_accel_get_profile(dev);
471}
472
461int libinput_device_config_scroll_has_natural_scroll(libinput_device *device)473int libinput_device_config_scroll_has_natural_scroll(libinput_device *device)
462{474{
463 return global_libinput->libinput_device_config_scroll_has_natural_scroll(device);475 return global_libinput->libinput_device_config_scroll_has_natural_scroll(device);
464476
=== modified file 'tests/mir_test_framework/fake_input_device_impl.cpp'
--- tests/mir_test_framework/fake_input_device_impl.cpp 2015-11-25 20:26:59 +0000
+++ tests/mir_test_framework/fake_input_device_impl.cpp 2015-12-15 13:25:30 +0000
@@ -90,6 +90,7 @@
90 std::shared_ptr<mir::dispatch::Dispatchable> const& dispatchable)90 std::shared_ptr<mir::dispatch::Dispatchable> const& dispatchable)
91 : info(info), queue{dispatchable}, buttons{0}91 : info(info), queue{dispatchable}, buttons{0}
92{92{
93 settings.acceleration_profile = mir_pointer_acceleration_profile_none;
93}94}
9495
95void mtf::FakeInputDeviceImpl::InputDevice::synthesize_events(synthesis::KeyParameters const& key_params)96void mtf::FakeInputDeviceImpl::InputDevice::synthesize_events(synthesis::KeyParameters const& key_params)
@@ -151,9 +152,11 @@
151 // constant scaling is used here to simplify checking for the152 // constant scaling is used here to simplify checking for the
152 // expected results. Default settings of the device lead to no153 // expected results. Default settings of the device lead to no
153 // scaling at all.154 // scaling at all.
154 auto acceleration = (settings.cursor_acceleration_bias + 1.0);155 auto const acceleration = settings.acceleration_profile == mir_pointer_acceleration_profile_flat ?
155 auto rel_x = pointer.rel_x * acceleration;156 (settings.cursor_acceleration_bias + 1.0) :
156 auto rel_y = pointer.rel_y * acceleration;157 1.0;
158 auto const rel_x = pointer.rel_x * acceleration;
159 auto const rel_y = pointer.rel_y * acceleration;
157160
158 auto pointer_event = builder->pointer_event(event_time,161 auto pointer_event = builder->pointer_event(event_time,
159 mir_pointer_action_motion,162 mir_pointer_action_motion,
@@ -213,7 +216,7 @@
213 if (!contains(info.capabilities, mi::DeviceCapability::pointer))216 if (!contains(info.capabilities, mi::DeviceCapability::pointer))
214 return ret;217 return ret;
215218
216 ret = mi::PointerSettings();219 ret = settings;
217 return ret;220 return ret;
218}221}
219222
220223
=== modified file 'tests/unit-tests/input/evdev/test_libinput_device.cpp'
--- tests/unit-tests/input/evdev/test_libinput_device.cpp 2015-12-07 01:13:18 +0000
+++ tests/unit-tests/input/evdev/test_libinput_device.cpp 2015-12-15 13:25:30 +0000
@@ -208,12 +208,18 @@
208 return device_path;208 return device_path;
209 }209 }
210210
211 void setup_pointer_configuration(libinput_device* dev, double accel_speed, MirPointerHandedness handedness)211 void setup_pointer_configuration(libinput_device* dev, double accel_speed, MirPointerHandedness handedness, MirPointerAccelerationProfile profile)
212 {212 {
213 ON_CALL(mock_libinput, libinput_device_config_accel_get_speed(dev))213 ON_CALL(mock_libinput, libinput_device_config_accel_get_speed(dev))
214 .WillByDefault(Return(accel_speed));214 .WillByDefault(Return(accel_speed));
215 ON_CALL(mock_libinput, libinput_device_config_left_handed_get(dev))215 ON_CALL(mock_libinput, libinput_device_config_left_handed_get(dev))
216 .WillByDefault(Return(handedness == mir_pointer_handedness_left));216 .WillByDefault(Return(handedness == mir_pointer_handedness_left));
217 ON_CALL(mock_libinput, libinput_device_config_accel_get_profile(dev))
218 .WillByDefault(Return((profile == mir_pointer_acceleration_profile_flat) ?
219 LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT :
220 (profile == mir_pointer_acceleration_profile_none) ?
221 LIBINPUT_CONFIG_ACCEL_PROFILE_NONE :
222 LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE));
217 }223 }
218224
219 void setup_touchpad_configuration(libinput_device* dev,225 void setup_touchpad_configuration(libinput_device* dev,
@@ -779,7 +785,7 @@
779785
780TEST_F(LibInputDeviceOnMouse, reads_pointer_settings_from_libinput)786TEST_F(LibInputDeviceOnMouse, reads_pointer_settings_from_libinput)
781{787{
782 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right);788 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right, mir_pointer_acceleration_profile_flat);
783 auto optional_settings = mouse.get_pointer_settings();789 auto optional_settings = mouse.get_pointer_settings();
784790
785 EXPECT_THAT(optional_settings.is_set(), Eq(true));791 EXPECT_THAT(optional_settings.is_set(), Eq(true));
@@ -789,8 +795,9 @@
789 EXPECT_THAT(ptr_settings.cursor_acceleration_bias, Eq(1.0));795 EXPECT_THAT(ptr_settings.cursor_acceleration_bias, Eq(1.0));
790 EXPECT_THAT(ptr_settings.horizontal_scroll_scale, Eq(1.0));796 EXPECT_THAT(ptr_settings.horizontal_scroll_scale, Eq(1.0));
791 EXPECT_THAT(ptr_settings.vertical_scroll_scale, Eq(1.0));797 EXPECT_THAT(ptr_settings.vertical_scroll_scale, Eq(1.0));
798 EXPECT_THAT(ptr_settings.acceleration_profile, Eq(mir_pointer_acceleration_profile_flat));
792799
793 setup_pointer_configuration(mouse.device(), 0.0, mir_pointer_handedness_left);800 setup_pointer_configuration(mouse.device(), 0.0, mir_pointer_handedness_left, mir_pointer_acceleration_profile_adaptive);
794 optional_settings = mouse.get_pointer_settings();801 optional_settings = mouse.get_pointer_settings();
795802
796 EXPECT_THAT(optional_settings.is_set(), Eq(true));803 EXPECT_THAT(optional_settings.is_set(), Eq(true));
@@ -800,23 +807,27 @@
800 EXPECT_THAT(ptr_settings.cursor_acceleration_bias, Eq(0.0));807 EXPECT_THAT(ptr_settings.cursor_acceleration_bias, Eq(0.0));
801 EXPECT_THAT(ptr_settings.horizontal_scroll_scale, Eq(1.0));808 EXPECT_THAT(ptr_settings.horizontal_scroll_scale, Eq(1.0));
802 EXPECT_THAT(ptr_settings.vertical_scroll_scale, Eq(1.0));809 EXPECT_THAT(ptr_settings.vertical_scroll_scale, Eq(1.0));
810 EXPECT_THAT(ptr_settings.acceleration_profile, Eq(mir_pointer_acceleration_profile_adaptive));
803}811}
804812
805TEST_F(LibInputDeviceOnMouse, applies_pointer_settings)813TEST_F(LibInputDeviceOnMouse, applies_pointer_settings)
806{814{
807 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right);815 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right, mir_pointer_acceleration_profile_none);
808 mi::PointerSettings settings(mouse.get_pointer_settings().value());816 mi::PointerSettings settings(mouse.get_pointer_settings().value());
809 settings.cursor_acceleration_bias = 1.1;817 settings.cursor_acceleration_bias = 1.1;
810 settings.handedness = mir_pointer_handedness_left;818 settings.handedness = mir_pointer_handedness_left;
819 settings.acceleration_profile = mir_pointer_acceleration_profile_flat;
811820
812 EXPECT_CALL(mock_libinput,libinput_device_config_accel_set_speed(mouse.device(), 1.1)).Times(1);821 EXPECT_CALL(mock_libinput, libinput_device_config_accel_set_speed(mouse.device(), 1.1)).Times(1);
813 EXPECT_CALL(mock_libinput,libinput_device_config_left_handed_set(mouse.device(), true)).Times(1);822 EXPECT_CALL(mock_libinput, libinput_device_config_accel_set_profile(mouse.device(), LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT)).Times(1);
823 EXPECT_CALL(mock_libinput, libinput_device_config_left_handed_set(mouse.device(), true)).Times(1);
814824
815 mouse.apply_settings(settings);825 mouse.apply_settings(settings);
816}826}
817827
818TEST_F(LibInputDeviceOnLaptopKeyboardAndMouse, denies_pointer_settings_on_keyboards)828TEST_F(LibInputDeviceOnLaptopKeyboardAndMouse, denies_pointer_settings_on_keyboards)
819{829{
830 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right, mir_pointer_acceleration_profile_none);
820 auto settings_from_mouse = mouse.get_pointer_settings();831 auto settings_from_mouse = mouse.get_pointer_settings();
821832
822 EXPECT_CALL(mock_libinput,libinput_device_config_accel_set_speed(_, _)).Times(0);833 EXPECT_CALL(mock_libinput,libinput_device_config_accel_set_speed(_, _)).Times(0);
@@ -834,7 +845,7 @@
834 EXPECT_CALL(mock_sink, handle_input(mt::PointerAxisChange(mir_pointer_axis_vscroll, 3.0f)));845 EXPECT_CALL(mock_sink, handle_input(mt::PointerAxisChange(mir_pointer_axis_vscroll, 3.0f)));
835 EXPECT_CALL(mock_sink, handle_input(mt::PointerAxisChange(mir_pointer_axis_hscroll, -10.0f)));846 EXPECT_CALL(mock_sink, handle_input(mt::PointerAxisChange(mir_pointer_axis_hscroll, -10.0f)));
836847
837 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right);848 setup_pointer_configuration(mouse.device(), 1, mir_pointer_handedness_right, mir_pointer_acceleration_profile_flat);
838 mi::PointerSettings settings(mouse.get_pointer_settings().value());849 mi::PointerSettings settings(mouse.get_pointer_settings().value());
839 settings.vertical_scroll_scale = -1.0;850 settings.vertical_scroll_scale = -1.0;
840 settings.horizontal_scroll_scale = 5.0;851 settings.horizontal_scroll_scale = 5.0;

Subscribers

People subscribed via source and target branches