Promote touch frames to top-level events
[platform/upstream/libinput.git] / src / libinput-private.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_PRIVATE_H
24 #define LIBINPUT_PRIVATE_H
25
26 #include "libinput.h"
27 #include "libinput-util.h"
28
29 struct libinput_interface_backend {
30         int (*resume)(struct libinput *libinput);
31         void (*suspend)(struct libinput *libinput);
32         void (*destroy)(struct libinput *libinput);
33 };
34
35 struct libinput {
36         int epoll_fd;
37         struct list source_destroy_list;
38
39         struct list seat_list;
40
41         struct libinput_event **events;
42         size_t events_count;
43         size_t events_len;
44         size_t events_in;
45         size_t events_out;
46
47         const struct libinput_interface *interface;
48         const struct libinput_interface_backend *interface_backend;
49         void *user_data;
50 };
51
52 typedef void (*libinput_seat_destroy_func) (struct libinput_seat *seat);
53
54 struct libinput_seat {
55         struct libinput *libinput;
56         struct list link;
57         struct list devices_list;
58         void *user_data;
59         int refcount;
60         char *physical_name;
61         char *logical_name;
62         libinput_seat_destroy_func destroy;
63 };
64
65 struct libinput_device {
66         struct libinput_seat *seat;
67         struct list link;
68         void *user_data;
69         int terminated;
70         int refcount;
71 };
72
73 typedef void (*libinput_source_dispatch_t)(void *data);
74
75 struct libinput_source;
76
77 int
78 libinput_init(struct libinput *libinput,
79               const struct libinput_interface *interface,
80               const struct libinput_interface_backend *interface_backend,
81               void *user_data);
82
83 struct libinput_source *
84 libinput_add_fd(struct libinput *libinput,
85                 int fd,
86                 libinput_source_dispatch_t dispatch,
87                 void *data);
88
89 void
90 libinput_remove_source(struct libinput *libinput,
91                        struct libinput_source *source);
92
93 int
94 open_restricted(struct libinput *libinput,
95                 const char *path, int flags);
96
97 void
98 close_restricted(struct libinput *libinput, int fd);
99
100 void
101 libinput_seat_init(struct libinput_seat *seat,
102                    struct libinput *libinput,
103                    const char *physical_name,
104                    const char *logical_name,
105                    libinput_seat_destroy_func destroy);
106
107 void
108 libinput_device_init(struct libinput_device *device,
109                      struct libinput_seat *seat);
110
111 void
112 notify_added_device(struct libinput_device *device);
113
114 void
115 notify_removed_device(struct libinput_device *device);
116
117 void
118 keyboard_notify_key(struct libinput_device *device,
119                     uint32_t time,
120                     uint32_t key,
121                     enum libinput_keyboard_key_state state);
122
123 void
124 pointer_notify_motion(struct libinput_device *device,
125                       uint32_t time,
126                       li_fixed_t dx,
127                       li_fixed_t dy);
128
129 void
130 pointer_notify_motion_absolute(struct libinput_device *device,
131                                uint32_t time,
132                                li_fixed_t x,
133                                li_fixed_t y);
134
135 void
136 pointer_notify_button(struct libinput_device *device,
137                       uint32_t time,
138                       int32_t button,
139                       enum libinput_pointer_button_state state);
140
141 void
142 pointer_notify_axis(struct libinput_device *device,
143                     uint32_t time,
144                     enum libinput_pointer_axis axis,
145                     li_fixed_t value);
146
147 void
148 touch_notify_touch(struct libinput_device *device,
149                    uint32_t time,
150                    int32_t slot,
151                    li_fixed_t x,
152                    li_fixed_t y,
153                    enum libinput_touch_type touch_type);
154
155 void
156 touch_notify_frame(struct libinput_device *device,
157                    uint32_t time);
158 #endif /* LIBINPUT_PRIVATE_H */