678e49dcf5dbe16b217ab72f261a9533bd9dc011
[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         /** @deprecated Use @ref LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL instead */
173         LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL,
174         /** @deprecated Use @ref LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL instead */
175         LIBINPUT_POINTER_AXIS_HORIZONTAL_SCROLL = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL
176 };
177
178 /**
179  * @ingroup base
180  *
181  * Event type for events returned by libinput_get_event().
182  */
183 enum libinput_event_type {
184         /**
185          * This is not a real event type, and is only used to tell the user that
186          * no new event is available in the queue. See
187          * libinput_next_event_type().
188          */
189         LIBINPUT_EVENT_NONE = 0,
190
191         /**
192          * Signals that a device has been added to the context. The device will
193          * not be read until the next time the user calls libinput_dispatch()
194          * and data is available.
195          *
196          * This allows setting up initial device configuration before any events
197          * are created.
198          */
199         LIBINPUT_EVENT_DEVICE_ADDED,
200
201         /**
202          * Signals that a device has been removed. No more events from the
203          * associated device will be in the queue or be queued after this event.
204          */
205         LIBINPUT_EVENT_DEVICE_REMOVED,
206
207         LIBINPUT_EVENT_KEYBOARD_KEY = 300,
208
209         LIBINPUT_EVENT_POINTER_MOTION = 400,
210         LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE,
211         LIBINPUT_EVENT_POINTER_BUTTON,
212         LIBINPUT_EVENT_POINTER_AXIS,
213
214         LIBINPUT_EVENT_TOUCH_DOWN = 500,
215         LIBINPUT_EVENT_TOUCH_UP,
216         LIBINPUT_EVENT_TOUCH_MOTION,
217         LIBINPUT_EVENT_TOUCH_CANCEL,
218         /**
219          * Signals the end of a set of touchpoints at one device sample
220          * time. This event has no coordinate information attached.
221          */
222         LIBINPUT_EVENT_TOUCH_FRAME
223 };
224
225 struct libinput;
226 struct libinput_device;
227 struct libinput_seat;
228
229 struct libinput_event;
230 struct libinput_event_device_notify;
231 struct libinput_event_keyboard;
232 struct libinput_event_pointer;
233
234 /**
235  * @ingroup event_touch
236  * @struct libinput_event_touch
237  *
238  * Touch event representing a touch down, move or up, as well as a touch
239  * cancel and touch frame events. Valid event types for this event are @ref
240  * LIBINPUT_EVENT_TOUCH_DOWN, @ref LIBINPUT_EVENT_TOUCH_MOTION, @ref
241  * LIBINPUT_EVENT_TOUCH_UP, @ref LIBINPUT_EVENT_TOUCH_CANCEL and @ref
242  * LIBINPUT_EVENT_TOUCH_FRAME.
243  */
244 struct libinput_event_touch;
245
246 /**
247  * @defgroup event Accessing and destruction of events
248  */
249
250 /**
251  * @ingroup event
252  *
253  * Destroy the event.
254  *
255  * @param event An event retrieved by libinput_get_event().
256  */
257 void
258 libinput_event_destroy(struct libinput_event *event);
259
260 /**
261  * @ingroup event
262  *
263  * Get the type of the event.
264  *
265  * @param event An event retrieved by libinput_get_event().
266  */
267 enum libinput_event_type
268 libinput_event_get_type(struct libinput_event *event);
269
270 /**
271  * @ingroup event
272  *
273  * Get the libinput context from the event.
274  *
275  * @param event The libinput event
276  * @return The libinput context for this event.
277  */
278 struct libinput *
279 libinput_event_get_context(struct libinput_event *event);
280
281 /**
282  * @ingroup event
283  *
284  * Return the device associated with this event, if applicable. For device
285  * added/removed events this is the device added or removed. For all other
286  * device events, this is the device that generated the event.
287  *
288  * This device is not refcounted and its lifetime is that of the event. Use
289  * libinput_device_ref() before using the device outside of this scope.
290  *
291  * @return The device associated with this event
292  */
293
294 struct libinput_device *
295 libinput_event_get_device(struct libinput_event *event);
296
297 /**
298  * @ingroup event
299  *
300  * Return the pointer event that is this input event. If the event type does
301  * not match the pointer event types, this function returns NULL.
302  *
303  * The inverse of this function is libinput_event_pointer_get_base_event().
304  *
305  * @return A pointer event, or NULL for other events
306  */
307 struct libinput_event_pointer *
308 libinput_event_get_pointer_event(struct libinput_event *event);
309
310 /**
311  * @ingroup event
312  *
313  * Return the keyboard event that is this input event. If the event type does
314  * not match the keyboard event types, this function returns NULL.
315  *
316  * The inverse of this function is libinput_event_keyboard_get_base_event().
317  *
318  * @return A keyboard event, or NULL for other events
319  */
320 struct libinput_event_keyboard *
321 libinput_event_get_keyboard_event(struct libinput_event *event);
322
323 /**
324  * @ingroup event
325  *
326  * Return the touch event that is this input event. If the event type does
327  * not match the touch event types, this function returns NULL.
328  *
329  * The inverse of this function is libinput_event_touch_get_base_event().
330  *
331  * @return A touch event, or NULL for other events
332  */
333 struct libinput_event_touch *
334 libinput_event_get_touch_event(struct libinput_event *event);
335
336 /**
337  * @ingroup event
338  *
339  * Return the device event that is this input event. If the event type does
340  * not match the device event types, this function returns NULL.
341  *
342  * The inverse of this function is
343  * libinput_event_device_notify_get_base_event().
344  *
345  * @return A device event, or NULL for other events
346  */
347 struct libinput_event_device_notify *
348 libinput_event_get_device_notify_event(struct libinput_event *event);
349
350 /**
351  * @ingroup event
352  *
353  * @return The generic libinput_event of this event
354  */
355 struct libinput_event *
356 libinput_event_device_notify_get_base_event(struct libinput_event_device_notify *event);
357
358 /**
359  * @defgroup event_keyboard Keyboard events
360  *
361  * Key events are generated when a key changes its logical state, usually by
362  * being pressed or released.
363  */
364
365 /**
366  * @ingroup event_keyboard
367  *
368  * @return The event time for this event
369  */
370 uint32_t
371 libinput_event_keyboard_get_time(struct libinput_event_keyboard *event);
372
373 /**
374  * @ingroup event_keyboard
375  *
376  * @return The keycode that triggered this key event
377  */
378 uint32_t
379 libinput_event_keyboard_get_key(struct libinput_event_keyboard *event);
380
381 /**
382  * @ingroup event_keyboard
383  *
384  * @return The state change of the key
385  */
386 enum libinput_key_state
387 libinput_event_keyboard_get_key_state(struct libinput_event_keyboard *event);
388
389
390 /**
391  * @ingroup event_keyboard
392  *
393  * @return The generic libinput_event of this event
394  */
395 struct libinput_event *
396 libinput_event_keyboard_get_base_event(struct libinput_event_keyboard *event);
397
398 /**
399  * @ingroup event_keyboard
400  *
401  * For the key of a LIBINPUT_EVENT_KEYBOARD_KEY event, return the total number
402  * of keys pressed on all devices on the associated seat after the event was
403  * triggered.
404  *
405  " @note It is an application bug to call this function for events other than
406  * LIBINPUT_EVENT_KEYBOARD_KEY. For other events, this function returns 0.
407  *
408  * @return the seat wide pressed key count for the key of this event
409  */
410 uint32_t
411 libinput_event_keyboard_get_seat_key_count(
412         struct libinput_event_keyboard *event);
413
414 /**
415  * @defgroup event_pointer Pointer events
416  *
417  * Pointer events reflect motion, button and scroll events, as well as
418  * events from other axes.
419  */
420
421 /**
422  * @ingroup event_pointer
423  *
424  * @return The event time for this event
425  */
426 uint32_t
427 libinput_event_pointer_get_time(struct libinput_event_pointer *event);
428
429 /**
430  * @ingroup event_pointer
431  *
432  * Return the delta between the last event and the current event. For pointer
433  * events that are not of type LIBINPUT_EVENT_POINTER_MOTION, this function
434  * returns 0.
435  *
436  * @note It is an application bug to call this function for events other than
437  * LIBINPUT_EVENT_POINTER_MOTION.
438  *
439  * @return the relative x movement since the last event
440  */
441 double
442 libinput_event_pointer_get_dx(struct libinput_event_pointer *event);
443
444 /**
445  * @ingroup event_pointer
446  *
447  * Return the delta between the last event and the current event. For pointer
448  * events that are not of type LIBINPUT_EVENT_POINTER_MOTION, this function
449  * returns 0.
450  *
451  * @note It is an application bug to call this function for events other than
452  * LIBINPUT_EVENT_POINTER_MOTION.
453  *
454  * @return the relative y movement since the last event
455  */
456 double
457 libinput_event_pointer_get_dy(struct libinput_event_pointer *event);
458
459 /**
460  * @ingroup event_pointer
461  *
462  * Return the current absolute x coordinate of the pointer event, in mm from
463  * the top left corner of the device. To get the corresponding output screen
464  * coordinate, use libinput_event_pointer_get_x_transformed().
465  *
466  * For pointer events that are not of type
467  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, this function returns 0.
468  *
469  * @note It is an application bug to call this function for events other than
470  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
471  *
472  * @return the current absolute x coordinate
473  */
474 double
475 libinput_event_pointer_get_absolute_x(struct libinput_event_pointer *event);
476
477 /**
478  * @ingroup event_pointer
479  *
480  * Return the current absolute y coordinate of the pointer event, in mm from
481  * the top left corner of the device. To get the corresponding output screen
482  * coordinate, use libinput_event_pointer_get_x_transformed().
483  *
484  * For pointer events that are not of type
485  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, this function returns 0.
486  *
487  * @note It is an application bug to call this function for events other than
488  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
489  *
490  * @return the current absolute y coordinate
491  */
492 double
493 libinput_event_pointer_get_absolute_y(struct libinput_event_pointer *event);
494
495 /**
496  * @ingroup event_pointer
497  *
498  * Return the current absolute x coordinate of the pointer event, transformed to
499  * screen coordinates.
500  *
501  * For pointer events that are not of type
502  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, the return value of this function is
503  * undefined.
504  *
505  * @note It is an application bug to call this function for events other than
506  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
507  *
508  * @param event The libinput pointer event
509  * @param width The current output screen width
510  * @return the current absolute x coordinate transformed to a screen coordinate
511  */
512 double
513 libinput_event_pointer_get_absolute_x_transformed(
514         struct libinput_event_pointer *event,
515         uint32_t width);
516
517 /**
518  * @ingroup event_pointer
519  *
520  * Return the current absolute y coordinate of the pointer event, transformed to
521  * screen coordinates.
522  *
523  * For pointer events that are not of type
524  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE, the return value of this function is
525  * undefined.
526  *
527  * @note It is an application bug to call this function for events other than
528  * LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE.
529  *
530  * @param event The libinput pointer event
531  * @param height The current output screen height
532  * @return the current absolute y coordinate transformed to a screen coordinate
533  */
534 double
535 libinput_event_pointer_get_absolute_y_transformed(
536         struct libinput_event_pointer *event,
537         uint32_t height);
538
539 /**
540  * @ingroup event_pointer
541  *
542  * Return the button that triggered this event.
543  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_BUTTON,
544  * this function returns 0.
545  *
546  * @note It is an application bug to call this function for events other than
547  * LIBINPUT_EVENT_POINTER_BUTTON.
548  *
549  * @return the button triggering this event
550  */
551 uint32_t
552 libinput_event_pointer_get_button(struct libinput_event_pointer *event);
553
554 /**
555  * @ingroup event_pointer
556  *
557  * Return the button state that triggered this event.
558  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_BUTTON,
559  * this function returns 0.
560  *
561  * @note It is an application bug to call this function for events other than
562  * LIBINPUT_EVENT_POINTER_BUTTON.
563  *
564  * @return the button state triggering this event
565  */
566 enum libinput_button_state
567 libinput_event_pointer_get_button_state(struct libinput_event_pointer *event);
568
569 /**
570  * @ingroup event_pointer
571  *
572  * For the button of a LIBINPUT_EVENT_POINTER_BUTTON event, return the total
573  * number of buttons pressed on all devices on the associated seat after the
574  * the event was triggered.
575  *
576  " @note It is an application bug to call this function for events other than
577  * LIBINPUT_EVENT_POINTER_BUTTON. For other events, this function returns 0.
578  *
579  * @return the seat wide pressed button count for the key of this event
580  */
581 uint32_t
582 libinput_event_pointer_get_seat_button_count(
583         struct libinput_event_pointer *event);
584
585 /**
586  * @ingroup event_pointer
587  *
588  * Return the axis that triggered this event.
589  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_AXIS,
590  * this function returns 0.
591  *
592  * @note It is an application bug to call this function for events other than
593  * LIBINPUT_EVENT_POINTER_AXIS.
594  *
595  * @return the axis triggering this event
596  */
597 enum libinput_pointer_axis
598 libinput_event_pointer_get_axis(struct libinput_event_pointer *event);
599
600 /**
601  * @ingroup event_pointer
602  *
603  * Return the axis value of the given axis. The interpretation of the value
604  * is dependent on the axis. For the two scrolling axes
605  * LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL and
606  * LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, the value of the event is in
607  * relative scroll units, with the positive direction being down or right,
608  * respectively. The dimension of a scroll unit is equal to one unit of
609  * motion in the respective axis, where applicable (e.g. touchpad two-finger
610  * scrolling).
611  *
612  * For pointer events that are not of type LIBINPUT_EVENT_POINTER_AXIS,
613  * this function returns 0.
614  *
615  * @note It is an application bug to call this function for events other than
616  * LIBINPUT_EVENT_POINTER_AXIS.
617  *
618  * @return the axis value of this event
619  */
620 double
621 libinput_event_pointer_get_axis_value(struct libinput_event_pointer *event);
622
623 /**
624  * @ingroup event_pointer
625  *
626  * @return The generic libinput_event of this event
627  */
628 struct libinput_event *
629 libinput_event_pointer_get_base_event(struct libinput_event_pointer *event);
630
631
632 /**
633  * @defgroup event_touch Touch events
634  *
635  * Events from absolute touch devices.
636  */
637
638 /**
639  * @ingroup event_touch
640  *
641  * @return The event time for this event
642  */
643 uint32_t
644 libinput_event_touch_get_time(struct libinput_event_touch *event);
645
646 /**
647  * @ingroup event_touch
648  *
649  * Get the slot of this touch event. See the kernel's multitouch
650  * protocol B documentation for more information.
651  *
652  * If the touch event has no assigned slot, for example if it is from a
653  * single touch device, this function returns -1.
654  *
655  * @note this function should not be called for LIBINPUT_EVENT_TOUCH_CANCEL or
656  * LIBINPUT_EVENT_TOUCH_FRAME.
657  *
658  * @return The slot of this touch event
659  */
660 int32_t
661 libinput_event_touch_get_slot(struct libinput_event_touch *event);
662
663 /**
664  * @ingroup event_touch
665  *
666  * Get the seat slot of the touch event. A seat slot is a non-negative seat
667  * wide unique identifier of an active touch point.
668  *
669  * Events from single touch devices will be represented as one individual
670  * touch point per device.
671  *
672  * @note this function should not be called for LIBINPUT_EVENT_TOUCH_CANCEL or
673  * LIBINPUT_EVENT_TOUCH_FRAME.
674  *
675  * @return The seat slot of the touch event
676  */
677 int32_t
678 libinput_event_touch_get_seat_slot(struct libinput_event_touch *event);
679
680 /**
681  * @ingroup event_touch
682  *
683  * Return the current absolute x coordinate of the touch event, in mm from
684  * the top left corner of the device. To get the corresponding output screen
685  * coordinate, use libinput_event_touch_get_x_transformed().
686  *
687  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
688  * LIBINPUT_EVENT_TOUCH_MOTION.
689  *
690  * @param event The libinput touch event
691  * @return the current absolute x coordinate
692  */
693 double
694 libinput_event_touch_get_x(struct libinput_event_touch *event);
695
696 /**
697  * @ingroup event_touch
698  *
699  * Return the current absolute y coordinate of the touch event, in mm from
700  * the top left corner of the device. To get the corresponding output screen
701  * coordinate, use libinput_event_touch_get_y_transformed().
702  *
703  * For LIBINPUT_EVENT_TOUCH_UP 0 is returned.
704  *
705  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
706  * LIBINPUT_EVENT_TOUCH_MOTION.
707  *
708  * @param event The libinput touch event
709  * @return the current absolute y coordinate
710  */
711 double
712 libinput_event_touch_get_y(struct libinput_event_touch *event);
713
714 /**
715  * @ingroup event_touch
716  *
717  * Return the current absolute x coordinate of the touch event, transformed to
718  * screen coordinates.
719  *
720  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
721  * LIBINPUT_EVENT_TOUCH_MOTION.
722  *
723  * @param event The libinput touch event
724  * @param width The current output screen width
725  * @return the current absolute x coordinate transformed to a screen coordinate
726  */
727 double
728 libinput_event_touch_get_x_transformed(struct libinput_event_touch *event,
729                                        uint32_t width);
730
731 /**
732  * @ingroup event_touch
733  *
734  * Return the current absolute y coordinate of the touch event, transformed to
735  * screen coordinates.
736  *
737  * @note this function should only be called for LIBINPUT_EVENT_TOUCH_DOWN and
738  * LIBINPUT_EVENT_TOUCH_MOTION.
739  *
740  * @param event The libinput touch event
741  * @param height The current output screen height
742  * @return the current absolute y coordinate transformed to a screen coordinate
743  */
744 double
745 libinput_event_touch_get_y_transformed(struct libinput_event_touch *event,
746                                        uint32_t height);
747
748 /**
749  * @ingroup event_touch
750  *
751  * @return The generic libinput_event of this event
752  */
753 struct libinput_event *
754 libinput_event_touch_get_base_event(struct libinput_event_touch *event);
755
756 /**
757  * @defgroup base Initialization and manipulation of libinput contexts
758  */
759
760 struct libinput_interface {
761         /**
762          * Open the device at the given path with the flags provided and
763          * return the fd.
764          *
765          * @param path The device path to open
766          * @param flags Flags as defined by open(2)
767          * @param user_data The user_data provided in
768          * libinput_udev_create_for_seat()
769          *
770          * @return the file descriptor, or a negative errno on failure.
771          */
772         int (*open_restricted)(const char *path, int flags, void *user_data);
773         /**
774          * Close the file descriptor.
775          *
776          * @param fd The file descriptor to close
777          * @param user_data The user_data provided in
778          * libinput_udev_create_for_seat()
779          */
780         void (*close_restricted)(int fd, void *user_data);
781 };
782
783 /**
784  * @ingroup base
785  *
786  * Create a new libinput context from udev. This context is inactive until
787  * assigned a seat ID with libinput_udev_assign_seat().
788  *
789  * @param interface The callback interface
790  * @param user_data Caller-specific data passed to the various callback
791  * interfaces.
792  * @param udev An already initialized udev context
793  *
794  * @return An initialized, but inactive libinput context or NULL on error
795  */
796 struct libinput *
797 libinput_udev_create_context(const struct libinput_interface *interface,
798                              void *user_data,
799                              struct udev *udev);
800
801 /**
802  * @ingroup base
803  *
804  * Assign a seat to this libinput context. New devices or the removal of
805  * existing devices will appear as events during libinput_dispatch().
806  *
807  * libinput_udev_assign_seat() succeeds even if no input devices are currently
808  * available on this seat, or if devices are available but fail to open in
809  * @ref libinput_interface::open_restricted. Devices that do not have the
810  * minimum capabilities to be recognized as pointer, keyboard or touch
811  * device are ignored. Such devices and those that failed to open
812  * ignored until the next call to libinput_resume().
813  *
814  * This function may only be called once per context.
815  *
816  * @param libinput A libinput context initialized with
817  * libinput_udev_create_context()
818  * @param seat_id A seat identifier. This string must not be NULL.
819  *
820  * @return 0 on success or -1 on failure.
821  */
822 int
823 libinput_udev_assign_seat(struct libinput *libinput,
824                        const char *seat_id);
825
826 /**
827  * @ingroup base
828  *
829  * Create a new libinput context from udev, for input devices matching
830  * the given seat ID. New devices or devices removed will appear as events
831  * during libinput_dispatch.
832  *
833  * libinput_udev_create_for_seat() succeeds even if no input device is
834  * available in this seat, or if devices are available but fail to open in
835  * @ref libinput_interface::open_restricted. Devices that do not have the
836  * minimum capabilities to be recognized as pointer, keyboard or touch
837  * device are ignored. Such devices and those that failed to open
838  * ignored until the next call to libinput_resume().
839  *
840  * @param interface The callback interface
841  * @param user_data Caller-specific data passed to the various callback
842  * interfaces.
843  * @param udev An already initialized udev context
844  * @param seat_id A seat identifier. This string must not be NULL.
845  *
846  * @return An initialized libinput context, ready to handle events or NULL on
847  * error.
848  *
849  * @deprecated This function was deprecated in 0.4.0 and will be removed
850  * soon. Use libinput_udev_create_context() and libinput_udev_assign_seat()
851  * instead.
852  */
853 struct libinput *
854 libinput_udev_create_for_seat(const struct libinput_interface *interface,
855                               void *user_data,
856                               struct udev *udev,
857                               const char *seat_id)
858         LIBINPUT_ATTRIBUTE_DEPRECATED;
859
860 /**
861  * @ingroup base
862  *
863  * Create a new libinput context that requires the caller to manually add or
864  * remove devices with libinput_path_add_device() and
865  * libinput_path_remove_device().
866  *
867  * The context is fully initialized but will not generate events until at
868  * least one device has been added.
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  * Destroy the libinput context. After this, object references associated with
1020  * the destroyed context are invalid and may not be interacted with.
1021  *
1022  * @param libinput A previously initialized libinput context
1023  */
1024 void
1025 libinput_destroy(struct libinput *libinput);
1026
1027 /**
1028  * @ingroup base
1029  *
1030  * Set the global log priority. Messages with priorities equal to or
1031  * higher than the argument will be printed to the current log handler.
1032  *
1033  * The default log priority is LIBINPUT_LOG_PRIORITY_ERROR.
1034  *
1035  * @param priority The minimum priority of log messages to print.
1036  *
1037  * @see libinput_log_set_handler
1038  * @see libinput_log_get_priority
1039  */
1040 void
1041 libinput_log_set_priority(enum libinput_log_priority priority);
1042
1043 /**
1044  * @ingroup base
1045  *
1046  * Get the global log priority. Messages with priorities equal to or
1047  * higher than the argument will be printed to the current log handler.
1048  *
1049  * The default log priority is LIBINPUT_LOG_PRIORITY_ERROR.
1050  *
1051  * @return The minimum priority of log messages to print.
1052  *
1053  * @see libinput_log_set_handler
1054  * @see libinput_log_set_priority
1055  */
1056 enum libinput_log_priority
1057 libinput_log_get_priority(void);
1058
1059 /**
1060  * @ingroup base
1061  *
1062  * Log handler type for custom logging.
1063  *
1064  * @param priority The priority of the current message
1065  * @param user_data Caller-specific data pointer as previously passed into
1066  * libinput_log_set_handler()
1067  * @param format Message format in printf-style
1068  * @param args Message arguments
1069  *
1070  * @see libinput_set_log_priority
1071  * @see libinput_log_set_handler
1072  */
1073 typedef void (*libinput_log_handler)(enum libinput_log_priority priority,
1074                                      void *user_data,
1075                                      const char *format, va_list args)
1076            LIBINPUT_ATTRIBUTE_PRINTF(3, 0);
1077
1078 /**
1079  * @ingroup base
1080  *
1081  * Set the global log handler. Messages with priorities equal to or higher
1082  * than the current log priority will be passed to the given
1083  * log handler.
1084  *
1085  * The default log handler prints to stderr.
1086  *
1087  * @param log_handler The log handler for library messages.
1088  * @param user_data Caller-specific data pointer, passed into the log
1089  * handler.
1090  *
1091  * @see libinput_log_set_handler
1092  */
1093 void
1094 libinput_log_set_handler(libinput_log_handler log_handler,
1095                          void *user_data);
1096
1097 /**
1098  * @defgroup seat Initialization and manipulation of seats
1099  *
1100  * A seat has two identifiers, the physical name and the logical name. The
1101  * physical name is summarized as the list of devices a process on the same
1102  * physical seat has access to.
1103  *
1104  * The logical seat name is the seat name for a logical group of devices. A
1105  * compositor may use that to create additonal seats as independent device
1106  * sets. Alternatively, a compositor may limit itself to a single logical
1107  * seat, leaving a second compositor to manage devices on the other logical
1108  * seats.
1109  *
1110  * @code
1111  * +---+--------+------------+------------------------+------------+
1112  * |   | event0 |            |                        | log seat A |
1113  * | K +--------+            |                        +------------+
1114  * | e | event1 | phys seat0 |    libinput context 1  |            |
1115  * | r +--------+            |                        | log seat B |
1116  * | n | event2 |            |                        |            |
1117  * | e +--------+------------+------------------------+------------+
1118  * | l | event3 | phys seat1 |    libinput context 2  | log seat C |
1119  * +---+--------+------------+------------------------+------------+
1120  * @endcode
1121  */
1122
1123 /**
1124  * @ingroup seat
1125  *
1126  * Increase the refcount of the seat. A seat will be freed whenever the
1127  * refcount reaches 0. This may happen during dispatch if the
1128  * seat was removed from the system. A caller must ensure to reference
1129  * the seat correctly to avoid dangling pointers.
1130  *
1131  * @param seat A previously obtained seat
1132  */
1133 void
1134 libinput_seat_ref(struct libinput_seat *seat);
1135
1136 /**
1137  * @ingroup seat
1138  *
1139  * Decrease the refcount of the seat. A seat will be freed whenever the
1140  * refcount reaches 0. This may happen during dispatch if the
1141  * seat was removed from the system. A caller must ensure to reference
1142  * the seat correctly to avoid dangling pointers.
1143  *
1144  * @param seat A previously obtained seat
1145  */
1146 void
1147 libinput_seat_unref(struct libinput_seat *seat);
1148
1149 /**
1150  * @ingroup seat
1151  *
1152  * Set caller-specific data associated with this seat. libinput does
1153  * not manage, look at, or modify this data. The caller must ensure the
1154  * data is valid.
1155  *
1156  * @param seat A previously obtained seat
1157  * @param user_data Caller-specific data pointer
1158  * @see libinput_seat_get_user_data
1159  */
1160 void
1161 libinput_seat_set_user_data(struct libinput_seat *seat, void *user_data);
1162
1163 /**
1164  * @ingroup seat
1165  *
1166  * Get the caller-specific data associated with this seat, if any.
1167  *
1168  * @param seat A previously obtained seat
1169  * @return Caller-specific data pointer or NULL if none was set
1170  * @see libinput_seat_set_user_data
1171  */
1172 void *
1173 libinput_seat_get_user_data(struct libinput_seat *seat);
1174
1175 /**
1176  * @ingroup seat
1177  *
1178  * Return the physical name of the seat. For libinput contexts created from
1179  * udev, this is always the same value as passed into
1180  * libinput_udev_create_for_seat() and all seats from that context will have
1181  * the same physical name.
1182  *
1183  * The physical name of the seat is one that is usually set by the system or
1184  * lower levels of the stack. In most cases, this is the base filter for
1185  * devices - devices assigned to seats outside the current seat will not
1186  * be available to the caller.
1187  *
1188  * @param seat A previously obtained seat
1189  * @return the physical name of this seat
1190  */
1191 const char *
1192 libinput_seat_get_physical_name(struct libinput_seat *seat);
1193
1194 /**
1195  * @ingroup seat
1196  *
1197  * Return the logical name of the seat. This is an identifier to group sets
1198  * of devices within the compositor.
1199  *
1200  * @param seat A previously obtained seat
1201  * @return the logical name of this seat
1202  */
1203 const char *
1204 libinput_seat_get_logical_name(struct libinput_seat *seat);
1205
1206 /**
1207  * @defgroup device Initialization and manipulation of input devices
1208  */
1209
1210 /**
1211  * @ingroup device
1212  *
1213  * Increase the refcount of the input device. An input device will be freed
1214  * whenever the refcount reaches 0. This may happen during dispatch if the
1215  * device was removed from the system. A caller must ensure to reference
1216  * the device correctly to avoid dangling pointers.
1217  *
1218  * @param device A previously obtained device
1219  */
1220 void
1221 libinput_device_ref(struct libinput_device *device);
1222
1223 /**
1224  * @ingroup device
1225  *
1226  * Decrease the refcount of the input device. An input device will be freed
1227  * whenever the refcount reaches 0. This may happen during dispatch if the
1228  * device was removed from the system. A caller must ensure to reference
1229  * the device correctly to avoid dangling pointers.
1230  *
1231  * @param device A previously obtained device
1232  */
1233 void
1234 libinput_device_unref(struct libinput_device *device);
1235
1236 /**
1237  * @ingroup device
1238  *
1239  * Set caller-specific data associated with this input device. libinput does
1240  * not manage, look at, or modify this data. The caller must ensure the
1241  * data is valid.
1242  *
1243  * @param device A previously obtained device
1244  * @param user_data Caller-specific data pointer
1245  * @see libinput_device_get_user_data
1246  */
1247 void
1248 libinput_device_set_user_data(struct libinput_device *device, void *user_data);
1249
1250 /**
1251  * @ingroup device
1252  *
1253  * Get the caller-specific data associated with this input device, if any.
1254  *
1255  * @param device A previously obtained device
1256  * @return Caller-specific data pointer or NULL if none was set
1257  * @see libinput_device_set_user_data
1258  */
1259 void *
1260 libinput_device_get_user_data(struct libinput_device *device);
1261
1262 /**
1263  * @ingroup device
1264  *
1265  * Get the system name of the device.
1266  *
1267  * @param device A previously obtained device
1268  * @return System name of the device
1269  */
1270 const char *
1271 libinput_device_get_sysname(struct libinput_device *device);
1272
1273 /**
1274  * @ingroup device
1275  *
1276  * A device may be mapped to a single output, or all available outputs. If a
1277  * device is mapped to a single output only, a relative device may not move
1278  * beyond the boundaries of this output. An absolute device has its input
1279  * coordinates mapped to the extents of this output.
1280  *
1281  * @return the name of the output this device is mapped to, or NULL if no
1282  * output is set
1283  */
1284 const char *
1285 libinput_device_get_output_name(struct libinput_device *device);
1286
1287 /**
1288  * @ingroup device
1289  *
1290  * Get the seat associated with this input device.
1291  *
1292  * A seat can be uniquely identified by the physical and logical seat name.
1293  * There will ever be only one seat instance with a given physical and logical
1294  * seat name pair at any given time, but if no external reference is kept, it
1295  * may be destroyed if no device belonging to it is left.
1296  *
1297  * @param device A previously obtained device
1298  * @return The seat this input device belongs to
1299  */
1300 struct libinput_seat *
1301 libinput_device_get_seat(struct libinput_device *device);
1302
1303 /**
1304  * @ingroup device
1305  *
1306  * Update the LEDs on the device, if any. If the device does not have
1307  * LEDs, or does not have one or more of the LEDs given in the mask, this
1308  * function does nothing.
1309  *
1310  * @param device A previously obtained device
1311  * @param leds A mask of the LEDs to set, or unset.
1312  */
1313 void
1314 libinput_device_led_update(struct libinput_device *device,
1315                            enum libinput_led leds);
1316
1317 /**
1318  * @ingroup device
1319  *
1320  * Set the bitmask in keys to the bitmask of the keys present on the device
1321  * (see linux/input.h), up to size characters.
1322  *
1323  * @param device A current input device
1324  * @param keys An array filled with the bitmask for the keys
1325  * @param size Size of the keys array
1326  *
1327  * @return The number of valid bytes in keys, or a negative errno on failure
1328  */
1329 int
1330 libinput_device_get_keys(struct libinput_device *device,
1331                          char *keys, size_t size);
1332
1333 /**
1334  * @ingroup device
1335  *
1336  * Apply the 3x3 transformation matrix to absolute device coordinates. This
1337  * matrix has no effect on relative events.
1338  *
1339  * Given a 6-element array [a, b, c, d, e, f], the matrix is applied as
1340  * @code
1341  * [ a  b  c ]   [ x ]
1342  * [ d  e  f ] * [ y ]
1343  * [ 0  0  1 ]   [ 1 ]
1344  * @endcode
1345  */
1346 void
1347 libinput_device_calibrate(struct libinput_device *device,
1348                           float calibration[6]);
1349
1350 /**
1351  * @ingroup device
1352  *
1353  * Check if the given device has the specified capability
1354  *
1355  * @return 1 if the given device has the capability or 0 if not
1356  */
1357 int
1358 libinput_device_has_capability(struct libinput_device *device,
1359                                enum libinput_device_capability capability);
1360
1361 /**
1362  * @ingroup device
1363  *
1364  * Get the physical size of a device in mm, where meaningful. This function
1365  * only succeeds on devices with the required data, i.e. tablets, touchpads
1366  * and touchscreens.
1367  *
1368  * If this function returns nonzero, width and height are unmodified.
1369  *
1370  * @param device The device
1371  * @param width Set to the width of the device
1372  * @param height Set to the height of the device
1373  * @return 0 on success, or nonzero otherwise
1374  */
1375 int
1376 libinput_device_get_size(struct libinput_device *device,
1377                          double *width,
1378                          double *height);
1379
1380 #ifdef __cplusplus
1381 }
1382 #endif
1383
1384 #endif /* LIBINPUT_H */