d765ced2325f23fb2f131f8d34e8fd4d6bd8f504
[platform/upstream/libinput.git] / src / libinput.h
1 /*
2  * Copyright © 2013 Jonas Ådahl
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and
5  * its documentation for any purpose is hereby granted without fee, provided
6  * that the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation, and that the name of the copyright holders not be used in
9  * advertising or publicity pertaining to distribution of the software
10  * without specific, written prior permission.  The copyright holders make
11  * no representations about the suitability of this software for any
12  * purpose.  It is provided "as is" without express or implied warranty.
13  *
14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
15  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
16  * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
17  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
18  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
19  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21  */
22
23 #ifndef LIBINPUT_H
24 #define LIBINPUT_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #include <stdlib.h>
31 #include <stdint.h>
32 #include <libudev.h>
33
34 #define LIBINPUT_ATTRIBUTE_PRINTF(_format, _args) \
35         __attribute__ ((format (printf, _format, _args)))
36 #define LIBINPUT_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated))
37
38 /**
39  * @mainpage
40  * libinput is a generic input device handling library. It abstracts
41  * commonly-used concepts such as keyboard, pointer and touchpad handling
42  * behind an API.
43  */
44
45 /**
46  * @page tpbuttons Touchpad button behavior
47  *
48  * For touchpad devices without physical buttons, libinput enables an
49  * emulated right button area through either of two methods.
50  *
51  * Software button areas
52  * =====================
53  * On most touchpads, the bottom area of the touchpad is split into a a left
54  * and a right-button area. Pressing the touchpad down with a finger in
55  * those areas will generate clicks as shown in the diagram below:
56  *
57  * @code
58     +------------------------+
59     |                        |
60     |                        |
61     |          LEFT          |
62     |                        |
63     |                        |
64     +------------------------+
65     |    LEFT    |   RIGHT   |
66     +------------------------+
67  * @endcode
68  *
69  * Generally, the touchpad will emulate a right-button click if the finger
70  * was set down in the right button area and did not leave the
71  * right button area before clicking, even if another finger was already
72  * down on the touchpad in another area.
73  * A middle click is generated by clicking the touchpad when one finger is
74  * in the bottom left button area, and one finger is in the botton right
75  * button area.
76  * The exact behavior of the touchpad is implementation-dependent.
77  *
78  * Top software button area
79  * ========================
80  * On selected touchpads, the top area of the touchpad is a separate set of
81  * software buttons split into a left, middle and right button area.
82  * Pressing the touchpad down with a finger in those areas will generate
83  * clicks as shown in the diagram below:
84  *
85  * @code
86     +------------------------+
87     |  LEFT | MIDDLE | RIGHT |
88     +------------------------+
89     |                        |
90     |          LEFT          |
91     |                        |
92     +------------------------+
93     |    LEFT    |   RIGHT   |
94     +------------------------+
95  * @endcode
96  * This behavior is enabled on the Lenovo *40 series (T440, T540, T240...)
97  * and the Lenovo Helix, Yoga S1 and Carbon X1 2nd.
98  *
99  * Clickfinger
100  * ===========
101  * On Apple touchpads, no button areas are provided. Instead, use a
102  * two-finger click for a right button click, and a three-finger click for a
103  * middle button click.
104  */
105
106 /**
107  * Log priority for internal logging messages.
108  */
109 enum libinput_log_priority {
110         LIBINPUT_LOG_PRIORITY_DEBUG = 10,
111         LIBINPUT_LOG_PRIORITY_INFO = 20,
112         LIBINPUT_LOG_PRIORITY_ERROR = 30,
113 };
114
115 /**
116  * @ingroup device
117  *
118  * Capabilities on a device. A device may have one or more capabilities
119  * at a time, and capabilities may appear or disappear during the
120  * lifetime of the device.
121  */
122 enum libinput_device_capability {
123         LIBINPUT_DEVICE_CAP_KEYBOARD = 0,
124         LIBINPUT_DEVICE_CAP_POINTER = 1,
125         LIBINPUT_DEVICE_CAP_TOUCH = 2
126 };
127
128 /**
129  * @ingroup device
130  *
131  * Logical state of a key. Note that the logical state may not represent
132  * the physical state of the key.
133  */
134 enum libinput_key_state {
135         LIBINPUT_KEY_STATE_RELEASED = 0,
136         LIBINPUT_KEY_STATE_PRESSED = 1
137 };
138
139 /**
140  * @ingroup device
141  *
142  * Mask reflecting LEDs on a device.
143  */
144 enum libinput_led {
145         LIBINPUT_LED_NUM_LOCK = (1 << 0),
146         LIBINPUT_LED_CAPS_LOCK = (1 << 1),
147         LIBINPUT_LED_SCROLL_LOCK = (1 << 2)
148 };
149
150 /**
151  * @ingroup device
152  *
153  * Logical state of a physical button. Note that the logical state may not
154  * represent the physical state of the button.
155  */
156 enum libinput_button_state {
157         LIBINPUT_BUTTON_STATE_RELEASED = 0,
158         LIBINPUT_BUTTON_STATE_PRESSED = 1
159 };
160
161
162 /**
163  * @ingroup device
164  *
165  * Axes on a device that are not x or y coordinates.
166  */
167 enum libinput_pointer_axis {
168         LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL = 0,
169         LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL = 1,
170 };
171
172 /**
173  * @ingroup base
174  *
175  * Event type for events returned by libinput_get_event().
176  */
177 enum libinput_event_type {
178         /**
179          * This is not a real event type, and is only used to tell the user that
180          * no new event is available in the queue. See
181          * libinput_next_event_type().
182          */
183         LIBINPUT_EVENT_NONE = 0,
184
185         /**
186          * Signals that a device has been added to the context. The device will
187          * not be read until the next time the user calls libinput_dispatch()
188          * and data is available.
189          *
190          * This allows setting up initial device configuration before any events
191          * are created.
192          */
193         LIBINPUT_EVENT_DEVICE_ADDED,
194
195         /**
196          * Signals that a device has been removed. No more events from the
197          * associated device will be in the queue or be queued after this event.
198          */
199         LIBINPUT_EVENT_DEVICE_REMOVED,
200
201         LIBINPUT_EVENT_KEYBOARD_KEY = 300,
202
203         LIBINPUT_EVENT_POINTER_MOTION = 400,
204         LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE,
205         LIBINPUT_EVENT_POINTER_BUTTON,
206         LIBINPUT_EVENT_POINTER_AXIS,
207
208         LIBINPUT_EVENT_TOUCH_DOWN = 500,
209         LIBINPUT_EVENT_TOUCH_UP,
210         LIBINPUT_EVENT_TOUCH_MOTION,
211         LIBINPUT_EVENT_TOUCH_CANCEL,
212         /**
213          * Signals the end of a set of touchpoints at one device sample
214          * time. This event has no coordinate information attached.
215          */
216         LIBINPUT_EVENT_TOUCH_FRAME
217 };
218
219 struct libinput;
220 struct libinput_device;
221 struct libinput_seat;
222
223 struct libinput_event;
224 struct libinput_event_device_notify;
225 struct libinput_event_keyboard;
226 struct libinput_event_pointer;
227
228 /**
229  * @ingroup event_touch
230  * @struct libinput_event_touch
231  *
232  * Touch event representing a touch down, move or up, as well as a touch
233  * cancel and touch frame events. Valid event types for this event are @ref
234  * LIBINPUT_EVENT_TOUCH_DOWN, @ref LIBINPUT_EVENT_TOUCH_MOTION, @ref
235  * LIBINPUT_EVENT_TOUCH_UP, @ref LIBINPUT_EVENT_TOUCH_CANCEL and @ref
236  * LIBINPUT_EVENT_TOUCH_FRAME.
237  */
238 struct libinput_event_touch;
239
240 /**
241  * @defgroup event Accessing and destruction of events
242  */
243
244 /**
245  * @ingroup event
246  *
247  * Destroy the event.
248  *
249  * @param event An event retrieved by libinput_get_event().
250  */
251 void
252 libinput_event_destroy(struct libinput_event *event);
253
254 /**
255  * @ingroup event
256  *
257  * Get the type of the event.
258  *
259  * @param event An event retrieved by libinput_get_event().
260  */
261 enum libinput_event_type
262 libinput_event_get_type(struct libinput_event *event);
263
264 /**
265  * @ingroup event
266  *
267  * Get the libinput context from the event.
268  *
269  * @param event The libinput event
270  * @return The libinput context for this event.
271  */
272 struct libinput *
273 libinput_event_get_context(struct libinput_event *event);
274
275 /**
276  * @ingroup event
277  *
278  * Return the device associated with this event, if applicable. For device
279  * added/removed events this is the device added or removed. For all other
280  * device events, this is the device that generated the event.
281  *
282  * This device is not refcounted and its lifetime is that of the event. Use
283  * libinput_device_ref() before using the device outside of this scope.
284  *
285  * @return The device associated with this event
286  */
287
288 struct libinput_device *
289 libinput_event_get_device(struct libinput_event *event);
290
291 /**
292  * @ingroup event
293  *
294  * Return the pointer event that is this input event. If the event type does
295  * not match the pointer event types, this function returns NULL.
296  *
297  * The inverse of this function is libinput_event_pointer_get_base_event().
298  *
299  * @return A pointer event, or NULL for other events
300  */
301 struct libinput_event_pointer *
302 libinput_event_get_pointer_event(struct libinput_event *event);
303
304 /**
305  * @ingroup event
306  *
307  * Return the keyboard event that is this input event. If the event type does
308  * not match the keyboard event types, this function returns NULL.
309  *
310  * The inverse of this function is libinput_event_keyboard_get_base_event().
311  *
312  * @return A keyboard event, or NULL for other events
313  */
314 struct libinput_event_keyboard *
315 libinput_event_get_keyboard_event(struct libinput_event *event);
316
317 /**
318  * @ingroup event
319  *
320  * Return the touch event that is this input event. If the event type does
321  * not match the touch event types, this function returns NULL.
322  *
323  * The inverse of this function is libinput_event_touch_get_base_event().
324  *
325  * @return A touch event, or NULL for other events
326  */
327 struct libinput_event_touch *
328 libinput_event_get_touch_event(struct libinput_event *event);
329
330 /**
331  * @ingroup event
332  *
333  * Return the device event that is this input event. If the event type does
334  * not match the device event types, this function returns NULL.
335  *
336  * The inverse of this function is
337  * libinput_event_device_notify_get_base_event().
338  *
339  * @return A device event, or NULL for other events
340  */
341 struct libinput_event_device_notify *
342 libinput_event_get_device_notify_event(struct libinput_event *event);
343
344 /**
345  * @ingroup event
346  *
347  * @return The generic libinput_event of this event
348  */
349 struct libinput_event *
350 libinput_event_device_notify_get_base_event(struct libinput_event_device_notify *event);
351
352 /**
353  * @defgroup event_keyboard Keyboard events
354  *
355  * Key events are generated when a key changes its logical state, usually by
356  * being pressed or released.
357  */
358
359 /**
360  * @ingroup event_keyboard
361  *
362  * @return The event time for this event
363  */
364 uint32_t
365 libinput_event_keyboard_get_time(struct libinput_event_keyboard *event);
366
367 /**
368  * @ingroup event_keyboard
369  *
370  * @return The keycode that triggered this key event
371  */
372 uint32_t
373 libinput_event_keyboard_get_key(struct libinput_event_keyboard *event);
374
375 /**
376  * @ingroup event_keyboard
377  *
378  * @return The state change of the key
379  */
380 enum libinput_key_state
381 libinput_event_keyboard_get_key_state(struct libinput_event_keyboard *event);
382
383
384 /**
385  * @ingroup event_keyboard
386  *
387  * @return The generic libinput_event of this event
388  */
389 struct libinput_event *
390 libinput_event_keyboard_get_base_event(struct libinput_event_keyboard *event);
391
392 /**
393  * @ingroup event_keyboard
394  *
395  * For the key of a LIBINPUT_EVENT_KEYBOARD_KEY event, return the total number
396  * of keys pressed on all devices on the associated seat after the event was
397  * triggered.
398  *
399  " @note It is an application bug to call this function for events other than
400  * LIBINPUT_EVENT_KEYBOARD_KEY. For other events, this function returns 0.
401  *
402  * @return the seat wide pressed key count for the key of this event
403  */
404 uint32_t
405 libinput_event_keyboard_get_seat_key_count(
406         struct libinput_event_keyboard *event);
407
408 /**
409  * @defgroup event_pointer Pointer events
410  *
411  * Pointer events reflect motion, button and scroll events, as well as
412  * events from other axes.
413  */
414
415 /**
416  * @ingroup event_pointer
417  *
418  * @return The event time for this event
419  */
420 uint32_t
421 libinput_event_pointer_get_time(struct libinput_event_pointer *event);
422
423 /**
424  * @ingroup event_pointer
425  *
426  * Return the delta between the last event and the current event. For pointer
427  * events that are not of type LIBINPUT_EVENT_POINTER_MOTION, this function
428  * returns 0.
429  *
430  * @note It is an application bug to call this function for events other than
431  * LIBINPUT_EVENT_POINTER_MOTION.
432  *
433  * @return the relative x movement since the last event
434  */
435 double
436 libinput_event_pointer_get_dx(struct libinput_event_pointer *event);
437
438 /**
439  * @ingroup event_pointer
440  *
441  * Return the delta between the last event and the current event. For pointer
442  * events that are not of type LIBINPUT_EVENT_POINTER_MOTION, this function
443  * returns 0.
444  *
445  * @note It is an application bug to call this function for events other than
446  * LIBINPUT_EVENT_POINTER_MOTION.
447  *
448  * @return the relative y movement since the last event
449  */
450 double
451 libinput_event_pointer_get_dy(struct libinput_event_pointer *event);
452
453 /**
454  * @ingroup event_pointer
455  *
456  * Return the current absolute x coordinate of the pointer event, in mm from
457  * the top left corner of the device. To get the corresponding output screen
458  * coordinate, use libinput_event_pointer_get_x_transformed().
459  *
460  * For pointer events that are not of type
461  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, this function returns 0.
462  *
463  * @note It is an application bug to call this function for events other than
464  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
465  *
466  * @return the current absolute x coordinate
467  */
468 double
469 libinput_event_pointer_get_absolute_x(struct libinput_event_pointer *event);
470
471 /**
472  * @ingroup event_pointer
473  *
474  * Return the current absolute y coordinate of the pointer event, in mm from
475  * the top left corner of the device. To get the corresponding output screen
476  * coordinate, use libinput_event_pointer_get_x_transformed().
477  *
478  * For pointer events that are not of type
479  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, this function returns 0.
480  *
481  * @note It is an application bug to call this function for events other than
482  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
483  *
484  * @return the current absolute y coordinate
485  */
486 double
487 libinput_event_pointer_get_absolute_y(struct libinput_event_pointer *event);
488
489 /**
490  * @ingroup event_pointer
491  *
492  * Return the current absolute x coordinate of the pointer event, transformed to
493  * screen coordinates.
494  *
495  * For pointer events that are not of type
496  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, the return value of this function is
497  * undefined.
498  *
499  * @note It is an application bug to call this function for events other than
500  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
501  *
502  * @param event The libinput pointer event
503  * @param width The current output screen width
504  * @return the current absolute x coordinate transformed to a screen coordinate
505  */
506 double
507 libinput_event_pointer_get_absolute_x_transformed(
508         struct libinput_event_pointer *event,
509         uint32_t width);
510
511 /**
512  * @ingroup event_pointer
513  *
514  * Return the current absolute y coordinate of the pointer event, transformed to
515  * screen coordinates.
516  *
517  * For pointer events that are not of type
518  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, the return value of this function is
519  * undefined.
520  *
521  * @note It is an application bug to call this function for events other than
522  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
523  *
524  * @param event The libinput pointer event
525  * @param height The current output screen height
526  * @return the current absolute y coordinate transformed to a screen coordinate
527  */
528 double
529 libinput_event_pointer_get_absolute_y_transformed(
530         struct libinput_event_pointer *event,
531         uint32_t height);
532
533 /**
534  * @ingroup event_pointer
535  *
536  * Return the button that triggered this event.
537  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_BUTTON,
538  * this function returns 0.
539  *
540  * @note It is an application bug to call this function for events other than
541  * LIBINPUT_EVENT_POINTER_BUTTON.
542  *
543  * @return the button triggering this event
544  */
545 uint32_t
546 libinput_event_pointer_get_button(struct libinput_event_pointer *event);
547
548 /**
549  * @ingroup event_pointer
550  *
551  * Return the button state that triggered this event.
552  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_BUTTON,
553  * this function returns 0.
554  *
555  * @note It is an application bug to call this function for events other than
556  * LIBINPUT_EVENT_POINTER_BUTTON.
557  *
558  * @return the button state triggering this event
559  */
560 enum libinput_button_state
561 libinput_event_pointer_get_button_state(struct libinput_event_pointer *event);
562
563 /**
564  * @ingroup event_pointer
565  *
566  * For the button of a LIBINPUT_EVENT_POINTER_BUTTON event, return the total
567  * number of buttons pressed on all devices on the associated seat after the
568  * the event was triggered.
569  *
570  " @note It is an application bug to call this function for events other than
571  * LIBINPUT_EVENT_POINTER_BUTTON. For other events, this function returns 0.
572  *
573  * @return the seat wide pressed button count for the key of this event
574  */
575 uint32_t
576 libinput_event_pointer_get_seat_button_count(
577         struct libinput_event_pointer *event);
578
579 /**
580  * @ingroup event_pointer
581  *
582  * Return the axis that triggered this event.
583  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_AXIS,
584  * this function returns 0.
585  *
586  * @note It is an application bug to call this function for events other than
587  * LIBINPUT_EVENT_POINTER_AXIS.
588  *
589  * @return the axis triggering this event
590  */
591 enum libinput_pointer_axis
592 libinput_event_pointer_get_axis(struct libinput_event_pointer *event);
593
594 /**
595  * @ingroup event_pointer
596  *
597  * Return the axis value of the given axis. The interpretation of the value
598  * is dependent on the axis. For the two scrolling axes
599  * LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL and
600  * LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, the value of the event is in
601  * relative scroll units, with the positive direction being down or right,
602  * respectively. The dimension of a scroll unit is equal to one unit of
603  * motion in the respective axis, where applicable (e.g. touchpad two-finger
604  * scrolling).
605  *
606  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_AXIS,
607  * this function returns 0.
608  *
609  * @note It is an application bug to call this function for events other than
610  * LIBINPUT_EVENT_POINTER_AXIS.
611  *
612  * @return the axis value of this event
613  */
614 double
615 libinput_event_pointer_get_axis_value(struct libinput_event_pointer *event);
616
617 /**
618  * @ingroup event_pointer
619  *
620  * @return The generic libinput_event of this event
621  */
622 struct libinput_event *
623 libinput_event_pointer_get_base_event(struct libinput_event_pointer *event);
624
625
626 /**
627  * @defgroup event_touch Touch events
628  *
629  * Events from absolute touch devices.
630  */
631
632 /**
633  * @ingroup event_touch
634  *
635  * @return The event time for this event
636  */
637 uint32_t
638 libinput_event_touch_get_time(struct libinput_event_touch *event);
639
640 /**
641  * @ingroup event_touch
642  *
643  * Get the slot of this touch event. See the kernel's multitouch
644  * protocol B documentation for more information.
645  *
646  * If the touch event has no assigned slot, for example if it is from a
647  * single touch device, this function returns -1.
648  *
649  * @note this function should not be called for LIBINPUT_EVENT_TOUCH_CANCEL or
650  * LIBINPUT_EVENT_TOUCH_FRAME.
651  *
652  * @return The slot of this touch event
653  */
654 int32_t
655 libinput_event_touch_get_slot(struct libinput_event_touch *event);
656
657 /**
658  * @ingroup event_touch
659  *
660  * Get the seat slot of the touch event. A seat slot is a non-negative seat
661  * wide unique identifier of an active touch point.
662  *
663  * Events from single touch devices will be represented as one individual
664  * touch point per device.
665  *
666  * @note this function should not be called for LIBINPUT_EVENT_TOUCH_CANCEL or
667  * LIBINPUT_EVENT_TOUCH_FRAME.
668  *
669  * @return The seat slot of the touch event
670  */
671 int32_t
672 libinput_event_touch_get_seat_slot(struct libinput_event_touch *event);
673
674 /**
675  * @ingroup event_touch
676  *
677  * Return the current absolute x coordinate of the touch event, in mm from
678  * the top left corner of the device. To get the corresponding output screen
679  * coordinate, use libinput_event_touch_get_x_transformed().
680  *
681  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
682  * LIBINPUT_EVENT_TOUCH_MOTION.
683  *
684  * @param event The libinput touch event
685  * @return the current absolute x coordinate
686  */
687 double
688 libinput_event_touch_get_x(struct libinput_event_touch *event);
689
690 /**
691  * @ingroup event_touch
692  *
693  * Return the current absolute y coordinate of the touch event, in mm from
694  * the top left corner of the device. To get the corresponding output screen
695  * coordinate, use libinput_event_touch_get_y_transformed().
696  *
697  * For LIBINPUT_EVENT_TOUCH_UP 0 is returned.
698  *
699  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
700  * LIBINPUT_EVENT_TOUCH_MOTION.
701  *
702  * @param event The libinput touch event
703  * @return the current absolute y coordinate
704  */
705 double
706 libinput_event_touch_get_y(struct libinput_event_touch *event);
707
708 /**
709  * @ingroup event_touch
710  *
711  * Return the current absolute x coordinate of the touch event, transformed to
712  * screen coordinates.
713  *
714  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
715  * LIBINPUT_EVENT_TOUCH_MOTION.
716  *
717  * @param event The libinput touch event
718  * @param width The current output screen width
719  * @return the current absolute x coordinate transformed to a screen coordinate
720  */
721 double
722 libinput_event_touch_get_x_transformed(struct libinput_event_touch *event,
723                                        uint32_t width);
724
725 /**
726  * @ingroup event_touch
727  *
728  * Return the current absolute y coordinate of the touch event, transformed to
729  * screen coordinates.
730  *
731  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
732  * LIBINPUT_EVENT_TOUCH_MOTION.
733  *
734  * @param event The libinput touch event
735  * @param height The current output screen height
736  * @return the current absolute y coordinate transformed to a screen coordinate
737  */
738 double
739 libinput_event_touch_get_y_transformed(struct libinput_event_touch *event,
740                                        uint32_t height);
741
742 /**
743  * @ingroup event_touch
744  *
745  * @return The generic libinput_event of this event
746  */
747 struct libinput_event *
748 libinput_event_touch_get_base_event(struct libinput_event_touch *event);
749
750 /**
751  * @defgroup base Initialization and manipulation of libinput contexts
752  */
753
754 struct libinput_interface {
755         /**
756          * Open the device at the given path with the flags provided and
757          * return the fd.
758          *
759          * @param path The device path to open
760          * @param flags Flags as defined by open(2)
761          * @param user_data The user_data provided in
762          * libinput_udev_create_for_seat()
763          *
764          * @return the file descriptor, or a negative errno on failure.
765          */
766         int (*open_restricted)(const char *path, int flags, void *user_data);
767         /**
768          * Close the file descriptor.
769          *
770          * @param fd The file descriptor to close
771          * @param user_data The user_data provided in
772          * libinput_udev_create_for_seat()
773          */
774         void (*close_restricted)(int fd, void *user_data);
775 };
776
777 /**
778  * @ingroup base
779  *
780  * Create a new libinput context from udev. This context is inactive until
781  * assigned a seat ID with libinput_udev_assign_seat().
782  *
783  * @param interface The callback interface
784  * @param user_data Caller-specific data passed to the various callback
785  * interfaces.
786  * @param udev An already initialized udev context
787  *
788  * @return An initialized, but inactive libinput context or NULL on error
789  */
790 struct libinput *
791 libinput_udev_create_context(const struct libinput_interface *interface,
792                              void *user_data,
793                              struct udev *udev);
794
795 /**
796  * @ingroup base
797  *
798  * Assign a seat to this libinput context. New devices or the removal of
799  * existing devices will appear as events during libinput_dispatch().
800  *
801  * libinput_udev_assign_seat() succeeds even if no input devices are currently
802  * available on this seat, or if devices are available but fail to open in
803  * @ref libinput_interface::open_restricted. Devices that do not have the
804  * minimum capabilities to be recognized as pointer, keyboard or touch
805  * device are ignored. Such devices and those that failed to open
806  * ignored until the next call to libinput_resume().
807  *
808  * This function may only be called once per context.
809  *
810  * @param libinput A libinput context initialized with
811  * libinput_udev_create_context()
812  * @param seat_id A seat identifier. This string must not be NULL.
813  *
814  * @return 0 on success or -1 on failure.
815  */
816 int
817 libinput_udev_assign_seat(struct libinput *libinput,
818                        const char *seat_id);
819
820 /**
821  * @ingroup base
822  *
823  * Create a new libinput context from udev, for input devices matching
824  * the given seat ID. New devices or devices removed will appear as events
825  * during libinput_dispatch.
826  *
827  * libinput_udev_create_for_seat() succeeds even if no input device is
828  * available in this seat, or if devices are available but fail to open in
829  * @ref libinput_interface::open_restricted. Devices that do not have the
830  * minimum capabilities to be recognized as pointer, keyboard or touch
831  * device are ignored. Such devices and those that failed to open
832  * ignored until the next call to libinput_resume().
833  *
834  * The reference count of the context is initialized to 1. See @ref
835  * libinput_unref.
836  *
837  * @param interface The callback interface
838  * @param user_data Caller-specific data passed to the various callback
839  * interfaces.
840  * @param udev An already initialized udev context
841  * @param seat_id A seat identifier. This string must not be NULL.
842  *
843  * @return An initialized libinput context, ready to handle events or NULL on
844  * error.
845  *
846  * @deprecated This function was deprecated in 0.4.0 and will be removed
847  * soon. Use libinput_udev_create_context() and libinput_udev_assign_seat()
848  * instead.
849  */
850 struct libinput *
851 libinput_udev_create_for_seat(const struct libinput_interface *interface,
852                               void *user_data,
853                               struct udev *udev,
854                               const char *seat_id)
855         LIBINPUT_ATTRIBUTE_DEPRECATED;
856
857 /**
858  * @ingroup base
859  *
860  * Create a new libinput context that requires the caller to manually add or
861  * remove devices with libinput_path_add_device() and
862  * libinput_path_remove_device().
863  *
864  * The context is fully initialized but will not generate events until at
865  * least one device has been added.
866  *
867  * The reference count of the context is initialized to 1. See @ref
868  * libinput_unref.
869  *
870  * @param interface The callback interface
871  * @param user_data Caller-specific data passed to the various callback
872  * interfaces.
873  *
874  * @return An initialized, empty libinput context.
875  */
876 struct libinput *
877 libinput_path_create_context(const struct libinput_interface *interface,
878                              void *user_data);
879
880 /**
881  * @ingroup base
882  *
883  * Add a device to a libinput context initialized with
884  * libinput_path_create_context(). If successful, the device will be
885  * added to the internal list and re-opened on libinput_resume(). The device
886  * can be removed with libinput_path_remove_device().
887  *
888  * If the device was successfully initialized, it is returned in the device
889  * argument. The lifetime of the returned device pointer is limited until
890  * the next libinput_dispatch(), use libinput_device_ref() to keep a permanent
891  * reference.
892  *
893  * @param libinput A previously initialized libinput context
894  * @param path Path to an input device
895  * @return The newly initiated device on success, or NULL on failure.
896  *
897  * @note It is an application bug to call this function on a libinput
898  * context initialized with libinput_udev_create_for_seat().
899  */
900 struct libinput_device *
901 libinput_path_add_device(struct libinput *libinput,
902                          const char *path);
903
904 /**
905  * @ingroup base
906  *
907  * Remove a device from a libinput context initialized with
908  * libinput_path_create_context() or added to such a context with
909  * libinput_path_add_device().
910  *
911  * Events already processed from this input device are kept in the queue,
912  * the LIBINPUT_EVENT_DEVICE_REMOVED event marks the end of events for this
913  * device.
914  *
915  * If no matching device exists, this function does nothing.
916  *
917  * @param device A libinput device
918  *
919  * @note It is an application bug to call this function on a libinput
920  * context initialized with libinput_udev_create_for_seat().
921  */
922 void
923 libinput_path_remove_device(struct libinput_device *device);
924
925 /**
926  * @ingroup base
927  *
928  * libinput keeps a single file descriptor for all events. Call into
929  * libinput_dispatch() if any events become available on this fd.
930  *
931  * @return the file descriptor used to notify of pending events.
932  */
933 int
934 libinput_get_fd(struct libinput *libinput);
935
936 /**
937  * @ingroup base
938  *
939  * Main event dispatchment function. Reads events of the file descriptors
940  * and processes them internally. Use libinput_get_event() to retrieve the
941  * events.
942  *
943  * Dispatching does not necessarily queue libinput events.
944  *
945  * @param libinput A previously initialized libinput context
946  *
947  * @return 0 on success, or a negative errno on failure
948  */
949 int
950 libinput_dispatch(struct libinput *libinput);
951
952 /**
953  * @ingroup base
954  *
955  * Retrieve the next event from libinput's internal event queue.
956  *
957  * After handling the retrieved event, the caller must destroy it using
958  * libinput_event_destroy().
959  *
960  * @param libinput A previously initialized libinput context
961  * @return The next available event, or NULL if no event is available.
962  */
963 struct libinput_event *
964 libinput_get_event(struct libinput *libinput);
965
966 /**
967  * @ingroup base
968  *
969  * Return the type of the next event in the internal queue. This function
970  * does not pop the event off the queue and the next call to
971  * libinput_get_event() returns that event.
972  *
973  * @param libinput A previously initialized libinput context
974  * @return The event type of the next available event or LIBINPUT_EVENT_NONE
975  * if no event is availble.
976  */
977 enum libinput_event_type
978 libinput_next_event_type(struct libinput *libinput);
979
980 /**
981  * @ingroup base
982  *
983  * @param libinput A previously initialized libinput context
984  * @return the caller-specific data previously assigned in
985  * libinput_create_udev().
986  */
987 void *
988 libinput_get_user_data(struct libinput *libinput);
989
990 /**
991  * @ingroup base
992  *
993  * Resume a suspended libinput context. This re-enables device
994  * monitoring and adds existing devices.
995  *
996  * @param libinput A previously initialized libinput context
997  * @see libinput_suspend
998  *
999  * @return 0 on success or -1 on failure
1000  */
1001 int
1002 libinput_resume(struct libinput *libinput);
1003
1004 /**
1005  * @ingroup base
1006  *
1007  * Suspend monitoring for new devices and close existing devices.
1008  * This all but terminates libinput but does keep the context
1009  * valid to be resumed with libinput_resume().
1010  *
1011  * @param libinput A previously initialized libinput context
1012  */
1013 void
1014 libinput_suspend(struct libinput *libinput);
1015
1016 /**
1017  * @ingroup base
1018  *
1019  * Add a reference to the context. A context is destroyed whenever the
1020  * reference count reaches 0. See @ref libinput_unref.
1021  *
1022  * @param libinput A previously initialized valid libinput context
1023  * @return The passed libinput context
1024  */
1025 struct libinput *
1026 libinput_ref(struct libinput *libinput);
1027
1028 /**
1029  * @ingroup base
1030  *
1031  * Dereference the libinput context. After this, the context may have been
1032  * destroyed, if the last reference was dereferenced. If so, the context is
1033  * invalid and may not be interacted with.
1034  *
1035  * @param libinput A previously initialized libinput context
1036  * @return NULL if context was destroyed otherwise the passed context
1037  */
1038 struct libinput *
1039 libinput_unref(struct libinput *libinput);
1040
1041 /**
1042  * @ingroup base
1043  *
1044  * Set the global log priority. Messages with priorities equal to or
1045  * higher than the argument will be printed to the current log handler.
1046  *
1047  * The default log priority is LIBINPUT_LOG_PRIORITY_ERROR.
1048  *
1049  * @param libinput A previously initialized libinput context
1050  * @param priority The minimum priority of log messages to print.
1051  *
1052  * @see libinput_log_set_handler
1053  * @see libinput_log_get_priority
1054  */
1055 void
1056 libinput_log_set_priority(struct libinput *libinput,
1057                           enum libinput_log_priority priority);
1058
1059 /**
1060  * @ingroup base
1061  *
1062  * Get the global log priority. Messages with priorities equal to or
1063  * higher than the argument will be printed to the current log handler.
1064  *
1065  * The default log priority is LIBINPUT_LOG_PRIORITY_ERROR.
1066  *
1067  * @param libinput A previously initialized libinput context
1068  * @return The minimum priority of log messages to print.
1069  *
1070  * @see libinput_log_set_handler
1071  * @see libinput_log_set_priority
1072  */
1073 enum libinput_log_priority
1074 libinput_log_get_priority(const struct libinput *libinput);
1075
1076 /**
1077  * @ingroup base
1078  *
1079  * Log handler type for custom logging.
1080  *
1081  * @param libinput The libinput context
1082  * @param priority The priority of the current message
1083  * @param format Message format in printf-style
1084  * @param args Message arguments
1085  *
1086  * @see libinput_set_log_priority
1087  * @see libinput_log_set_handler
1088  */
1089 typedef void (*libinput_log_handler)(struct libinput *libinput,
1090                                      enum libinput_log_priority priority,
1091                                      const char *format, va_list args)
1092            LIBINPUT_ATTRIBUTE_PRINTF(3, 0);
1093
1094 /**
1095  * @ingroup base
1096  *
1097  * Set the global log handler. Messages with priorities equal to or higher
1098  * than the current log priority will be passed to the given
1099  * log handler.
1100  *
1101  * The default log handler prints to stderr.
1102  *
1103  * @param libinput A previously initialized libinput context
1104  * @param log_handler The log handler for library messages.
1105  * @param user_data Caller-specific data pointer, passed into the log
1106  * handler.
1107  *
1108  * @see libinput_log_set_handler
1109  */
1110 void
1111 libinput_log_set_handler(struct libinput *libinput,
1112                          libinput_log_handler log_handler);
1113
1114 /**
1115  * @defgroup seat Initialization and manipulation of seats
1116  *
1117  * A seat has two identifiers, the physical name and the logical name. The
1118  * physical name is summarized as the list of devices a process on the same
1119  * physical seat has access to.
1120  *
1121  * The logical seat name is the seat name for a logical group of devices. A
1122  * compositor may use that to create additonal seats as independent device
1123  * sets. Alternatively, a compositor may limit itself to a single logical
1124  * seat, leaving a second compositor to manage devices on the other logical
1125  * seats.
1126  *
1127  * @code
1128  * +---+--------+------------+------------------------+------------+
1129  * |   | event0 |            |                        | log seat A |
1130  * | K +--------+            |                        +------------+
1131  * | e | event1 | phys seat0 |    libinput context 1  |            |
1132  * | r +--------+            |                        | log seat B |
1133  * | n | event2 |            |                        |            |
1134  * | e +--------+------------+------------------------+------------+
1135  * | l | event3 | phys seat1 |    libinput context 2  | log seat C |
1136  * +---+--------+------------+------------------------+------------+
1137  * @endcode
1138  */
1139
1140 /**
1141  * @ingroup seat
1142  *
1143  * Increase the refcount of the seat. A seat will be freed whenever the
1144  * refcount reaches 0. This may happen during dispatch if the
1145  * seat was removed from the system. A caller must ensure to reference
1146  * the seat correctly to avoid dangling pointers.
1147  *
1148  * @param seat A previously obtained seat
1149  * @return The passed seat
1150  */
1151 struct libinput_seat *
1152 libinput_seat_ref(struct libinput_seat *seat);
1153
1154 /**
1155  * @ingroup seat
1156  *
1157  * Decrease the refcount of the seat. A seat will be freed whenever the
1158  * refcount reaches 0. This may happen during dispatch if the
1159  * seat was removed from the system. A caller must ensure to reference
1160  * the seat correctly to avoid dangling pointers.
1161  *
1162  * @param seat A previously obtained seat
1163  * @return NULL if seat was destroyed, otherwise the passed seat
1164  */
1165 struct libinput_seat *
1166 libinput_seat_unref(struct libinput_seat *seat);
1167
1168 /**
1169  * @ingroup seat
1170  *
1171  * Set caller-specific data associated with this seat. libinput does
1172  * not manage, look at, or modify this data. The caller must ensure the
1173  * data is valid.
1174  *
1175  * @param seat A previously obtained seat
1176  * @param user_data Caller-specific data pointer
1177  * @see libinput_seat_get_user_data
1178  */
1179 void
1180 libinput_seat_set_user_data(struct libinput_seat *seat, void *user_data);
1181
1182 /**
1183  * @ingroup seat
1184  *
1185  * Get the caller-specific data associated with this seat, if any.
1186  *
1187  * @param seat A previously obtained seat
1188  * @return Caller-specific data pointer or NULL if none was set
1189  * @see libinput_seat_set_user_data
1190  */
1191 void *
1192 libinput_seat_get_user_data(struct libinput_seat *seat);
1193
1194 /**
1195  * @ingroup seat
1196  *
1197  * Return the physical name of the seat. For libinput contexts created from
1198  * udev, this is always the same value as passed into
1199  * libinput_udev_create_for_seat() and all seats from that context will have
1200  * the same physical name.
1201  *
1202  * The physical name of the seat is one that is usually set by the system or
1203  * lower levels of the stack. In most cases, this is the base filter for
1204  * devices - devices assigned to seats outside the current seat will not
1205  * be available to the caller.
1206  *
1207  * @param seat A previously obtained seat
1208  * @return the physical name of this seat
1209  */
1210 const char *
1211 libinput_seat_get_physical_name(struct libinput_seat *seat);
1212
1213 /**
1214  * @ingroup seat
1215  *
1216  * Return the logical name of the seat. This is an identifier to group sets
1217  * of devices within the compositor.
1218  *
1219  * @param seat A previously obtained seat
1220  * @return the logical name of this seat
1221  */
1222 const char *
1223 libinput_seat_get_logical_name(struct libinput_seat *seat);
1224
1225 /**
1226  * @defgroup device Initialization and manipulation of input devices
1227  */
1228
1229 /**
1230  * @ingroup device
1231  *
1232  * Increase the refcount of the input device. An input device will be freed
1233  * whenever the refcount reaches 0. This may happen during dispatch if the
1234  * device was removed from the system. A caller must ensure to reference
1235  * the device correctly to avoid dangling pointers.
1236  *
1237  * @param device A previously obtained device
1238  * @return The passed device
1239  */
1240 struct libinput_device *
1241 libinput_device_ref(struct libinput_device *device);
1242
1243 /**
1244  * @ingroup device
1245  *
1246  * Decrease the refcount of the input device. An input device will be freed
1247  * whenever the refcount reaches 0. This may happen during dispatch if the
1248  * device was removed from the system. A caller must ensure to reference
1249  * the device correctly to avoid dangling pointers.
1250  *
1251  * @param device A previously obtained device
1252  * @return NULL if device was destroyed, otherwise the passed device
1253  */
1254 struct libinput_device *
1255 libinput_device_unref(struct libinput_device *device);
1256
1257 /**
1258  * @ingroup device
1259  *
1260  * Set caller-specific data associated with this input device. libinput does
1261  * not manage, look at, or modify this data. The caller must ensure the
1262  * data is valid.
1263  *
1264  * @param device A previously obtained device
1265  * @param user_data Caller-specific data pointer
1266  * @see libinput_device_get_user_data
1267  */
1268 void
1269 libinput_device_set_user_data(struct libinput_device *device, void *user_data);
1270
1271 /**
1272  * @ingroup device
1273  *
1274  * Get the caller-specific data associated with this input device, if any.
1275  *
1276  * @param device A previously obtained device
1277  * @return Caller-specific data pointer or NULL if none was set
1278  * @see libinput_device_set_user_data
1279  */
1280 void *
1281 libinput_device_get_user_data(struct libinput_device *device);
1282
1283 /**
1284  * @ingroup device
1285  *
1286  * Get the system name of the device.
1287  *
1288  * @param device A previously obtained device
1289  * @return System name of the device
1290  */
1291 const char *
1292 libinput_device_get_sysname(struct libinput_device *device);
1293
1294 /**
1295  * @ingroup device
1296  *
1297  * A device may be mapped to a single output, or all available outputs. If a
1298  * device is mapped to a single output only, a relative device may not move
1299  * beyond the boundaries of this output. An absolute device has its input
1300  * coordinates mapped to the extents of this output.
1301  *
1302  * @return the name of the output this device is mapped to, or NULL if no
1303  * output is set
1304  */
1305 const char *
1306 libinput_device_get_output_name(struct libinput_device *device);
1307
1308 /**
1309  * @ingroup device
1310  *
1311  * Get the seat associated with this input device.
1312  *
1313  * A seat can be uniquely identified by the physical and logical seat name.
1314  * There will ever be only one seat instance with a given physical and logical
1315  * seat name pair at any given time, but if no external reference is kept, it
1316  * may be destroyed if no device belonging to it is left.
1317  *
1318  * @param device A previously obtained device
1319  * @return The seat this input device belongs to
1320  */
1321 struct libinput_seat *
1322 libinput_device_get_seat(struct libinput_device *device);
1323
1324 /**
1325  * @ingroup device
1326  *
1327  * Update the LEDs on the device, if any. If the device does not have
1328  * LEDs, or does not have one or more of the LEDs given in the mask, this
1329  * function does nothing.
1330  *
1331  * @param device A previously obtained device
1332  * @param leds A mask of the LEDs to set, or unset.
1333  */
1334 void
1335 libinput_device_led_update(struct libinput_device *device,
1336                            enum libinput_led leds);
1337
1338 /**
1339  * @ingroup device
1340  *
1341  * Set the bitmask in keys to the bitmask of the keys present on the device
1342  * (see linux/input.h), up to size characters.
1343  *
1344  * @param device A current input device
1345  * @param keys An array filled with the bitmask for the keys
1346  * @param size Size of the keys array
1347  *
1348  * @return The number of valid bytes in keys, or a negative errno on failure
1349  */
1350 int
1351 libinput_device_get_keys(struct libinput_device *device,
1352                          char *keys, size_t size);
1353
1354 /**
1355  * @ingroup device
1356  *
1357  * Apply the 3x3 transformation matrix to absolute device coordinates. This
1358  * matrix has no effect on relative events.
1359  *
1360  * Given a 6-element array [a, b, c, d, e, f], the matrix is applied as
1361  * @code
1362  * [ a  b  c ]   [ x ]
1363  * [ d  e  f ] * [ y ]
1364  * [ 0  0  1 ]   [ 1 ]
1365  * @endcode
1366  */
1367 void
1368 libinput_device_calibrate(struct libinput_device *device,
1369                           float calibration[6]);
1370
1371 /**
1372  * @ingroup device
1373  *
1374  * Check if the given device has the specified capability
1375  *
1376  * @return 1 if the given device has the capability or 0 if not
1377  */
1378 int
1379 libinput_device_has_capability(struct libinput_device *device,
1380                                enum libinput_device_capability capability);
1381
1382 /**
1383  * @ingroup device
1384  *
1385  * Get the physical size of a device in mm, where meaningful. This function
1386  * only succeeds on devices with the required data, i.e. tablets, touchpads
1387  * and touchscreens.
1388  *
1389  * If this function returns nonzero, width and height are unmodified.
1390  *
1391  * @param device The device
1392  * @param width Set to the width of the device
1393  * @param height Set to the height of the device
1394  * @return 0 on success, or nonzero otherwise
1395  */
1396 int
1397 libinput_device_get_size(struct libinput_device *device,
1398                          double *width,
1399                          double *height);
1400
1401 #ifdef __cplusplus
1402 }
1403 #endif
1404
1405 #endif /* LIBINPUT_H */