Always check for INVALID configs first
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 4 Dec 2014 06:50:32 +0000 (16:50 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 4 Dec 2014 06:50:32 +0000 (16:50 +1000)
Always check for invalid input first, then check if the input is supported by
the actual device.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/libinput.c

index 0d380fa818286519738f0d5ee0dc59664309c572..60505f6796f5066563ed839f877811b6713fb77f 100644 (file)
@@ -1462,12 +1462,12 @@ LIBINPUT_EXPORT enum libinput_config_status
 libinput_device_config_accel_set_speed(struct libinput_device *device,
                                       double speed)
 {
-       if (!libinput_device_config_accel_is_available(device))
-               return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
-
        if (speed < -1.0 || speed > 1.0)
                return LIBINPUT_CONFIG_STATUS_INVALID;
 
+       if (!libinput_device_config_accel_is_available(device))
+               return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
+
        return device->config.accel->set_speed(device, speed);
 }
 
@@ -1576,9 +1576,6 @@ LIBINPUT_EXPORT enum libinput_config_status
 libinput_device_config_scroll_set_method(struct libinput_device *device,
                                         enum libinput_config_scroll_method method)
 {
-       if ((libinput_device_config_scroll_get_methods(device) & method) != method)
-               return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
-
        /* Check method is a single valid method */
        switch (method) {
        case LIBINPUT_CONFIG_SCROLL_NO_SCROLL:
@@ -1590,6 +1587,9 @@ libinput_device_config_scroll_set_method(struct libinput_device *device,
                return LIBINPUT_CONFIG_STATUS_INVALID;
        }
 
+       if ((libinput_device_config_scroll_get_methods(device) & method) != method)
+               return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
+
        if (device->config.scroll_method)
                return device->config.scroll_method->set_method(device, method);
        else /* method must be _NO_SCROLL to get here */
@@ -1618,13 +1618,13 @@ LIBINPUT_EXPORT enum libinput_config_status
 libinput_device_config_scroll_set_button(struct libinput_device *device,
                                         uint32_t button)
 {
+       if (button && !libinput_device_has_button(device, button))
+               return LIBINPUT_CONFIG_STATUS_INVALID;
+
        if ((libinput_device_config_scroll_get_methods(device) &
             LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN) == 0)
                return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
 
-       if (button && !libinput_device_has_button(device, button))
-               return LIBINPUT_CONFIG_STATUS_INVALID;
-
        return device->config.scroll_method->set_button(device, button);
 }