1a46c0ec8Sopenharmony_ci/** 2a46c0ec8Sopenharmony_ci@mainpage 3a46c0ec8Sopenharmony_ci 4a46c0ec8Sopenharmony_ciThis is the libinput API reference. 5a46c0ec8Sopenharmony_ci 6a46c0ec8Sopenharmony_ciThis documentation is aimed at developers of Wayland compositors. User 7a46c0ec8Sopenharmony_cidocumentation is available 8a46c0ec8Sopenharmony_ci[here](https://wayland.freedesktop.org/libinput/doc/latest). 9a46c0ec8Sopenharmony_ci 10a46c0ec8Sopenharmony_ci@section concepts Concepts 11a46c0ec8Sopenharmony_ci 12a46c0ec8Sopenharmony_ci@subsection concepts_initialization Initialization of a libinput context 13a46c0ec8Sopenharmony_ci 14a46c0ec8Sopenharmony_cilibinput provides two different backends: 15a46c0ec8Sopenharmony_ci- a @ref libinput_udev_create_context "udev backend" where notifications 16a46c0ec8Sopenharmony_ci about new and removed devices are provided by udev, and 17a46c0ec8Sopenharmony_ci- a @ref libinput_path_create_context "path backend" where 18a46c0ec8Sopenharmony_ci @ref libinput_path_add_device "device addition" and 19a46c0ec8Sopenharmony_ci @ref libinput_path_remove_device "device removal" need to be handled by 20a46c0ec8Sopenharmony_ci the caller. 21a46c0ec8Sopenharmony_ci 22a46c0ec8Sopenharmony_ciSee section @ref base for information about initializing a libinput context. 23a46c0ec8Sopenharmony_ci 24a46c0ec8Sopenharmony_ci@subsection concepts_events Monitoring for events 25a46c0ec8Sopenharmony_ci 26a46c0ec8Sopenharmony_cilibinput exposes a single @ref libinput_get_fd "file descriptor" to the 27a46c0ec8Sopenharmony_cicaller. This file descriptor should be monitored by the caller, whenever 28a46c0ec8Sopenharmony_cidata is available the caller **must** immediately call libinput_dispatch(). 29a46c0ec8Sopenharmony_ciFailure to do so will result in erroneous behavior. 30a46c0ec8Sopenharmony_ci 31a46c0ec8Sopenharmony_cilibinput_dispatch() may result in one or more events being available to the 32a46c0ec8Sopenharmony_cicaller. After libinput_dispatch() a caller **should** call 33a46c0ec8Sopenharmony_cilibinput_get_event() to retrieve and process this event. Whenever 34a46c0ec8Sopenharmony_cilibinput_get_event() returns `NULL`, no further events are available. 35a46c0ec8Sopenharmony_ci 36a46c0ec8Sopenharmony_ciSee section @ref event for more information about events. 37a46c0ec8Sopenharmony_ci 38a46c0ec8Sopenharmony_ci@subsection concepts_seats Device grouping into seats 39a46c0ec8Sopenharmony_ci 40a46c0ec8Sopenharmony_ciAll devices are grouped into physical and logical seats. Button and key 41a46c0ec8Sopenharmony_cistates are available per-device and per-seat. See @ref seat for more 42a46c0ec8Sopenharmony_ciinformation. 43a46c0ec8Sopenharmony_ci 44a46c0ec8Sopenharmony_ci@subsection concepts_devices Device capabilities 45a46c0ec8Sopenharmony_ci 46a46c0ec8Sopenharmony_cilibinput does not use device types. All devices have @ref 47a46c0ec8Sopenharmony_cilibinput_device_has_capability "capabilities" that define which events may 48a46c0ec8Sopenharmony_cibe generated. See @ref device for more information about devices. 49a46c0ec8Sopenharmony_ci 50a46c0ec8Sopenharmony_ciSpecific event types include: 51a46c0ec8Sopenharmony_ci- @ref event_keyboard 52a46c0ec8Sopenharmony_ci- @ref event_pointer 53a46c0ec8Sopenharmony_ci- @ref event_touch 54a46c0ec8Sopenharmony_ci- @ref event_gesture 55a46c0ec8Sopenharmony_ci- @ref event_tablet 56a46c0ec8Sopenharmony_ci- @ref event_tablet_pad 57a46c0ec8Sopenharmony_ci- @ref event_switch 58a46c0ec8Sopenharmony_ci 59a46c0ec8Sopenharmony_ci 60a46c0ec8Sopenharmony_ci@subsection concepts_configuration Device configuration 61a46c0ec8Sopenharmony_ci 62a46c0ec8Sopenharmony_cilibinput relies on the caller for device configuration. See 63a46c0ec8Sopenharmony_ci@ref config for more information. 64a46c0ec8Sopenharmony_ci 65a46c0ec8Sopenharmony_ci@subsection example An example libinput program 66a46c0ec8Sopenharmony_ci 67a46c0ec8Sopenharmony_ciThe simplest libinput program looks like this: 68a46c0ec8Sopenharmony_ci 69a46c0ec8Sopenharmony_ci@code 70a46c0ec8Sopenharmony_cistatic int open_restricted(const char *path, int flags, void *user_data) 71a46c0ec8Sopenharmony_ci{ 72a46c0ec8Sopenharmony_ci int fd = open(path, flags); 73a46c0ec8Sopenharmony_ci return fd < 0 ? -errno : fd; 74a46c0ec8Sopenharmony_ci} 75a46c0ec8Sopenharmony_ci 76a46c0ec8Sopenharmony_cistatic void close_restricted(int fd, void *user_data) 77a46c0ec8Sopenharmony_ci{ 78a46c0ec8Sopenharmony_ci close(fd); 79a46c0ec8Sopenharmony_ci} 80a46c0ec8Sopenharmony_ci 81a46c0ec8Sopenharmony_ciconst static struct libinput_interface interface = { 82a46c0ec8Sopenharmony_ci .open_restricted = open_restricted, 83a46c0ec8Sopenharmony_ci .close_restricted = close_restricted, 84a46c0ec8Sopenharmony_ci}; 85a46c0ec8Sopenharmony_ci 86a46c0ec8Sopenharmony_ci 87a46c0ec8Sopenharmony_ciint main(void) { 88a46c0ec8Sopenharmony_ci struct libinput *li; 89a46c0ec8Sopenharmony_ci struct libinput_event *event; 90a46c0ec8Sopenharmony_ci 91a46c0ec8Sopenharmony_ci li = libinput_udev_create_context(&interface, NULL, udev); 92a46c0ec8Sopenharmony_ci libinput_udev_assign_seat(li, "seat0"); 93a46c0ec8Sopenharmony_ci libinput_dispatch(li); 94a46c0ec8Sopenharmony_ci 95a46c0ec8Sopenharmony_ci while ((event = libinput_get_event(li)) != NULL) { 96a46c0ec8Sopenharmony_ci 97a46c0ec8Sopenharmony_ci // handle the event here 98a46c0ec8Sopenharmony_ci 99a46c0ec8Sopenharmony_ci libinput_event_destroy(event); 100a46c0ec8Sopenharmony_ci libinput_dispatch(li); 101a46c0ec8Sopenharmony_ci } 102a46c0ec8Sopenharmony_ci 103a46c0ec8Sopenharmony_ci libinput_unref(li); 104a46c0ec8Sopenharmony_ci 105a46c0ec8Sopenharmony_ci return 0; 106a46c0ec8Sopenharmony_ci} 107a46c0ec8Sopenharmony_ci 108a46c0ec8Sopenharmony_ci@endcode 109a46c0ec8Sopenharmony_ci 110a46c0ec8Sopenharmony_ci@section building_against Building against libinput 111a46c0ec8Sopenharmony_ci 112a46c0ec8Sopenharmony_cilibinput provides a 113a46c0ec8Sopenharmony_ci[pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/) file. 114a46c0ec8Sopenharmony_ciSoftware that uses libinput should use pkg-config and the 115a46c0ec8Sopenharmony_ci`PKG_CHECK_MODULES` autoconf macro. 116a46c0ec8Sopenharmony_ciOtherwise, the most rudimentary way to compile and link a program against 117a46c0ec8Sopenharmony_cilibinput is: 118a46c0ec8Sopenharmony_ci 119a46c0ec8Sopenharmony_ci@verbatim 120a46c0ec8Sopenharmony_ci gcc -o myprogram myprogram.c `pkg-config --cflags --libs libinput` 121a46c0ec8Sopenharmony_ci@endverbatim 122a46c0ec8Sopenharmony_ci 123a46c0ec8Sopenharmony_ciFor further information on using pkgconfig see the pkg-config documentation. 124a46c0ec8Sopenharmony_ci 125a46c0ec8Sopenharmony_ci@section stability Backwards-compatibility 126a46c0ec8Sopenharmony_ci 127a46c0ec8Sopenharmony_cilibinput promises backwards-compatibility across all the 1.x.y version. An 128a46c0ec8Sopenharmony_ciapplication built against libinput 1.x.y will work with any future 1.*.* 129a46c0ec8Sopenharmony_cirelease. 130a46c0ec8Sopenharmony_ci 131a46c0ec8Sopenharmony_ci@section About 132a46c0ec8Sopenharmony_ci 133a46c0ec8Sopenharmony_ciDocumentation generated from git commit [__GIT_VERSION__](https://gitlab.freedesktop.org/libinput/libinput/commit/__GIT_VERSION__) 134a46c0ec8Sopenharmony_ci 135a46c0ec8Sopenharmony_ci*/ 136