Allow disabling of middle button emulation where it doesn't exist
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 19 May 2015 06:22:14 +0000 (16:22 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 19 May 2015 06:57:49 +0000 (16:57 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/libinput.c
test/pointer.c

index cefc5ec1ec14a0187e4489dd15fbf1ec82b977e7..444e9ce9b3bf1b3e7df68e56df2b5a8f7a4fb088 100644 (file)
@@ -1988,17 +1988,22 @@ libinput_device_config_middle_emulation_set_enabled(
                struct libinput_device *device,
                enum libinput_config_middle_emulation_state enable)
 {
+       int available =
+               libinput_device_config_middle_emulation_is_available(device);
+
        switch (enable) {
        case LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED:
+               if (!available)
+                       return LIBINPUT_CONFIG_STATUS_SUCCESS;
+               break;
        case LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED:
+               if (!available)
+                       return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
                break;
        default:
                return LIBINPUT_CONFIG_STATUS_INVALID;
        }
 
-       if (!libinput_device_config_middle_emulation_is_available(device))
-               return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
-
        return device->config.middle_emulation->set(device, enable);
 }
 
index 43c21ba39a2103ac565306524c3421afb21734f7..cbc38023fd47987c3584c891c7a655e9c5d22641 100644 (file)
@@ -1208,7 +1208,7 @@ START_TEST(middlebutton_default_clickpad)
 
        status = libinput_device_config_middle_emulation_set_enabled(device,
                                            LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
-       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
 
        status = libinput_device_config_middle_emulation_set_enabled(device, 3);
        ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_INVALID);
@@ -1237,6 +1237,30 @@ START_TEST(middlebutton_default_touchpad)
 }
 END_TEST
 
+START_TEST(middlebutton_default_disabled)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput_device *device = dev->libinput_device;
+       enum libinput_config_middle_emulation_state state;
+       enum libinput_config_status status;
+       int available;
+
+       available = libinput_device_config_middle_emulation_is_available(device);
+       ck_assert(!available);
+       state = libinput_device_config_middle_emulation_get_enabled(device);
+       ck_assert_int_eq(state, LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
+       state = libinput_device_config_middle_emulation_get_default_enabled(
+                                                                   device);
+       ck_assert_int_eq(state, LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
+       status = libinput_device_config_middle_emulation_set_enabled(device,
+                                    LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+       status = libinput_device_config_middle_emulation_set_enabled(device,
+                                    LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED);
+}
+END_TEST
+
 int main (int argc, char **argv)
 {
        litest_add("pointer:motion", pointer_motion_relative, LITEST_RELATIVE, LITEST_ANY);
@@ -1274,5 +1298,7 @@ int main (int argc, char **argv)
        litest_add("pointer:middlebutton", middlebutton_default_enabled, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_POINTINGSTICK);
        litest_add("pointer:middlebutton", middlebutton_default_clickpad, LITEST_CLICKPAD, LITEST_ANY);
        litest_add("pointer:middlebutton", middlebutton_default_touchpad, LITEST_TOUCHPAD, LITEST_CLICKPAD);
+       litest_add("pointer:middlebutton", middlebutton_default_disabled, LITEST_ANY, LITEST_BUTTON);
+
        return litest_run(argc, argv);
 }