Allow disabling of middle button emulation where it doesn't exist

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2015-05-19 16:22:14 +10:00
parent cd163b3b8a
commit f70db17d21
2 changed files with 35 additions and 4 deletions

View 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);
}

View 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);
}