1a46c0ec8Sopenharmony_ci/* 2a46c0ec8Sopenharmony_ci * Copyright © 2014 Red Hat, Inc. 3a46c0ec8Sopenharmony_ci * 4a46c0ec8Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 5a46c0ec8Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 6a46c0ec8Sopenharmony_ci * to deal in the Software without restriction, including without limitation 7a46c0ec8Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8a46c0ec8Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 9a46c0ec8Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 10a46c0ec8Sopenharmony_ci * 11a46c0ec8Sopenharmony_ci * The above copyright notice and this permission notice (including the next 12a46c0ec8Sopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the 13a46c0ec8Sopenharmony_ci * Software. 14a46c0ec8Sopenharmony_ci * 15a46c0ec8Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16a46c0ec8Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17a46c0ec8Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18a46c0ec8Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19a46c0ec8Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20a46c0ec8Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21a46c0ec8Sopenharmony_ci * DEALINGS IN THE SOFTWARE. 22a46c0ec8Sopenharmony_ci */ 23a46c0ec8Sopenharmony_ci 24a46c0ec8Sopenharmony_ci#include <config.h> 25a46c0ec8Sopenharmony_ci 26a46c0ec8Sopenharmony_ci#include <check.h> 27a46c0ec8Sopenharmony_ci#include <errno.h> 28a46c0ec8Sopenharmony_ci#include <fcntl.h> 29a46c0ec8Sopenharmony_ci#include <libinput.h> 30a46c0ec8Sopenharmony_ci#include <unistd.h> 31a46c0ec8Sopenharmony_ci 32a46c0ec8Sopenharmony_ci#include "libinput-util.h" 33a46c0ec8Sopenharmony_ci#include "litest.h" 34a46c0ec8Sopenharmony_ci 35a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_button) 36a46c0ec8Sopenharmony_ci{ 37a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 38a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 39a46c0ec8Sopenharmony_ci 40a46c0ec8Sopenharmony_ci if (!libevdev_has_event_code(dev->evdev, EV_KEY, BTN_LEFT)) 41a46c0ec8Sopenharmony_ci return; 42a46c0ec8Sopenharmony_ci 43a46c0ec8Sopenharmony_ci litest_drain_events(li); 44a46c0ec8Sopenharmony_ci 45a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, true); 46a46c0ec8Sopenharmony_ci libinput_dispatch(li); 47a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 48a46c0ec8Sopenharmony_ci BTN_LEFT, 49a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 50a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, false); 51a46c0ec8Sopenharmony_ci libinput_dispatch(li); 52a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 53a46c0ec8Sopenharmony_ci BTN_LEFT, 54a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 55a46c0ec8Sopenharmony_ci} 56a46c0ec8Sopenharmony_ciEND_TEST 57a46c0ec8Sopenharmony_ci 58a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_click_defaults_clickfinger) 59a46c0ec8Sopenharmony_ci{ 60a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 61a46c0ec8Sopenharmony_ci struct libinput_device *device = dev->libinput_device; 62a46c0ec8Sopenharmony_ci uint32_t methods, method; 63a46c0ec8Sopenharmony_ci enum libinput_config_status status; 64a46c0ec8Sopenharmony_ci 65a46c0ec8Sopenharmony_ci /* call this test for apple touchpads */ 66a46c0ec8Sopenharmony_ci 67a46c0ec8Sopenharmony_ci methods = libinput_device_config_click_get_methods(device); 68a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 69a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 70a46c0ec8Sopenharmony_ci 71a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_method(device); 72a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 73a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_default_method(device); 74a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 75a46c0ec8Sopenharmony_ci 76a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 77a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 78a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 79a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 80a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_NONE); 81a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 82a46c0ec8Sopenharmony_ci} 83a46c0ec8Sopenharmony_ciEND_TEST 84a46c0ec8Sopenharmony_ci 85a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_click_defaults_btnarea) 86a46c0ec8Sopenharmony_ci{ 87a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 88a46c0ec8Sopenharmony_ci struct libinput_device *device = dev->libinput_device; 89a46c0ec8Sopenharmony_ci uint32_t methods, method; 90a46c0ec8Sopenharmony_ci enum libinput_config_status status; 91a46c0ec8Sopenharmony_ci 92a46c0ec8Sopenharmony_ci /* call this test for non-apple clickpads */ 93a46c0ec8Sopenharmony_ci 94a46c0ec8Sopenharmony_ci methods = libinput_device_config_click_get_methods(device); 95a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 96a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 97a46c0ec8Sopenharmony_ci 98a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_method(device); 99a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 100a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_default_method(device); 101a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 102a46c0ec8Sopenharmony_ci 103a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 104a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 105a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 106a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 107a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_NONE); 108a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 109a46c0ec8Sopenharmony_ci} 110a46c0ec8Sopenharmony_ciEND_TEST 111a46c0ec8Sopenharmony_ci 112a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_click_defaults_none) 113a46c0ec8Sopenharmony_ci{ 114a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 115a46c0ec8Sopenharmony_ci struct libinput_device *device = dev->libinput_device; 116a46c0ec8Sopenharmony_ci uint32_t methods, method; 117a46c0ec8Sopenharmony_ci enum libinput_config_status status; 118a46c0ec8Sopenharmony_ci 119a46c0ec8Sopenharmony_ci if (libevdev_get_id_vendor(dev->evdev) == VENDOR_ID_APPLE && 120a46c0ec8Sopenharmony_ci libevdev_get_id_product(dev->evdev) == PRODUCT_ID_APPLE_APPLETOUCH) 121a46c0ec8Sopenharmony_ci return; 122a46c0ec8Sopenharmony_ci 123a46c0ec8Sopenharmony_ci /* call this test for non-clickpads and non-touchpads */ 124a46c0ec8Sopenharmony_ci 125a46c0ec8Sopenharmony_ci methods = libinput_device_config_click_get_methods(device); 126a46c0ec8Sopenharmony_ci ck_assert_int_eq(methods, 0); 127a46c0ec8Sopenharmony_ci 128a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_method(device); 129a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_NONE); 130a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_default_method(device); 131a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_NONE); 132a46c0ec8Sopenharmony_ci 133a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 134a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 135a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED); 136a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 137a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 138a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED); 139a46c0ec8Sopenharmony_ci} 140a46c0ec8Sopenharmony_ciEND_TEST 141a46c0ec8Sopenharmony_ci 142a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_1fg_clickfinger) 143a46c0ec8Sopenharmony_ci{ 144a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 145a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 146a46c0ec8Sopenharmony_ci 147a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 148a46c0ec8Sopenharmony_ci 149a46c0ec8Sopenharmony_ci litest_drain_events(li); 150a46c0ec8Sopenharmony_ci 151a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 152a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 153a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 154a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 155a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 156a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 157a46c0ec8Sopenharmony_ci 158a46c0ec8Sopenharmony_ci libinput_dispatch(li); 159a46c0ec8Sopenharmony_ci 160a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 161a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 162a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 163a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 164a46c0ec8Sopenharmony_ci} 165a46c0ec8Sopenharmony_ciEND_TEST 166a46c0ec8Sopenharmony_ci 167a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_1fg_clickfinger_no_touch) 168a46c0ec8Sopenharmony_ci{ 169a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 170a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 171a46c0ec8Sopenharmony_ci 172a46c0ec8Sopenharmony_ci if (dev->which == LITEST_SYNAPTICS_PHANTOMCLICKS) { 173a46c0ec8Sopenharmony_ci /* The XPS 15 9500 touchpad has the ModelTouchpadPhantomClicks 174a46c0ec8Sopenharmony_ci * quirk enabled and doesn't generate events without touches. */ 175a46c0ec8Sopenharmony_ci return; 176a46c0ec8Sopenharmony_ci } 177a46c0ec8Sopenharmony_ci 178a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 179a46c0ec8Sopenharmony_ci 180a46c0ec8Sopenharmony_ci litest_drain_events(li); 181a46c0ec8Sopenharmony_ci 182a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 183a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 184a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 185a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 186a46c0ec8Sopenharmony_ci 187a46c0ec8Sopenharmony_ci libinput_dispatch(li); 188a46c0ec8Sopenharmony_ci 189a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 190a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 191a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 192a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 193a46c0ec8Sopenharmony_ci} 194a46c0ec8Sopenharmony_ciEND_TEST 195a46c0ec8Sopenharmony_ci 196a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_1fg_clickfinger_no_touch_phantomclicks) 197a46c0ec8Sopenharmony_ci{ 198a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 199a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 200a46c0ec8Sopenharmony_ci 201a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 202a46c0ec8Sopenharmony_ci 203a46c0ec8Sopenharmony_ci litest_drain_events(li); 204a46c0ec8Sopenharmony_ci 205a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 206a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 207a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 208a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 209a46c0ec8Sopenharmony_ci 210a46c0ec8Sopenharmony_ci libinput_dispatch(li); 211a46c0ec8Sopenharmony_ci 212a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 213a46c0ec8Sopenharmony_ci} 214a46c0ec8Sopenharmony_ciEND_TEST 215a46c0ec8Sopenharmony_ci 216a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_2fg_clickfinger) 217a46c0ec8Sopenharmony_ci{ 218a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 219a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 220a46c0ec8Sopenharmony_ci 221a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 222a46c0ec8Sopenharmony_ci 223a46c0ec8Sopenharmony_ci litest_drain_events(li); 224a46c0ec8Sopenharmony_ci 225a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 226a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 70, 70); 227a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 228a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 229a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 230a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 231a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 232a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 233a46c0ec8Sopenharmony_ci 234a46c0ec8Sopenharmony_ci libinput_dispatch(li); 235a46c0ec8Sopenharmony_ci 236a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 237a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 238a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 239a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 240a46c0ec8Sopenharmony_ci} 241a46c0ec8Sopenharmony_ciEND_TEST 242a46c0ec8Sopenharmony_ci 243a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_3fg_clickfinger) 244a46c0ec8Sopenharmony_ci{ 245a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 246a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 247a46c0ec8Sopenharmony_ci 248a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) < 3) 249a46c0ec8Sopenharmony_ci return; 250a46c0ec8Sopenharmony_ci 251a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 252a46c0ec8Sopenharmony_ci 253a46c0ec8Sopenharmony_ci litest_drain_events(li); 254a46c0ec8Sopenharmony_ci 255a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 256a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 70); 257a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 70, 70); 258a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 259a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 260a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 261a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 262a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 263a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 264a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 265a46c0ec8Sopenharmony_ci 266a46c0ec8Sopenharmony_ci libinput_dispatch(li); 267a46c0ec8Sopenharmony_ci 268a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 269a46c0ec8Sopenharmony_ci BTN_MIDDLE, 270a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 271a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 272a46c0ec8Sopenharmony_ci BTN_MIDDLE, 273a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 274a46c0ec8Sopenharmony_ci} 275a46c0ec8Sopenharmony_ciEND_TEST 276a46c0ec8Sopenharmony_ci 277a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_3fg_clickfinger_btntool) 278a46c0ec8Sopenharmony_ci{ 279a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 280a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 281a46c0ec8Sopenharmony_ci 282a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) >= 3 || 283a46c0ec8Sopenharmony_ci !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP)) 284a46c0ec8Sopenharmony_ci return; 285a46c0ec8Sopenharmony_ci 286a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 287a46c0ec8Sopenharmony_ci 288a46c0ec8Sopenharmony_ci litest_drain_events(li); 289a46c0ec8Sopenharmony_ci 290a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 291a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 70); 292a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 293a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1); 294a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 295a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 296a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 297a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 298a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 299a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1); 300a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 0); 301a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 302a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 303a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 304a46c0ec8Sopenharmony_ci 305a46c0ec8Sopenharmony_ci libinput_dispatch(li); 306a46c0ec8Sopenharmony_ci 307a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 308a46c0ec8Sopenharmony_ci BTN_MIDDLE, 309a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 310a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 311a46c0ec8Sopenharmony_ci BTN_MIDDLE, 312a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 313a46c0ec8Sopenharmony_ci} 314a46c0ec8Sopenharmony_ciEND_TEST 315a46c0ec8Sopenharmony_ci 316a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_4fg_clickfinger) 317a46c0ec8Sopenharmony_ci{ 318a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 319a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 320a46c0ec8Sopenharmony_ci 321a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) < 4) 322a46c0ec8Sopenharmony_ci return; 323a46c0ec8Sopenharmony_ci 324a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 325a46c0ec8Sopenharmony_ci 326a46c0ec8Sopenharmony_ci litest_drain_events(li); 327a46c0ec8Sopenharmony_ci 328a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 329a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 70); 330a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 70, 70); 331a46c0ec8Sopenharmony_ci litest_touch_down(dev, 3, 80, 70); 332a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 333a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 334a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 335a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 336a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 337a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 338a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 339a46c0ec8Sopenharmony_ci litest_touch_up(dev, 3); 340a46c0ec8Sopenharmony_ci 341a46c0ec8Sopenharmony_ci libinput_dispatch(li); 342a46c0ec8Sopenharmony_ci 343a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 344a46c0ec8Sopenharmony_ci} 345a46c0ec8Sopenharmony_ciEND_TEST 346a46c0ec8Sopenharmony_ci 347a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_4fg_clickfinger_btntool_2slots) 348a46c0ec8Sopenharmony_ci{ 349a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 350a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 351a46c0ec8Sopenharmony_ci 352a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) >= 3 || 353a46c0ec8Sopenharmony_ci !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_QUADTAP)) 354a46c0ec8Sopenharmony_ci return; 355a46c0ec8Sopenharmony_ci 356a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 357a46c0ec8Sopenharmony_ci 358a46c0ec8Sopenharmony_ci litest_drain_events(li); 359a46c0ec8Sopenharmony_ci 360a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 361a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 70); 362a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 363a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 1); 364a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 365a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 366a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 367a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 368a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 369a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1); 370a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 0); 371a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 372a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 373a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 374a46c0ec8Sopenharmony_ci 375a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 376a46c0ec8Sopenharmony_ci} 377a46c0ec8Sopenharmony_ciEND_TEST 378a46c0ec8Sopenharmony_ci 379a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_4fg_clickfinger_btntool_3slots) 380a46c0ec8Sopenharmony_ci{ 381a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 382a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 383a46c0ec8Sopenharmony_ci 384a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) != 3 || 385a46c0ec8Sopenharmony_ci !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP)) 386a46c0ec8Sopenharmony_ci return; 387a46c0ec8Sopenharmony_ci 388a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 389a46c0ec8Sopenharmony_ci 390a46c0ec8Sopenharmony_ci litest_drain_events(li); 391a46c0ec8Sopenharmony_ci 392a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 393a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 70); 394a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 70, 70); 395a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 0); 396a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 1); 397a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 398a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 399a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 400a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 401a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 402a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1); 403a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 0); 404a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 405a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 406a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 407a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 408a46c0ec8Sopenharmony_ci 409a46c0ec8Sopenharmony_ci libinput_dispatch(li); 410a46c0ec8Sopenharmony_ci 411a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 412a46c0ec8Sopenharmony_ci} 413a46c0ec8Sopenharmony_ciEND_TEST 414a46c0ec8Sopenharmony_ci 415a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_2fg_clickfinger_distance) 416a46c0ec8Sopenharmony_ci{ 417a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 418a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 419a46c0ec8Sopenharmony_ci double w, h; 420a46c0ec8Sopenharmony_ci bool small_touchpad = false; 421a46c0ec8Sopenharmony_ci unsigned int expected_button; 422a46c0ec8Sopenharmony_ci 423a46c0ec8Sopenharmony_ci if (libinput_device_get_size(dev->libinput_device, &w, &h) == 0 && 424a46c0ec8Sopenharmony_ci h < 50.0) 425a46c0ec8Sopenharmony_ci small_touchpad = true; 426a46c0ec8Sopenharmony_ci 427a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 428a46c0ec8Sopenharmony_ci 429a46c0ec8Sopenharmony_ci litest_drain_events(li); 430a46c0ec8Sopenharmony_ci 431a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 50); 432a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 10, 50); 433a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 434a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 435a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 436a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 437a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 438a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 439a46c0ec8Sopenharmony_ci 440a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 441a46c0ec8Sopenharmony_ci BTN_LEFT, 442a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 443a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 444a46c0ec8Sopenharmony_ci BTN_LEFT, 445a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 446a46c0ec8Sopenharmony_ci 447a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 448a46c0ec8Sopenharmony_ci 449a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 5); 450a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 50, 95); 451a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 452a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 453a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 454a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 455a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 456a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 457a46c0ec8Sopenharmony_ci 458a46c0ec8Sopenharmony_ci /* if the touchpad is small enough, we expect all fingers to count 459a46c0ec8Sopenharmony_ci * for clickfinger */ 460a46c0ec8Sopenharmony_ci if (small_touchpad) 461a46c0ec8Sopenharmony_ci expected_button = BTN_RIGHT; 462a46c0ec8Sopenharmony_ci else 463a46c0ec8Sopenharmony_ci expected_button = BTN_LEFT; 464a46c0ec8Sopenharmony_ci 465a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 466a46c0ec8Sopenharmony_ci expected_button, 467a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 468a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 469a46c0ec8Sopenharmony_ci expected_button, 470a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 471a46c0ec8Sopenharmony_ci} 472a46c0ec8Sopenharmony_ciEND_TEST 473a46c0ec8Sopenharmony_ci 474a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_3fg_clickfinger_distance) 475a46c0ec8Sopenharmony_ci{ 476a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 477a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 478a46c0ec8Sopenharmony_ci 479a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) < 3) 480a46c0ec8Sopenharmony_ci return; 481a46c0ec8Sopenharmony_ci 482a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 483a46c0ec8Sopenharmony_ci 484a46c0ec8Sopenharmony_ci litest_drain_events(li); 485a46c0ec8Sopenharmony_ci 486a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 20); 487a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 10, 15); 488a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 10, 15); 489a46c0ec8Sopenharmony_ci 490a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 491a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 492a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 493a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 494a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 495a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 496a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 497a46c0ec8Sopenharmony_ci 498a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 499a46c0ec8Sopenharmony_ci BTN_MIDDLE, 500a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 501a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 502a46c0ec8Sopenharmony_ci BTN_MIDDLE, 503a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 504a46c0ec8Sopenharmony_ci} 505a46c0ec8Sopenharmony_ciEND_TEST 506a46c0ec8Sopenharmony_ci 507a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_3fg_clickfinger_distance_btntool) 508a46c0ec8Sopenharmony_ci{ 509a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 510a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 511a46c0ec8Sopenharmony_ci 512a46c0ec8Sopenharmony_ci if (litest_slot_count(dev) > 2) 513a46c0ec8Sopenharmony_ci return; 514a46c0ec8Sopenharmony_ci 515a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 516a46c0ec8Sopenharmony_ci 517a46c0ec8Sopenharmony_ci litest_drain_events(li); 518a46c0ec8Sopenharmony_ci 519a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 15); 520a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 10, 15); 521a46c0ec8Sopenharmony_ci libinput_dispatch(li); 522a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 523a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1); 524a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 525a46c0ec8Sopenharmony_ci libinput_dispatch(li); 526a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 527a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 528a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 529a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 530a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1); 531a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 0); 532a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 533a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 534a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 535a46c0ec8Sopenharmony_ci 536a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 537a46c0ec8Sopenharmony_ci BTN_MIDDLE, 538a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 539a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 540a46c0ec8Sopenharmony_ci BTN_MIDDLE, 541a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 542a46c0ec8Sopenharmony_ci} 543a46c0ec8Sopenharmony_ciEND_TEST 544a46c0ec8Sopenharmony_ci 545a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_2fg_clickfinger_bottom) 546a46c0ec8Sopenharmony_ci{ 547a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 548a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 549a46c0ec8Sopenharmony_ci 550a46c0ec8Sopenharmony_ci /* this test is run for the T440s touchpad only, makes getting the 551a46c0ec8Sopenharmony_ci * mm correct easier */ 552a46c0ec8Sopenharmony_ci 553a46c0ec8Sopenharmony_ci libinput_device_config_click_set_method(dev->libinput_device, 554a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 555a46c0ec8Sopenharmony_ci litest_drain_events(li); 556a46c0ec8Sopenharmony_ci 557a46c0ec8Sopenharmony_ci /* one above, one below the magic line, vert spread ca 27mm */ 558a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 40, 60); 559a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 100); 560a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 561a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 562a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 563a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 564a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 565a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 566a46c0ec8Sopenharmony_ci 567a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 568a46c0ec8Sopenharmony_ci BTN_LEFT, 569a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 570a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 571a46c0ec8Sopenharmony_ci BTN_LEFT, 572a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 573a46c0ec8Sopenharmony_ci 574a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 575a46c0ec8Sopenharmony_ci 576a46c0ec8Sopenharmony_ci /* both below the magic line */ 577a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 40, 100); 578a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 60, 95); 579a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 580a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 581a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 582a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 583a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 584a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 585a46c0ec8Sopenharmony_ci 586a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 587a46c0ec8Sopenharmony_ci BTN_RIGHT, 588a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 589a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 590a46c0ec8Sopenharmony_ci BTN_RIGHT, 591a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 592a46c0ec8Sopenharmony_ci 593a46c0ec8Sopenharmony_ci /* one above, one below the magic line, vert spread 17mm */ 594a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 75); 595a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 55, 100); 596a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 597a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 598a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 599a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 600a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 601a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 602a46c0ec8Sopenharmony_ci 603a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 604a46c0ec8Sopenharmony_ci BTN_RIGHT, 605a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 606a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 607a46c0ec8Sopenharmony_ci BTN_RIGHT, 608a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 609a46c0ec8Sopenharmony_ci} 610a46c0ec8Sopenharmony_ciEND_TEST 611a46c0ec8Sopenharmony_ci 612a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_to_area_method) 613a46c0ec8Sopenharmony_ci{ 614a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 615a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 616a46c0ec8Sopenharmony_ci 617a46c0ec8Sopenharmony_ci litest_drain_events(li); 618a46c0ec8Sopenharmony_ci 619a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 620a46c0ec8Sopenharmony_ci 621a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 622a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 623a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 624a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 625a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 626a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 627a46c0ec8Sopenharmony_ci libinput_dispatch(li); 628a46c0ec8Sopenharmony_ci 629a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 630a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 631a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 632a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 633a46c0ec8Sopenharmony_ci 634a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 635a46c0ec8Sopenharmony_ci 636a46c0ec8Sopenharmony_ci litest_drain_events(li); 637a46c0ec8Sopenharmony_ci 638a46c0ec8Sopenharmony_ci /* use bottom right corner to catch accidental softbutton right */ 639a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 640a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 641a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 642a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 643a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 644a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 645a46c0ec8Sopenharmony_ci libinput_dispatch(li); 646a46c0ec8Sopenharmony_ci 647a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 648a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 649a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 650a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 651a46c0ec8Sopenharmony_ci 652a46c0ec8Sopenharmony_ci} 653a46c0ec8Sopenharmony_ciEND_TEST 654a46c0ec8Sopenharmony_ci 655a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_to_area_method_while_down) 656a46c0ec8Sopenharmony_ci{ 657a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 658a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 659a46c0ec8Sopenharmony_ci 660a46c0ec8Sopenharmony_ci litest_drain_events(li); 661a46c0ec8Sopenharmony_ci 662a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 663a46c0ec8Sopenharmony_ci 664a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 665a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 666a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 667a46c0ec8Sopenharmony_ci libinput_dispatch(li); 668a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 669a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 670a46c0ec8Sopenharmony_ci 671a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 672a46c0ec8Sopenharmony_ci 673a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 674a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 675a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 676a46c0ec8Sopenharmony_ci libinput_dispatch(li); 677a46c0ec8Sopenharmony_ci 678a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 679a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 680a46c0ec8Sopenharmony_ci 681a46c0ec8Sopenharmony_ci litest_drain_events(li); 682a46c0ec8Sopenharmony_ci 683a46c0ec8Sopenharmony_ci /* use bottom right corner to catch accidental softbutton right */ 684a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 685a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 686a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 687a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 688a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 689a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 690a46c0ec8Sopenharmony_ci libinput_dispatch(li); 691a46c0ec8Sopenharmony_ci 692a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 693a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 694a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 695a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 696a46c0ec8Sopenharmony_ci 697a46c0ec8Sopenharmony_ci} 698a46c0ec8Sopenharmony_ciEND_TEST 699a46c0ec8Sopenharmony_ci 700a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_area_to_clickfinger_method) 701a46c0ec8Sopenharmony_ci{ 702a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 703a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 704a46c0ec8Sopenharmony_ci 705a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 706a46c0ec8Sopenharmony_ci 707a46c0ec8Sopenharmony_ci litest_drain_events(li); 708a46c0ec8Sopenharmony_ci 709a46c0ec8Sopenharmony_ci /* use bottom right corner to catch accidental softbutton right */ 710a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 711a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 712a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 713a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 714a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 715a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 716a46c0ec8Sopenharmony_ci libinput_dispatch(li); 717a46c0ec8Sopenharmony_ci 718a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 719a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 720a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 721a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 722a46c0ec8Sopenharmony_ci 723a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 724a46c0ec8Sopenharmony_ci 725a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 726a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 727a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 728a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 729a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 730a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 731a46c0ec8Sopenharmony_ci libinput_dispatch(li); 732a46c0ec8Sopenharmony_ci 733a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 734a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 735a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 736a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 737a46c0ec8Sopenharmony_ci 738a46c0ec8Sopenharmony_ci} 739a46c0ec8Sopenharmony_ciEND_TEST 740a46c0ec8Sopenharmony_ci 741a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_area_to_clickfinger_method_while_down) 742a46c0ec8Sopenharmony_ci{ 743a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 744a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 745a46c0ec8Sopenharmony_ci 746a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 747a46c0ec8Sopenharmony_ci 748a46c0ec8Sopenharmony_ci litest_drain_events(li); 749a46c0ec8Sopenharmony_ci 750a46c0ec8Sopenharmony_ci /* use bottom right corner to catch accidental softbutton right */ 751a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 752a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 753a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 754a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 755a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 756a46c0ec8Sopenharmony_ci 757a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 758a46c0ec8Sopenharmony_ci 759a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 760a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 761a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 762a46c0ec8Sopenharmony_ci libinput_dispatch(li); 763a46c0ec8Sopenharmony_ci 764a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 765a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 766a46c0ec8Sopenharmony_ci 767a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 95, 95); 768a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 769a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 770a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 771a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 772a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 773a46c0ec8Sopenharmony_ci libinput_dispatch(li); 774a46c0ec8Sopenharmony_ci 775a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 776a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 777a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 778a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 779a46c0ec8Sopenharmony_ci 780a46c0ec8Sopenharmony_ci} 781a46c0ec8Sopenharmony_ciEND_TEST 782a46c0ec8Sopenharmony_ci 783a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_3fg_tool_position) 784a46c0ec8Sopenharmony_ci{ 785a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 786a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 787a46c0ec8Sopenharmony_ci 788a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 789a46c0ec8Sopenharmony_ci litest_drain_events(li); 790a46c0ec8Sopenharmony_ci 791a46c0ec8Sopenharmony_ci /* one in thumb area, one in normal area + TRIPLETAP. spread is wide 792a46c0ec8Sopenharmony_ci * but any non-palm 3fg touch+click counts as middle */ 793a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 20, 99); 794a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 90, 15); 795a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 796a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1); 797a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 798a46c0ec8Sopenharmony_ci libinput_dispatch(li); 799a46c0ec8Sopenharmony_ci 800a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 801a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 802a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 803a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 804a46c0ec8Sopenharmony_ci libinput_dispatch(li); 805a46c0ec8Sopenharmony_ci 806a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 807a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 808a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 809a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 810a46c0ec8Sopenharmony_ci} 811a46c0ec8Sopenharmony_ciEND_TEST 812a46c0ec8Sopenharmony_ci 813a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_4fg_tool_position) 814a46c0ec8Sopenharmony_ci{ 815a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 816a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 817a46c0ec8Sopenharmony_ci 818a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 819a46c0ec8Sopenharmony_ci litest_drain_events(li); 820a46c0ec8Sopenharmony_ci 821a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 5, 99); 822a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 90, 15); 823a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 824a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 1); 825a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 826a46c0ec8Sopenharmony_ci libinput_dispatch(li); 827a46c0ec8Sopenharmony_ci 828a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 829a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 830a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 831a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 832a46c0ec8Sopenharmony_ci libinput_dispatch(li); 833a46c0ec8Sopenharmony_ci 834a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 835a46c0ec8Sopenharmony_ci BTN_MIDDLE, 836a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 837a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 838a46c0ec8Sopenharmony_ci BTN_MIDDLE, 839a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 840a46c0ec8Sopenharmony_ci} 841a46c0ec8Sopenharmony_ciEND_TEST 842a46c0ec8Sopenharmony_ci 843a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_appletouch_config) 844a46c0ec8Sopenharmony_ci{ 845a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 846a46c0ec8Sopenharmony_ci struct libinput_device *device = dev->libinput_device; 847a46c0ec8Sopenharmony_ci uint32_t methods, method; 848a46c0ec8Sopenharmony_ci enum libinput_config_status status; 849a46c0ec8Sopenharmony_ci 850a46c0ec8Sopenharmony_ci methods = libinput_device_config_click_get_methods(device); 851a46c0ec8Sopenharmony_ci ck_assert(!(methods & LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS)); 852a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 853a46c0ec8Sopenharmony_ci 854a46c0ec8Sopenharmony_ci method = libinput_device_config_click_get_method(device); 855a46c0ec8Sopenharmony_ci ck_assert_int_eq(method, LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 856a46c0ec8Sopenharmony_ci 857a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 858a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 859a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED); 860a46c0ec8Sopenharmony_ci status = libinput_device_config_click_set_method(device, 861a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_CLICK_METHOD_NONE); 862a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 863a46c0ec8Sopenharmony_ci} 864a46c0ec8Sopenharmony_ciEND_TEST 865a46c0ec8Sopenharmony_ci 866a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_appletouch_1fg) 867a46c0ec8Sopenharmony_ci{ 868a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 869a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 870a46c0ec8Sopenharmony_ci 871a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 872a46c0ec8Sopenharmony_ci 873a46c0ec8Sopenharmony_ci litest_drain_events(li); 874a46c0ec8Sopenharmony_ci 875a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 876a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 877a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 878a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 879a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 880a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 881a46c0ec8Sopenharmony_ci 882a46c0ec8Sopenharmony_ci libinput_dispatch(li); 883a46c0ec8Sopenharmony_ci 884a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 885a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 886a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 887a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 888a46c0ec8Sopenharmony_ci} 889a46c0ec8Sopenharmony_ciEND_TEST 890a46c0ec8Sopenharmony_ci 891a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_appletouch_2fg) 892a46c0ec8Sopenharmony_ci{ 893a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 894a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 895a46c0ec8Sopenharmony_ci 896a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 897a46c0ec8Sopenharmony_ci 898a46c0ec8Sopenharmony_ci litest_drain_events(li); 899a46c0ec8Sopenharmony_ci 900a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 901a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 50, 50); 902a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 903a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 904a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 905a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 906a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 907a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 908a46c0ec8Sopenharmony_ci 909a46c0ec8Sopenharmony_ci libinput_dispatch(li); 910a46c0ec8Sopenharmony_ci 911a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 912a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 913a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, 914a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 915a46c0ec8Sopenharmony_ci} 916a46c0ec8Sopenharmony_ciEND_TEST 917a46c0ec8Sopenharmony_ci 918a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_appletouch_3fg) 919a46c0ec8Sopenharmony_ci{ 920a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 921a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 922a46c0ec8Sopenharmony_ci 923a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 924a46c0ec8Sopenharmony_ci 925a46c0ec8Sopenharmony_ci litest_drain_events(li); 926a46c0ec8Sopenharmony_ci 927a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 928a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 50, 50); 929a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 50, 50); 930a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 931a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 932a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 933a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 934a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 935a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 936a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 937a46c0ec8Sopenharmony_ci 938a46c0ec8Sopenharmony_ci libinput_dispatch(li); 939a46c0ec8Sopenharmony_ci 940a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_MIDDLE, 941a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 942a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_MIDDLE, 943a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 944a46c0ec8Sopenharmony_ci} 945a46c0ec8Sopenharmony_ciEND_TEST 946a46c0ec8Sopenharmony_ci 947a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_clickfinger_click_drag) 948a46c0ec8Sopenharmony_ci{ 949a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 950a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 951a46c0ec8Sopenharmony_ci int nfingers = _i; /* ranged test */ 952a46c0ec8Sopenharmony_ci unsigned int button; 953a46c0ec8Sopenharmony_ci int nslots = litest_slot_count(dev); 954a46c0ec8Sopenharmony_ci 955a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 956a46c0ec8Sopenharmony_ci litest_drain_events(li); 957a46c0ec8Sopenharmony_ci 958a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 40, 50); 959a46c0ec8Sopenharmony_ci button = BTN_LEFT; 960a46c0ec8Sopenharmony_ci 961a46c0ec8Sopenharmony_ci if (nfingers > 1) { 962a46c0ec8Sopenharmony_ci if (nslots > 1) { 963a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 50, 50); 964a46c0ec8Sopenharmony_ci } else { 965a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1); 966a46c0ec8Sopenharmony_ci } 967a46c0ec8Sopenharmony_ci button = BTN_RIGHT; 968a46c0ec8Sopenharmony_ci } 969a46c0ec8Sopenharmony_ci 970a46c0ec8Sopenharmony_ci if (nfingers > 2) { 971a46c0ec8Sopenharmony_ci if (nslots > 2) { 972a46c0ec8Sopenharmony_ci litest_touch_down(dev, 2, 60, 50); 973a46c0ec8Sopenharmony_ci } else { 974a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 975a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1); 976a46c0ec8Sopenharmony_ci } 977a46c0ec8Sopenharmony_ci button = BTN_MIDDLE; 978a46c0ec8Sopenharmony_ci } 979a46c0ec8Sopenharmony_ci 980a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, true); 981a46c0ec8Sopenharmony_ci 982a46c0ec8Sopenharmony_ci libinput_dispatch(li); 983a46c0ec8Sopenharmony_ci litest_assert_button_event(li, button, 984a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 985a46c0ec8Sopenharmony_ci 986a46c0ec8Sopenharmony_ci for (int i = 0; i < 20; i++) { 987a46c0ec8Sopenharmony_ci litest_push_event_frame(dev); 988a46c0ec8Sopenharmony_ci switch (nfingers) { 989a46c0ec8Sopenharmony_ci case 3: 990a46c0ec8Sopenharmony_ci if (nslots >= nfingers) 991a46c0ec8Sopenharmony_ci litest_touch_move(dev, 2, 60, 50 + i); 992a46c0ec8Sopenharmony_ci _fallthrough_; 993a46c0ec8Sopenharmony_ci case 2: 994a46c0ec8Sopenharmony_ci if (nslots >= nfingers) 995a46c0ec8Sopenharmony_ci litest_touch_move(dev, 1, 50, 50 + i); 996a46c0ec8Sopenharmony_ci _fallthrough_; 997a46c0ec8Sopenharmony_ci case 1: 998a46c0ec8Sopenharmony_ci litest_touch_move(dev, 0, 40, 50 + i); 999a46c0ec8Sopenharmony_ci break; 1000a46c0ec8Sopenharmony_ci } 1001a46c0ec8Sopenharmony_ci litest_pop_event_frame(dev); 1002a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1003a46c0ec8Sopenharmony_ci } 1004a46c0ec8Sopenharmony_ci 1005a46c0ec8Sopenharmony_ci litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); 1006a46c0ec8Sopenharmony_ci 1007a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, false); 1008a46c0ec8Sopenharmony_ci litest_assert_button_event(li, button, 1009a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1010a46c0ec8Sopenharmony_ci 1011a46c0ec8Sopenharmony_ci if (nfingers > 3) { 1012a46c0ec8Sopenharmony_ci if (nslots > 3) { 1013a46c0ec8Sopenharmony_ci litest_touch_up(dev, 2); 1014a46c0ec8Sopenharmony_ci } else { 1015a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1); 1016a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 0); 1017a46c0ec8Sopenharmony_ci } 1018a46c0ec8Sopenharmony_ci } 1019a46c0ec8Sopenharmony_ci 1020a46c0ec8Sopenharmony_ci if (nfingers > 2) { 1021a46c0ec8Sopenharmony_ci if (nslots > 2) { 1022a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1023a46c0ec8Sopenharmony_ci } else { 1024a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0); 1025a46c0ec8Sopenharmony_ci } 1026a46c0ec8Sopenharmony_ci } 1027a46c0ec8Sopenharmony_ci 1028a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1029a46c0ec8Sopenharmony_ci 1030a46c0ec8Sopenharmony_ci 1031a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1032a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1033a46c0ec8Sopenharmony_ci} 1034a46c0ec8Sopenharmony_ciEND_TEST 1035a46c0ec8Sopenharmony_ci 1036a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_btn_left) 1037a46c0ec8Sopenharmony_ci{ 1038a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1039a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1040a46c0ec8Sopenharmony_ci 1041a46c0ec8Sopenharmony_ci litest_drain_events(li); 1042a46c0ec8Sopenharmony_ci 1043a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1044a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1045a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1046a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1047a46c0ec8Sopenharmony_ci 1048a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1049a46c0ec8Sopenharmony_ci 1050a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 1051a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1052a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 1053a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1054a46c0ec8Sopenharmony_ci} 1055a46c0ec8Sopenharmony_ciEND_TEST 1056a46c0ec8Sopenharmony_ci 1057a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_btn_left) 1058a46c0ec8Sopenharmony_ci{ 1059a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1060a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1061a46c0ec8Sopenharmony_ci 1062a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 1063a46c0ec8Sopenharmony_ci 1064a46c0ec8Sopenharmony_ci litest_drain_events(li); 1065a46c0ec8Sopenharmony_ci 1066a46c0ec8Sopenharmony_ci /* A clickpad always needs a finger down to tell where the 1067a46c0ec8Sopenharmony_ci click happens */ 1068a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1069a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1070a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1071a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1072a46c0ec8Sopenharmony_ci 1073a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1074a46c0ec8Sopenharmony_ci ck_assert_int_eq(libinput_next_event_type(li), LIBINPUT_EVENT_NONE); 1075a46c0ec8Sopenharmony_ci} 1076a46c0ec8Sopenharmony_ciEND_TEST 1077a46c0ec8Sopenharmony_ci 1078a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_click_n_drag) 1079a46c0ec8Sopenharmony_ci{ 1080a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1081a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1082a46c0ec8Sopenharmony_ci 1083a46c0ec8Sopenharmony_ci litest_drain_events(li); 1084a46c0ec8Sopenharmony_ci 1085a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 1086a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1087a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1088a46c0ec8Sopenharmony_ci 1089a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1090a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 1091a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1092a46c0ec8Sopenharmony_ci 1093a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1094a46c0ec8Sopenharmony_ci ck_assert_int_eq(libinput_next_event_type(li), LIBINPUT_EVENT_NONE); 1095a46c0ec8Sopenharmony_ci 1096a46c0ec8Sopenharmony_ci /* now put a second finger down */ 1097a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 70, 70); 1098a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 1, 70, 70, 80, 50, 5); 1099a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1100a46c0ec8Sopenharmony_ci 1101a46c0ec8Sopenharmony_ci litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); 1102a46c0ec8Sopenharmony_ci 1103a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1104a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1105a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1106a46c0ec8Sopenharmony_ci 1107a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, 1108a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1109a46c0ec8Sopenharmony_ci} 1110a46c0ec8Sopenharmony_ciEND_TEST 1111a46c0ec8Sopenharmony_ci 1112a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_finger_pin) 1113a46c0ec8Sopenharmony_ci{ 1114a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1115a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1116a46c0ec8Sopenharmony_ci struct libevdev *evdev = dev->evdev; 1117a46c0ec8Sopenharmony_ci const struct input_absinfo *abs; 1118a46c0ec8Sopenharmony_ci double w, h; 1119a46c0ec8Sopenharmony_ci double dist; 1120a46c0ec8Sopenharmony_ci 1121a46c0ec8Sopenharmony_ci abs = libevdev_get_abs_info(evdev, ABS_MT_POSITION_X); 1122a46c0ec8Sopenharmony_ci ck_assert_notnull(abs); 1123a46c0ec8Sopenharmony_ci if (abs->resolution == 0) 1124a46c0ec8Sopenharmony_ci return; 1125a46c0ec8Sopenharmony_ci 1126a46c0ec8Sopenharmony_ci if (libinput_device_get_size(dev->libinput_device, &w, &h) != 0) 1127a46c0ec8Sopenharmony_ci return; 1128a46c0ec8Sopenharmony_ci 1129a46c0ec8Sopenharmony_ci dist = 100.0/max(w, h); 1130a46c0ec8Sopenharmony_ci 1131a46c0ec8Sopenharmony_ci litest_drain_events(li); 1132a46c0ec8Sopenharmony_ci 1133a46c0ec8Sopenharmony_ci /* make sure the movement generates pointer events when 1134a46c0ec8Sopenharmony_ci not pinned */ 1135a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 50); 1136a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 54, 54, 10); 1137a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 54, 54, 46, 46, 10); 1138a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 46, 46, 50, 50, 10); 1139a46c0ec8Sopenharmony_ci litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); 1140a46c0ec8Sopenharmony_ci 1141a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, true); 1142a46c0ec8Sopenharmony_ci litest_drain_events(li); 1143a46c0ec8Sopenharmony_ci 1144a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 50 + dist, 50 + dist, 10); 1145a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50 + dist, 50 + dist, 50, 50, 10); 1146a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 50 - dist, 50 - dist, 10); 1147a46c0ec8Sopenharmony_ci 1148a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1149a46c0ec8Sopenharmony_ci 1150a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, false); 1151a46c0ec8Sopenharmony_ci litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_BUTTON); 1152a46c0ec8Sopenharmony_ci 1153a46c0ec8Sopenharmony_ci /* still pinned after release */ 1154a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 50 + dist, 50 + dist, 10); 1155a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50 + dist, 50 + dist, 50, 50, 10); 1156a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 50 - dist, 50 - dist, 10); 1157a46c0ec8Sopenharmony_ci 1158a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1159a46c0ec8Sopenharmony_ci 1160a46c0ec8Sopenharmony_ci /* move to unpin */ 1161a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 70, 70, 10); 1162a46c0ec8Sopenharmony_ci litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); 1163a46c0ec8Sopenharmony_ci} 1164a46c0ec8Sopenharmony_ciEND_TEST 1165a46c0ec8Sopenharmony_ci 1166a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_left) 1167a46c0ec8Sopenharmony_ci{ 1168a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1169a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1170a46c0ec8Sopenharmony_ci 1171a46c0ec8Sopenharmony_ci litest_drain_events(li); 1172a46c0ec8Sopenharmony_ci 1173a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 10, 90); 1174a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1175a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1176a46c0ec8Sopenharmony_ci 1177a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1178a46c0ec8Sopenharmony_ci BTN_LEFT, 1179a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1180a46c0ec8Sopenharmony_ci 1181a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1182a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1183a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1184a46c0ec8Sopenharmony_ci 1185a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1186a46c0ec8Sopenharmony_ci BTN_LEFT, 1187a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1188a46c0ec8Sopenharmony_ci 1189a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1190a46c0ec8Sopenharmony_ci 1191a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1192a46c0ec8Sopenharmony_ci} 1193a46c0ec8Sopenharmony_ciEND_TEST 1194a46c0ec8Sopenharmony_ci 1195a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_middle) 1196a46c0ec8Sopenharmony_ci{ 1197a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1198a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1199a46c0ec8Sopenharmony_ci 1200a46c0ec8Sopenharmony_ci litest_drain_events(li); 1201a46c0ec8Sopenharmony_ci 1202a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 90); 1203a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1204a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1205a46c0ec8Sopenharmony_ci 1206a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1207a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1208a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1209a46c0ec8Sopenharmony_ci 1210a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1211a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1212a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1213a46c0ec8Sopenharmony_ci 1214a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1215a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1216a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1217a46c0ec8Sopenharmony_ci 1218a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1219a46c0ec8Sopenharmony_ci 1220a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1221a46c0ec8Sopenharmony_ci} 1222a46c0ec8Sopenharmony_ciEND_TEST 1223a46c0ec8Sopenharmony_ci 1224a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_right) 1225a46c0ec8Sopenharmony_ci{ 1226a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1227a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1228a46c0ec8Sopenharmony_ci 1229a46c0ec8Sopenharmony_ci litest_drain_events(li); 1230a46c0ec8Sopenharmony_ci 1231a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 90); 1232a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1233a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1234a46c0ec8Sopenharmony_ci 1235a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1236a46c0ec8Sopenharmony_ci BTN_RIGHT, 1237a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1238a46c0ec8Sopenharmony_ci 1239a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1240a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1241a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1242a46c0ec8Sopenharmony_ci 1243a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1244a46c0ec8Sopenharmony_ci BTN_RIGHT, 1245a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1246a46c0ec8Sopenharmony_ci 1247a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1248a46c0ec8Sopenharmony_ci 1249a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1250a46c0ec8Sopenharmony_ci} 1251a46c0ec8Sopenharmony_ciEND_TEST 1252a46c0ec8Sopenharmony_ci 1253a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_left_tap_n_drag) 1254a46c0ec8Sopenharmony_ci{ 1255a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1256a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1257a46c0ec8Sopenharmony_ci 1258a46c0ec8Sopenharmony_ci litest_enable_tap(dev->libinput_device); 1259a46c0ec8Sopenharmony_ci 1260a46c0ec8Sopenharmony_ci litest_drain_events(li); 1261a46c0ec8Sopenharmony_ci 1262a46c0ec8Sopenharmony_ci /* Tap in left button area, then finger down, button click 1263a46c0ec8Sopenharmony_ci -> expect left button press/release and left button press 1264a46c0ec8Sopenharmony_ci Release button, finger up 1265a46c0ec8Sopenharmony_ci -> expect right button release 1266a46c0ec8Sopenharmony_ci */ 1267a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 20, 90); 1268a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1269a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 20, 90); 1270a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1271a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1272a46c0ec8Sopenharmony_ci 1273a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1274a46c0ec8Sopenharmony_ci BTN_LEFT, 1275a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1276a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1277a46c0ec8Sopenharmony_ci BTN_LEFT, 1278a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1279a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1280a46c0ec8Sopenharmony_ci BTN_LEFT, 1281a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1282a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1283a46c0ec8Sopenharmony_ci 1284a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1285a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1286a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1287a46c0ec8Sopenharmony_ci 1288a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1289a46c0ec8Sopenharmony_ci BTN_LEFT, 1290a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1291a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1292a46c0ec8Sopenharmony_ci} 1293a46c0ec8Sopenharmony_ciEND_TEST 1294a46c0ec8Sopenharmony_ci 1295a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_right_tap_n_drag) 1296a46c0ec8Sopenharmony_ci{ 1297a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1298a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1299a46c0ec8Sopenharmony_ci 1300a46c0ec8Sopenharmony_ci litest_enable_tap(dev->libinput_device); 1301a46c0ec8Sopenharmony_ci 1302a46c0ec8Sopenharmony_ci litest_drain_events(li); 1303a46c0ec8Sopenharmony_ci 1304a46c0ec8Sopenharmony_ci /* Tap in right button area, then finger down, button click 1305a46c0ec8Sopenharmony_ci -> expect left button press/release and right button press 1306a46c0ec8Sopenharmony_ci Release button, finger up 1307a46c0ec8Sopenharmony_ci -> expect right button release 1308a46c0ec8Sopenharmony_ci */ 1309a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 90); 1310a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1311a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 90); 1312a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1313a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1314a46c0ec8Sopenharmony_ci 1315a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1316a46c0ec8Sopenharmony_ci BTN_LEFT, 1317a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1318a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1319a46c0ec8Sopenharmony_ci BTN_LEFT, 1320a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1321a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1322a46c0ec8Sopenharmony_ci BTN_RIGHT, 1323a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1324a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1325a46c0ec8Sopenharmony_ci 1326a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1327a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1328a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1329a46c0ec8Sopenharmony_ci 1330a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1331a46c0ec8Sopenharmony_ci BTN_RIGHT, 1332a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1333a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1334a46c0ec8Sopenharmony_ci} 1335a46c0ec8Sopenharmony_ciEND_TEST 1336a46c0ec8Sopenharmony_ci 1337a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_left_1st_fg_move) 1338a46c0ec8Sopenharmony_ci{ 1339a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1340a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1341a46c0ec8Sopenharmony_ci struct libinput_event *event; 1342a46c0ec8Sopenharmony_ci double x = 0, y = 0; 1343a46c0ec8Sopenharmony_ci int nevents = 0; 1344a46c0ec8Sopenharmony_ci 1345a46c0ec8Sopenharmony_ci litest_drain_events(li); 1346a46c0ec8Sopenharmony_ci 1347a46c0ec8Sopenharmony_ci /* One finger down in the left button area, button press 1348a46c0ec8Sopenharmony_ci -> expect a button event 1349a46c0ec8Sopenharmony_ci Move finger up out of the area, wait for timeout 1350a46c0ec8Sopenharmony_ci Move finger around diagonally down left 1351a46c0ec8Sopenharmony_ci -> expect motion events down left 1352a46c0ec8Sopenharmony_ci Release finger 1353a46c0ec8Sopenharmony_ci -> expect a button event */ 1354a46c0ec8Sopenharmony_ci 1355a46c0ec8Sopenharmony_ci /* finger down, press in left button */ 1356a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 20, 90); 1357a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1358a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1359a46c0ec8Sopenharmony_ci 1360a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1361a46c0ec8Sopenharmony_ci BTN_LEFT, 1362a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1363a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1364a46c0ec8Sopenharmony_ci 1365a46c0ec8Sopenharmony_ci /* move out of the area, then wait for softbutton timer */ 1366a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 20, 90, 50, 50, 20); 1367a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1368a46c0ec8Sopenharmony_ci litest_timeout_softbuttons(); 1369a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1370a46c0ec8Sopenharmony_ci litest_drain_events(li); 1371a46c0ec8Sopenharmony_ci 1372a46c0ec8Sopenharmony_ci /* move down left, expect motion */ 1373a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 50, 50, 20, 90, 20); 1374a46c0ec8Sopenharmony_ci 1375a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1376a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1377a46c0ec8Sopenharmony_ci ck_assert_notnull(event); 1378a46c0ec8Sopenharmony_ci while (event) { 1379a46c0ec8Sopenharmony_ci struct libinput_event_pointer *p; 1380a46c0ec8Sopenharmony_ci 1381a46c0ec8Sopenharmony_ci ck_assert_int_eq(libinput_event_get_type(event), 1382a46c0ec8Sopenharmony_ci LIBINPUT_EVENT_POINTER_MOTION); 1383a46c0ec8Sopenharmony_ci p = libinput_event_get_pointer_event(event); 1384a46c0ec8Sopenharmony_ci 1385a46c0ec8Sopenharmony_ci /* we moved up/right, now down/left so the pointer accel 1386a46c0ec8Sopenharmony_ci code may lag behind with the dx/dy vectors. Hence, add up 1387a46c0ec8Sopenharmony_ci the x/y movements and expect that on average we moved 1388a46c0ec8Sopenharmony_ci left and down */ 1389a46c0ec8Sopenharmony_ci x += libinput_event_pointer_get_dx(p); 1390a46c0ec8Sopenharmony_ci y += libinput_event_pointer_get_dy(p); 1391a46c0ec8Sopenharmony_ci nevents++; 1392a46c0ec8Sopenharmony_ci 1393a46c0ec8Sopenharmony_ci libinput_event_destroy(event); 1394a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1395a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1396a46c0ec8Sopenharmony_ci } 1397a46c0ec8Sopenharmony_ci 1398a46c0ec8Sopenharmony_ci ck_assert(x/nevents < 0); 1399a46c0ec8Sopenharmony_ci ck_assert(y/nevents > 0); 1400a46c0ec8Sopenharmony_ci 1401a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1402a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1403a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1404a46c0ec8Sopenharmony_ci 1405a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1406a46c0ec8Sopenharmony_ci BTN_LEFT, 1407a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1408a46c0ec8Sopenharmony_ci 1409a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1410a46c0ec8Sopenharmony_ci} 1411a46c0ec8Sopenharmony_ciEND_TEST 1412a46c0ec8Sopenharmony_ci 1413a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_left_2nd_fg_move) 1414a46c0ec8Sopenharmony_ci{ 1415a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1416a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1417a46c0ec8Sopenharmony_ci struct libinput_event *event; 1418a46c0ec8Sopenharmony_ci 1419a46c0ec8Sopenharmony_ci litest_drain_events(li); 1420a46c0ec8Sopenharmony_ci 1421a46c0ec8Sopenharmony_ci /* One finger down in the left button area, button press 1422a46c0ec8Sopenharmony_ci -> expect a button event 1423a46c0ec8Sopenharmony_ci Put a second finger down in the area, move it right, release 1424a46c0ec8Sopenharmony_ci -> expect motion events right 1425a46c0ec8Sopenharmony_ci Put a second finger down in the area, move it down, release 1426a46c0ec8Sopenharmony_ci -> expect motion events down 1427a46c0ec8Sopenharmony_ci Release second finger, release first finger 1428a46c0ec8Sopenharmony_ci -> expect a button event */ 1429a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 20, 90); 1430a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1431a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1432a46c0ec8Sopenharmony_ci 1433a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1434a46c0ec8Sopenharmony_ci BTN_LEFT, 1435a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1436a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1437a46c0ec8Sopenharmony_ci 1438a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 20, 20); 1439a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 1, 20, 20, 80, 20, 15); 1440a46c0ec8Sopenharmony_ci 1441a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1442a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1443a46c0ec8Sopenharmony_ci ck_assert_notnull(event); 1444a46c0ec8Sopenharmony_ci while (event) { 1445a46c0ec8Sopenharmony_ci struct libinput_event_pointer *p; 1446a46c0ec8Sopenharmony_ci double x, y; 1447a46c0ec8Sopenharmony_ci 1448a46c0ec8Sopenharmony_ci ck_assert_int_eq(libinput_event_get_type(event), 1449a46c0ec8Sopenharmony_ci LIBINPUT_EVENT_POINTER_MOTION); 1450a46c0ec8Sopenharmony_ci p = libinput_event_get_pointer_event(event); 1451a46c0ec8Sopenharmony_ci 1452a46c0ec8Sopenharmony_ci x = libinput_event_pointer_get_dx(p); 1453a46c0ec8Sopenharmony_ci y = libinput_event_pointer_get_dy(p); 1454a46c0ec8Sopenharmony_ci 1455a46c0ec8Sopenharmony_ci /* Ignore events only containing an unaccelerated motion 1456a46c0ec8Sopenharmony_ci * vector. */ 1457a46c0ec8Sopenharmony_ci if (x != 0 || y != 0) { 1458a46c0ec8Sopenharmony_ci ck_assert(x > 0); 1459a46c0ec8Sopenharmony_ci ck_assert(y == 0); 1460a46c0ec8Sopenharmony_ci } 1461a46c0ec8Sopenharmony_ci 1462a46c0ec8Sopenharmony_ci libinput_event_destroy(event); 1463a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1464a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1465a46c0ec8Sopenharmony_ci } 1466a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1467a46c0ec8Sopenharmony_ci 1468a46c0ec8Sopenharmony_ci /* second finger down */ 1469a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 20, 20); 1470a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 1, 20, 20, 20, 80, 15); 1471a46c0ec8Sopenharmony_ci 1472a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1473a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1474a46c0ec8Sopenharmony_ci ck_assert_notnull(event); 1475a46c0ec8Sopenharmony_ci while (event) { 1476a46c0ec8Sopenharmony_ci struct libinput_event_pointer *p; 1477a46c0ec8Sopenharmony_ci double x, y; 1478a46c0ec8Sopenharmony_ci 1479a46c0ec8Sopenharmony_ci ck_assert_int_eq(libinput_event_get_type(event), 1480a46c0ec8Sopenharmony_ci LIBINPUT_EVENT_POINTER_MOTION); 1481a46c0ec8Sopenharmony_ci p = libinput_event_get_pointer_event(event); 1482a46c0ec8Sopenharmony_ci 1483a46c0ec8Sopenharmony_ci x = libinput_event_pointer_get_dx(p); 1484a46c0ec8Sopenharmony_ci y = libinput_event_pointer_get_dy(p); 1485a46c0ec8Sopenharmony_ci 1486a46c0ec8Sopenharmony_ci ck_assert(x == 0); 1487a46c0ec8Sopenharmony_ci ck_assert(y > 0); 1488a46c0ec8Sopenharmony_ci 1489a46c0ec8Sopenharmony_ci libinput_event_destroy(event); 1490a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1491a46c0ec8Sopenharmony_ci event = libinput_get_event(li); 1492a46c0ec8Sopenharmony_ci } 1493a46c0ec8Sopenharmony_ci 1494a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1495a46c0ec8Sopenharmony_ci 1496a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1497a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1498a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1499a46c0ec8Sopenharmony_ci 1500a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1501a46c0ec8Sopenharmony_ci BTN_LEFT, 1502a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1503a46c0ec8Sopenharmony_ci 1504a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1505a46c0ec8Sopenharmony_ci} 1506a46c0ec8Sopenharmony_ciEND_TEST 1507a46c0ec8Sopenharmony_ci 1508a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_left_to_right) 1509a46c0ec8Sopenharmony_ci{ 1510a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1511a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1512a46c0ec8Sopenharmony_ci 1513a46c0ec8Sopenharmony_ci litest_drain_events(li); 1514a46c0ec8Sopenharmony_ci 1515a46c0ec8Sopenharmony_ci /* One finger down in left software button area, 1516a46c0ec8Sopenharmony_ci move to right button area immediately, click 1517a46c0ec8Sopenharmony_ci -> expect right button event 1518a46c0ec8Sopenharmony_ci */ 1519a46c0ec8Sopenharmony_ci 1520a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 30, 90); 1521a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 30, 90, 90, 90, 15); 1522a46c0ec8Sopenharmony_ci litest_drain_events(li); 1523a46c0ec8Sopenharmony_ci 1524a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1525a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1526a46c0ec8Sopenharmony_ci 1527a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1528a46c0ec8Sopenharmony_ci BTN_RIGHT, 1529a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1530a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1531a46c0ec8Sopenharmony_ci 1532a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1533a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1534a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1535a46c0ec8Sopenharmony_ci 1536a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1537a46c0ec8Sopenharmony_ci BTN_RIGHT, 1538a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1539a46c0ec8Sopenharmony_ci 1540a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1541a46c0ec8Sopenharmony_ci} 1542a46c0ec8Sopenharmony_ciEND_TEST 1543a46c0ec8Sopenharmony_ci 1544a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_right_to_left) 1545a46c0ec8Sopenharmony_ci{ 1546a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1547a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1548a46c0ec8Sopenharmony_ci 1549a46c0ec8Sopenharmony_ci litest_drain_events(li); 1550a46c0ec8Sopenharmony_ci 1551a46c0ec8Sopenharmony_ci /* One finger down in right software button area, 1552a46c0ec8Sopenharmony_ci move to left button area immediately, click 1553a46c0ec8Sopenharmony_ci -> expect left button event 1554a46c0ec8Sopenharmony_ci */ 1555a46c0ec8Sopenharmony_ci 1556a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 80, 90); 1557a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 80, 90, 30, 90, 15); 1558a46c0ec8Sopenharmony_ci litest_drain_events(li); 1559a46c0ec8Sopenharmony_ci 1560a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1561a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1562a46c0ec8Sopenharmony_ci 1563a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1564a46c0ec8Sopenharmony_ci BTN_LEFT, 1565a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1566a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1567a46c0ec8Sopenharmony_ci 1568a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1569a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1570a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1571a46c0ec8Sopenharmony_ci 1572a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1573a46c0ec8Sopenharmony_ci BTN_LEFT, 1574a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1575a46c0ec8Sopenharmony_ci 1576a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1577a46c0ec8Sopenharmony_ci} 1578a46c0ec8Sopenharmony_ciEND_TEST 1579a46c0ec8Sopenharmony_ci 1580a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_softbutton_hover_into_buttons) 1581a46c0ec8Sopenharmony_ci{ 1582a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1583a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1584a46c0ec8Sopenharmony_ci 1585a46c0ec8Sopenharmony_ci litest_drain_events(li); 1586a46c0ec8Sopenharmony_ci 1587a46c0ec8Sopenharmony_ci litest_hover_start(dev, 0, 50, 50); 1588a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1589a46c0ec8Sopenharmony_ci litest_hover_move_to(dev, 0, 50, 50, 90, 90, 10); 1590a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1591a46c0ec8Sopenharmony_ci 1592a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 90, 90, 91, 91, 1); 1593a46c0ec8Sopenharmony_ci 1594a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, true); 1595a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1596a46c0ec8Sopenharmony_ci 1597a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1598a46c0ec8Sopenharmony_ci BTN_RIGHT, 1599a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1600a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1601a46c0ec8Sopenharmony_ci 1602a46c0ec8Sopenharmony_ci litest_button_click(dev, BTN_LEFT, false); 1603a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1604a46c0ec8Sopenharmony_ci 1605a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1606a46c0ec8Sopenharmony_ci BTN_RIGHT, 1607a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1608a46c0ec8Sopenharmony_ci} 1609a46c0ec8Sopenharmony_ciEND_TEST 1610a46c0ec8Sopenharmony_ci 1611a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_left) 1612a46c0ec8Sopenharmony_ci{ 1613a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1614a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1615a46c0ec8Sopenharmony_ci 1616a46c0ec8Sopenharmony_ci litest_drain_events(li); 1617a46c0ec8Sopenharmony_ci 1618a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 10, 5); 1619a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1620a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1621a46c0ec8Sopenharmony_ci 1622a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1623a46c0ec8Sopenharmony_ci BTN_LEFT, 1624a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1625a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1626a46c0ec8Sopenharmony_ci 1627a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1628a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1629a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1630a46c0ec8Sopenharmony_ci 1631a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1632a46c0ec8Sopenharmony_ci BTN_LEFT, 1633a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1634a46c0ec8Sopenharmony_ci 1635a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1636a46c0ec8Sopenharmony_ci} 1637a46c0ec8Sopenharmony_ciEND_TEST 1638a46c0ec8Sopenharmony_ci 1639a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_right) 1640a46c0ec8Sopenharmony_ci{ 1641a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1642a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1643a46c0ec8Sopenharmony_ci 1644a46c0ec8Sopenharmony_ci litest_drain_events(li); 1645a46c0ec8Sopenharmony_ci 1646a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 5); 1647a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1648a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1649a46c0ec8Sopenharmony_ci 1650a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1651a46c0ec8Sopenharmony_ci BTN_RIGHT, 1652a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1653a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1654a46c0ec8Sopenharmony_ci 1655a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1656a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1657a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1658a46c0ec8Sopenharmony_ci 1659a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1660a46c0ec8Sopenharmony_ci BTN_RIGHT, 1661a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1662a46c0ec8Sopenharmony_ci 1663a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1664a46c0ec8Sopenharmony_ci} 1665a46c0ec8Sopenharmony_ciEND_TEST 1666a46c0ec8Sopenharmony_ci 1667a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_middle) 1668a46c0ec8Sopenharmony_ci{ 1669a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1670a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1671a46c0ec8Sopenharmony_ci 1672a46c0ec8Sopenharmony_ci litest_drain_events(li); 1673a46c0ec8Sopenharmony_ci 1674a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 50, 5); 1675a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1676a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1677a46c0ec8Sopenharmony_ci 1678a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1679a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1680a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1681a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1682a46c0ec8Sopenharmony_ci 1683a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1684a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1685a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1686a46c0ec8Sopenharmony_ci 1687a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1688a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1689a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1690a46c0ec8Sopenharmony_ci 1691a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1692a46c0ec8Sopenharmony_ci} 1693a46c0ec8Sopenharmony_ciEND_TEST 1694a46c0ec8Sopenharmony_ci 1695a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_move_out_leftclick_before_timeout) 1696a46c0ec8Sopenharmony_ci{ 1697a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1698a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1699a46c0ec8Sopenharmony_ci 1700a46c0ec8Sopenharmony_ci /* Finger down in top right button area, wait past enter timeout 1701a46c0ec8Sopenharmony_ci Move into main area, wait past leave timeout 1702a46c0ec8Sopenharmony_ci Click 1703a46c0ec8Sopenharmony_ci -> expect left click 1704a46c0ec8Sopenharmony_ci */ 1705a46c0ec8Sopenharmony_ci 1706a46c0ec8Sopenharmony_ci litest_drain_events(li); 1707a46c0ec8Sopenharmony_ci 1708a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 80, 5); 1709a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1710a46c0ec8Sopenharmony_ci litest_timeout_softbuttons(); 1711a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1712a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1713a46c0ec8Sopenharmony_ci 1714a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 80, 5, 80, 90, 20); 1715a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1716a46c0ec8Sopenharmony_ci 1717a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1718a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1719a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1720a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1721a46c0ec8Sopenharmony_ci 1722a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1723a46c0ec8Sopenharmony_ci 1724a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, LIBINPUT_BUTTON_STATE_PRESSED); 1725a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_RIGHT, LIBINPUT_BUTTON_STATE_RELEASED); 1726a46c0ec8Sopenharmony_ci} 1727a46c0ec8Sopenharmony_ciEND_TEST 1728a46c0ec8Sopenharmony_ci 1729a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_move_out_leftclick) 1730a46c0ec8Sopenharmony_ci{ 1731a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1732a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1733a46c0ec8Sopenharmony_ci 1734a46c0ec8Sopenharmony_ci /* Finger down in top right button area, wait past enter timeout 1735a46c0ec8Sopenharmony_ci Move into main area, wait past leave timeout 1736a46c0ec8Sopenharmony_ci Click 1737a46c0ec8Sopenharmony_ci -> expect left click 1738a46c0ec8Sopenharmony_ci */ 1739a46c0ec8Sopenharmony_ci 1740a46c0ec8Sopenharmony_ci litest_drain_events(li); 1741a46c0ec8Sopenharmony_ci 1742a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 80, 5); 1743a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1744a46c0ec8Sopenharmony_ci litest_timeout_softbuttons(); 1745a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1746a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1747a46c0ec8Sopenharmony_ci 1748a46c0ec8Sopenharmony_ci litest_touch_move_to(dev, 0, 80, 5, 80, 90, 20); 1749a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1750a46c0ec8Sopenharmony_ci litest_timeout_softbuttons(); 1751a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1752a46c0ec8Sopenharmony_ci 1753a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1754a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1755a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1756a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1757a46c0ec8Sopenharmony_ci 1758a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1759a46c0ec8Sopenharmony_ci 1760a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, LIBINPUT_BUTTON_STATE_PRESSED); 1761a46c0ec8Sopenharmony_ci litest_assert_button_event(li, BTN_LEFT, LIBINPUT_BUTTON_STATE_RELEASED); 1762a46c0ec8Sopenharmony_ci} 1763a46c0ec8Sopenharmony_ciEND_TEST 1764a46c0ec8Sopenharmony_ci 1765a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_clickfinger) 1766a46c0ec8Sopenharmony_ci{ 1767a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1768a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1769a46c0ec8Sopenharmony_ci 1770a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 1771a46c0ec8Sopenharmony_ci 1772a46c0ec8Sopenharmony_ci litest_drain_events(li); 1773a46c0ec8Sopenharmony_ci 1774a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 5); 1775a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1776a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1777a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1778a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1779a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1780a46c0ec8Sopenharmony_ci 1781a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1782a46c0ec8Sopenharmony_ci BTN_LEFT, 1783a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1784a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1785a46c0ec8Sopenharmony_ci BTN_LEFT, 1786a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1787a46c0ec8Sopenharmony_ci 1788a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1789a46c0ec8Sopenharmony_ci 1790a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 5); 1791a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 80, 5); 1792a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1793a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1794a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1795a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1796a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1797a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1798a46c0ec8Sopenharmony_ci 1799a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1800a46c0ec8Sopenharmony_ci BTN_RIGHT, 1801a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1802a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1803a46c0ec8Sopenharmony_ci BTN_RIGHT, 1804a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1805a46c0ec8Sopenharmony_ci} 1806a46c0ec8Sopenharmony_ciEND_TEST 1807a46c0ec8Sopenharmony_ci 1808a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_topsoftbuttons_clickfinger_dev_disabled) 1809a46c0ec8Sopenharmony_ci{ 1810a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1811a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1812a46c0ec8Sopenharmony_ci struct litest_device *trackpoint = litest_add_device(li, 1813a46c0ec8Sopenharmony_ci LITEST_TRACKPOINT); 1814a46c0ec8Sopenharmony_ci 1815a46c0ec8Sopenharmony_ci libinput_device_config_send_events_set_mode(dev->libinput_device, 1816a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); 1817a46c0ec8Sopenharmony_ci litest_enable_clickfinger(dev); 1818a46c0ec8Sopenharmony_ci litest_drain_events(li); 1819a46c0ec8Sopenharmony_ci 1820a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 5); 1821a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1822a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1823a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1824a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1825a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1826a46c0ec8Sopenharmony_ci 1827a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1828a46c0ec8Sopenharmony_ci BTN_RIGHT, 1829a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1830a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1831a46c0ec8Sopenharmony_ci BTN_RIGHT, 1832a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1833a46c0ec8Sopenharmony_ci 1834a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1835a46c0ec8Sopenharmony_ci 1836a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 90, 5); 1837a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 10, 5); 1838a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1839a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1840a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1841a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1842a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1843a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1844a46c0ec8Sopenharmony_ci 1845a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1846a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1847a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1848a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1849a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1850a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1851a46c0ec8Sopenharmony_ci 1852a46c0ec8Sopenharmony_ci litest_delete_device(trackpoint); 1853a46c0ec8Sopenharmony_ci} 1854a46c0ec8Sopenharmony_ciEND_TEST 1855a46c0ec8Sopenharmony_ci 1856a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_config_delayed) 1857a46c0ec8Sopenharmony_ci{ 1858a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1859a46c0ec8Sopenharmony_ci struct libinput_device *device = dev->libinput_device; 1860a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1861a46c0ec8Sopenharmony_ci enum libinput_config_status status; 1862a46c0ec8Sopenharmony_ci int enabled; 1863a46c0ec8Sopenharmony_ci 1864a46c0ec8Sopenharmony_ci enabled = libinput_device_config_middle_emulation_get_enabled(device); 1865a46c0ec8Sopenharmony_ci ck_assert(!enabled); 1866a46c0ec8Sopenharmony_ci 1867a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 30, 95); 1868a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1869a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1870a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1871a46c0ec8Sopenharmony_ci 1872a46c0ec8Sopenharmony_ci /* actual config is delayed, but status is immediate */ 1873a46c0ec8Sopenharmony_ci status = libinput_device_config_middle_emulation_set_enabled(device, 1874a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED); 1875a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 1876a46c0ec8Sopenharmony_ci 1877a46c0ec8Sopenharmony_ci enabled = libinput_device_config_middle_emulation_get_enabled(device); 1878a46c0ec8Sopenharmony_ci ck_assert(enabled); 1879a46c0ec8Sopenharmony_ci 1880a46c0ec8Sopenharmony_ci status = libinput_device_config_middle_emulation_set_enabled(device, 1881a46c0ec8Sopenharmony_ci LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED); 1882a46c0ec8Sopenharmony_ci ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS); 1883a46c0ec8Sopenharmony_ci enabled = libinput_device_config_middle_emulation_get_enabled(device); 1884a46c0ec8Sopenharmony_ci ck_assert(!enabled); 1885a46c0ec8Sopenharmony_ci} 1886a46c0ec8Sopenharmony_ciEND_TEST 1887a46c0ec8Sopenharmony_ci 1888a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_click) 1889a46c0ec8Sopenharmony_ci{ 1890a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1891a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1892a46c0ec8Sopenharmony_ci 1893a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 1894a46c0ec8Sopenharmony_ci litest_enable_middleemu(dev); 1895a46c0ec8Sopenharmony_ci litest_drain_events(li); 1896a46c0ec8Sopenharmony_ci 1897a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 30, 95); 1898a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 80, 95); 1899a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1900a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1901a46c0ec8Sopenharmony_ci 1902a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1903a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1904a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1905a46c0ec8Sopenharmony_ci 1906a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1907a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1908a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1909a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 1910a46c0ec8Sopenharmony_ci 1911a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1912a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1913a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1914a46c0ec8Sopenharmony_ci 1915a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1916a46c0ec8Sopenharmony_ci 1917a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1918a46c0ec8Sopenharmony_ci} 1919a46c0ec8Sopenharmony_ciEND_TEST 1920a46c0ec8Sopenharmony_ci 1921a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_click_middle_left) 1922a46c0ec8Sopenharmony_ci{ 1923a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1924a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1925a46c0ec8Sopenharmony_ci 1926a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 1927a46c0ec8Sopenharmony_ci litest_enable_middleemu(dev); 1928a46c0ec8Sopenharmony_ci litest_drain_events(li); 1929a46c0ec8Sopenharmony_ci 1930a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 49, 95); 1931a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1932a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1933a46c0ec8Sopenharmony_ci 1934a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1935a46c0ec8Sopenharmony_ci BTN_LEFT, 1936a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1937a46c0ec8Sopenharmony_ci 1938a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1939a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1940a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1941a46c0ec8Sopenharmony_ci 1942a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1943a46c0ec8Sopenharmony_ci BTN_LEFT, 1944a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1945a46c0ec8Sopenharmony_ci 1946a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1947a46c0ec8Sopenharmony_ci 1948a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1949a46c0ec8Sopenharmony_ci} 1950a46c0ec8Sopenharmony_ciEND_TEST 1951a46c0ec8Sopenharmony_ci 1952a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_click_middle_right) 1953a46c0ec8Sopenharmony_ci{ 1954a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1955a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1956a46c0ec8Sopenharmony_ci 1957a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 1958a46c0ec8Sopenharmony_ci litest_enable_middleemu(dev); 1959a46c0ec8Sopenharmony_ci litest_drain_events(li); 1960a46c0ec8Sopenharmony_ci 1961a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 51, 95); 1962a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1963a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1964a46c0ec8Sopenharmony_ci 1965a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1966a46c0ec8Sopenharmony_ci BTN_RIGHT, 1967a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1968a46c0ec8Sopenharmony_ci 1969a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 1970a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1971a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 1972a46c0ec8Sopenharmony_ci 1973a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1974a46c0ec8Sopenharmony_ci BTN_RIGHT, 1975a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 1976a46c0ec8Sopenharmony_ci 1977a46c0ec8Sopenharmony_ci libinput_dispatch(li); 1978a46c0ec8Sopenharmony_ci 1979a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 1980a46c0ec8Sopenharmony_ci} 1981a46c0ec8Sopenharmony_ciEND_TEST 1982a46c0ec8Sopenharmony_ci 1983a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_click_enable_while_down) 1984a46c0ec8Sopenharmony_ci{ 1985a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 1986a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 1987a46c0ec8Sopenharmony_ci 1988a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 1989a46c0ec8Sopenharmony_ci litest_drain_events(li); 1990a46c0ec8Sopenharmony_ci 1991a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 49, 95); 1992a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 1993a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 1994a46c0ec8Sopenharmony_ci 1995a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 1996a46c0ec8Sopenharmony_ci BTN_MIDDLE, 1997a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 1998a46c0ec8Sopenharmony_ci 1999a46c0ec8Sopenharmony_ci litest_enable_middleemu(dev); 2000a46c0ec8Sopenharmony_ci 2001a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 2002a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2003a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 2004a46c0ec8Sopenharmony_ci 2005a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2006a46c0ec8Sopenharmony_ci BTN_MIDDLE, 2007a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 2008a46c0ec8Sopenharmony_ci 2009a46c0ec8Sopenharmony_ci libinput_dispatch(li); 2010a46c0ec8Sopenharmony_ci 2011a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 2012a46c0ec8Sopenharmony_ci 2013a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 49, 95); 2014a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 2015a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2016a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 2017a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2018a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 2019a46c0ec8Sopenharmony_ci 2020a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2021a46c0ec8Sopenharmony_ci BTN_LEFT, 2022a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 2023a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2024a46c0ec8Sopenharmony_ci BTN_LEFT, 2025a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 2026a46c0ec8Sopenharmony_ci 2027a46c0ec8Sopenharmony_ci libinput_dispatch(li); 2028a46c0ec8Sopenharmony_ci} 2029a46c0ec8Sopenharmony_ciEND_TEST 2030a46c0ec8Sopenharmony_ci 2031a46c0ec8Sopenharmony_ciSTART_TEST(clickpad_middleemulation_click_disable_while_down) 2032a46c0ec8Sopenharmony_ci{ 2033a46c0ec8Sopenharmony_ci struct litest_device *dev = litest_current_device(); 2034a46c0ec8Sopenharmony_ci struct libinput *li = dev->libinput; 2035a46c0ec8Sopenharmony_ci 2036a46c0ec8Sopenharmony_ci litest_enable_buttonareas(dev); 2037a46c0ec8Sopenharmony_ci litest_enable_middleemu(dev); 2038a46c0ec8Sopenharmony_ci 2039a46c0ec8Sopenharmony_ci litest_drain_events(li); 2040a46c0ec8Sopenharmony_ci 2041a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 30, 95); 2042a46c0ec8Sopenharmony_ci litest_touch_down(dev, 1, 70, 95); 2043a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 2044a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2045a46c0ec8Sopenharmony_ci 2046a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2047a46c0ec8Sopenharmony_ci BTN_MIDDLE, 2048a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 2049a46c0ec8Sopenharmony_ci 2050a46c0ec8Sopenharmony_ci litest_disable_middleemu(dev); 2051a46c0ec8Sopenharmony_ci 2052a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 2053a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2054a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 2055a46c0ec8Sopenharmony_ci litest_touch_up(dev, 1); 2056a46c0ec8Sopenharmony_ci 2057a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2058a46c0ec8Sopenharmony_ci BTN_MIDDLE, 2059a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 2060a46c0ec8Sopenharmony_ci libinput_dispatch(li); 2061a46c0ec8Sopenharmony_ci 2062a46c0ec8Sopenharmony_ci litest_assert_empty_queue(li); 2063a46c0ec8Sopenharmony_ci 2064a46c0ec8Sopenharmony_ci litest_touch_down(dev, 0, 49, 95); 2065a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 1); 2066a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2067a46c0ec8Sopenharmony_ci litest_event(dev, EV_KEY, BTN_LEFT, 0); 2068a46c0ec8Sopenharmony_ci litest_event(dev, EV_SYN, SYN_REPORT, 0); 2069a46c0ec8Sopenharmony_ci litest_touch_up(dev, 0); 2070a46c0ec8Sopenharmony_ci 2071a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2072a46c0ec8Sopenharmony_ci BTN_MIDDLE, 2073a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_PRESSED); 2074a46c0ec8Sopenharmony_ci litest_assert_button_event(li, 2075a46c0ec8Sopenharmony_ci BTN_MIDDLE, 2076a46c0ec8Sopenharmony_ci LIBINPUT_BUTTON_STATE_RELEASED); 2077a46c0ec8Sopenharmony_ci 2078a46c0ec8Sopenharmony_ci libinput_dispatch(li); 2079a46c0ec8Sopenharmony_ci} 2080a46c0ec8Sopenharmony_ciEND_TEST 2081a46c0ec8Sopenharmony_ci 2082a46c0ec8Sopenharmony_ciSTART_TEST(touchpad_non_clickpad_detection) 2083a46c0ec8Sopenharmony_ci{ 2084a46c0ec8Sopenharmony_ci struct libinput *li; 2085a46c0ec8Sopenharmony_ci struct libinput_device *device; 2086a46c0ec8Sopenharmony_ci struct libevdev_uinput *uinput; 2087a46c0ec8Sopenharmony_ci static struct input_absinfo absinfo[] = { 2088a46c0ec8Sopenharmony_ci { ABS_X, 1472, 5472, 0, 0, 75 }, 2089a46c0ec8Sopenharmony_ci { ABS_Y, 1408, 4448, 0, 0, 129 }, 2090a46c0ec8Sopenharmony_ci { ABS_PRESSURE, 0, 255, 0, 0, 0 }, 2091a46c0ec8Sopenharmony_ci { ABS_TOOL_WIDTH, 0, 15, 0, 0, 0 }, 2092a46c0ec8Sopenharmony_ci { ABS_MT_SLOT, 0, 1, 0, 0, 0 }, 2093a46c0ec8Sopenharmony_ci { ABS_MT_POSITION_X, 1472, 5472, 0, 0, 75 }, 2094a46c0ec8Sopenharmony_ci { ABS_MT_POSITION_Y, 1408, 4448, 0, 0, 129 }, 2095a46c0ec8Sopenharmony_ci { ABS_MT_TRACKING_ID, 0, 65535, 0, 0, 0 }, 2096a46c0ec8Sopenharmony_ci { ABS_MT_PRESSURE, 0, 255, 0, 0, 0 }, 2097a46c0ec8Sopenharmony_ci { .value = -1 } 2098a46c0ec8Sopenharmony_ci }; 2099a46c0ec8Sopenharmony_ci uint32_t methods; 2100a46c0ec8Sopenharmony_ci 2101a46c0ec8Sopenharmony_ci /* Create a touchpad with only a left button but missing 2102a46c0ec8Sopenharmony_ci * INPUT_PROP_BUTTONPAD. We should treat this as clickpad. 2103a46c0ec8Sopenharmony_ci */ 2104a46c0ec8Sopenharmony_ci uinput = litest_create_uinput_abs_device("litest NonClickpad", 2105a46c0ec8Sopenharmony_ci NULL, 2106a46c0ec8Sopenharmony_ci absinfo, 2107a46c0ec8Sopenharmony_ci EV_KEY, BTN_LEFT, 2108a46c0ec8Sopenharmony_ci EV_KEY, BTN_TOOL_FINGER, 2109a46c0ec8Sopenharmony_ci EV_KEY, BTN_TOUCH, 2110a46c0ec8Sopenharmony_ci -1); 2111a46c0ec8Sopenharmony_ci 2112a46c0ec8Sopenharmony_ci li = litest_create_context(); 2113a46c0ec8Sopenharmony_ci device = libinput_path_add_device(li, 2114a46c0ec8Sopenharmony_ci libevdev_uinput_get_devnode(uinput)); 2115a46c0ec8Sopenharmony_ci 2116a46c0ec8Sopenharmony_ci methods = libinput_device_config_click_get_methods(device); 2117a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS); 2118a46c0ec8Sopenharmony_ci ck_assert(methods & LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER); 2119a46c0ec8Sopenharmony_ci 2120a46c0ec8Sopenharmony_ci 2121a46c0ec8Sopenharmony_ci libinput_path_remove_device(device); 2122a46c0ec8Sopenharmony_ci libevdev_uinput_destroy(uinput); 2123a46c0ec8Sopenharmony_ci litest_destroy_context(li); 2124a46c0ec8Sopenharmony_ci} 2125a46c0ec8Sopenharmony_ciEND_TEST 2126a46c0ec8Sopenharmony_ci 2127a46c0ec8Sopenharmony_ciTEST_COLLECTION(touchpad_buttons) 2128a46c0ec8Sopenharmony_ci{ 2129a46c0ec8Sopenharmony_ci struct range finger_count = {1, 4}; 2130a46c0ec8Sopenharmony_ci 2131a46c0ec8Sopenharmony_ci litest_add(touchpad_button, LITEST_TOUCHPAD, LITEST_CLICKPAD); 2132a46c0ec8Sopenharmony_ci 2133a46c0ec8Sopenharmony_ci litest_add(touchpad_1fg_clickfinger, LITEST_CLICKPAD, LITEST_ANY); 2134a46c0ec8Sopenharmony_ci litest_add(touchpad_1fg_clickfinger_no_touch, LITEST_CLICKPAD, LITEST_ANY); 2135a46c0ec8Sopenharmony_ci litest_add(touchpad_2fg_clickfinger, LITEST_CLICKPAD, LITEST_ANY); 2136a46c0ec8Sopenharmony_ci litest_add(touchpad_3fg_clickfinger, LITEST_CLICKPAD, LITEST_ANY); 2137a46c0ec8Sopenharmony_ci litest_add(touchpad_3fg_clickfinger_btntool, LITEST_CLICKPAD, LITEST_ANY); 2138a46c0ec8Sopenharmony_ci litest_add(touchpad_4fg_clickfinger, LITEST_CLICKPAD, LITEST_ANY); 2139a46c0ec8Sopenharmony_ci litest_add(touchpad_4fg_clickfinger_btntool_2slots, LITEST_CLICKPAD, LITEST_ANY); 2140a46c0ec8Sopenharmony_ci litest_add(touchpad_4fg_clickfinger_btntool_3slots, LITEST_CLICKPAD, LITEST_ANY); 2141a46c0ec8Sopenharmony_ci litest_add(touchpad_2fg_clickfinger_distance, LITEST_CLICKPAD, LITEST_ANY); 2142a46c0ec8Sopenharmony_ci litest_add(touchpad_3fg_clickfinger_distance, LITEST_CLICKPAD, LITEST_ANY); 2143a46c0ec8Sopenharmony_ci litest_add(touchpad_3fg_clickfinger_distance_btntool, LITEST_CLICKPAD, LITEST_ANY); 2144a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_2fg_clickfinger_bottom, LITEST_SYNAPTICS_TOPBUTTONPAD); 2145a46c0ec8Sopenharmony_ci litest_add(touchpad_clickfinger_to_area_method, LITEST_CLICKPAD, LITEST_ANY); 2146a46c0ec8Sopenharmony_ci litest_add(touchpad_clickfinger_to_area_method_while_down, LITEST_CLICKPAD, LITEST_ANY); 2147a46c0ec8Sopenharmony_ci litest_add(touchpad_area_to_clickfinger_method, LITEST_CLICKPAD, LITEST_ANY); 2148a46c0ec8Sopenharmony_ci litest_add(touchpad_area_to_clickfinger_method_while_down, LITEST_CLICKPAD, LITEST_ANY); 2149a46c0ec8Sopenharmony_ci /* run those two for the T440 one only so we don't have to worry 2150a46c0ec8Sopenharmony_ci * about small touchpads messing with thumb detection expectations */ 2151a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_3fg_tool_position, LITEST_SYNAPTICS_TOPBUTTONPAD); 2152a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_4fg_tool_position, LITEST_SYNAPTICS_TOPBUTTONPAD); 2153a46c0ec8Sopenharmony_ci 2154a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_appletouch_config, LITEST_APPLETOUCH); 2155a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_appletouch_1fg, LITEST_APPLETOUCH); 2156a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_appletouch_2fg, LITEST_APPLETOUCH); 2157a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_clickfinger_appletouch_3fg, LITEST_APPLETOUCH); 2158a46c0ec8Sopenharmony_ci 2159a46c0ec8Sopenharmony_ci litest_add_for_device(touchpad_1fg_clickfinger_no_touch_phantomclicks, LITEST_SYNAPTICS_PHANTOMCLICKS); 2160a46c0ec8Sopenharmony_ci 2161a46c0ec8Sopenharmony_ci litest_add_ranged(touchpad_clickfinger_click_drag, LITEST_CLICKPAD, LITEST_ANY, &finger_count); 2162a46c0ec8Sopenharmony_ci 2163a46c0ec8Sopenharmony_ci litest_add(touchpad_click_defaults_clickfinger, LITEST_APPLE_CLICKPAD, LITEST_ANY); 2164a46c0ec8Sopenharmony_ci litest_add(touchpad_click_defaults_btnarea, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2165a46c0ec8Sopenharmony_ci litest_add(touchpad_click_defaults_none, LITEST_TOUCHPAD, LITEST_CLICKPAD); 2166a46c0ec8Sopenharmony_ci litest_add(touchpad_click_defaults_none, LITEST_ANY, LITEST_TOUCHPAD); 2167a46c0ec8Sopenharmony_ci 2168a46c0ec8Sopenharmony_ci litest_add(touchpad_btn_left, LITEST_TOUCHPAD|LITEST_BUTTON, LITEST_CLICKPAD); 2169a46c0ec8Sopenharmony_ci litest_add(clickpad_btn_left, LITEST_CLICKPAD, LITEST_ANY); 2170a46c0ec8Sopenharmony_ci litest_add(clickpad_click_n_drag, LITEST_CLICKPAD, LITEST_SINGLE_TOUCH); 2171a46c0ec8Sopenharmony_ci litest_add(clickpad_finger_pin, LITEST_CLICKPAD, LITEST_ANY); 2172a46c0ec8Sopenharmony_ci 2173a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_left, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2174a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_middle, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2175a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_right, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2176a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_left_tap_n_drag, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2177a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_right_tap_n_drag, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2178a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_left_1st_fg_move, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2179a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_left_2nd_fg_move, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2180a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_left_to_right, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2181a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_right_to_left, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); 2182a46c0ec8Sopenharmony_ci litest_add(clickpad_softbutton_hover_into_buttons, LITEST_CLICKPAD|LITEST_HOVER, LITEST_APPLE_CLICKPAD); 2183a46c0ec8Sopenharmony_ci 2184a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_left, LITEST_TOPBUTTONPAD, LITEST_ANY); 2185a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_right, LITEST_TOPBUTTONPAD, LITEST_ANY); 2186a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_middle, LITEST_TOPBUTTONPAD, LITEST_ANY); 2187a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_move_out_leftclick, LITEST_TOPBUTTONPAD, LITEST_ANY); 2188a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_move_out_leftclick_before_timeout, LITEST_TOPBUTTONPAD, LITEST_ANY); 2189a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_clickfinger, LITEST_TOPBUTTONPAD, LITEST_ANY); 2190a46c0ec8Sopenharmony_ci litest_add(clickpad_topsoftbuttons_clickfinger_dev_disabled, LITEST_TOPBUTTONPAD, LITEST_ANY); 2191a46c0ec8Sopenharmony_ci 2192a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_config_delayed, LITEST_CLICKPAD, LITEST_ANY); 2193a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_click, LITEST_CLICKPAD, LITEST_ANY); 2194a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_click_middle_left, LITEST_CLICKPAD, LITEST_ANY); 2195a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_click_middle_right, LITEST_CLICKPAD, LITEST_ANY); 2196a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_click_enable_while_down, LITEST_CLICKPAD, LITEST_ANY); 2197a46c0ec8Sopenharmony_ci litest_add(clickpad_middleemulation_click_disable_while_down, LITEST_CLICKPAD, LITEST_ANY); 2198a46c0ec8Sopenharmony_ci 2199a46c0ec8Sopenharmony_ci litest_add_no_device(touchpad_non_clickpad_detection); 2200a46c0ec8Sopenharmony_ci} 2201