wayland-server.h 8.46 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 * Copyright © 2008 Kristian Høgsberg
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that copyright
 * notice and this permission notice appear in supporting documentation, and
 * that the name of the copyright holders not be used in advertising or
 * publicity pertaining to distribution of the software without specific,
 * written prior permission.  The copyright holders make no representations
 * about the suitability of this software for any purpose.  It is provided "as
 * is" without express or implied warranty.
 *
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 * OF THIS SOFTWARE.
 */

Kristian Høgsberg's avatar
Kristian Høgsberg committed
23
24
25
#ifndef WAYLAND_H
#define WAYLAND_H

26
27
28
29
#ifdef  __cplusplus
extern "C" {
#endif

Kristian Høgsberg's avatar
Kristian Høgsberg committed
30
#include <stdint.h>
31
#include "wayland-util.h"
32
#include "wayland-server-protocol.h"
33

Kristian Høgsberg's avatar
Kristian Høgsberg committed
34
35
36
37
38
39
40
enum {
	WL_EVENT_READABLE = 0x01,
	WL_EVENT_WRITEABLE = 0x02
};

struct wl_event_loop;
struct wl_event_source;
41
42
43
typedef int (*wl_event_loop_fd_func_t)(int fd, uint32_t mask, void *data);
typedef int (*wl_event_loop_timer_func_t)(void *data);
typedef int (*wl_event_loop_signal_func_t)(int signal_number, void *data);
44
typedef void (*wl_event_loop_idle_func_t)(void *data);
Kristian Høgsberg's avatar
Kristian Høgsberg committed
45
46
47
48
49

struct wl_event_loop *wl_event_loop_create(void);
void wl_event_loop_destroy(struct wl_event_loop *loop);
struct wl_event_source *wl_event_loop_add_fd(struct wl_event_loop *loop,
					     int fd, uint32_t mask,
50
					     wl_event_loop_fd_func_t func,
Kristian Høgsberg's avatar
Kristian Høgsberg committed
51
					     void *data);
52
53
54
55
int wl_event_source_fd_update(struct wl_event_source *source, uint32_t mask);
struct wl_event_source *wl_event_loop_add_timer(struct wl_event_loop *loop,
						wl_event_loop_timer_func_t func,
						void *data);
56
57
58
59
60
61
struct wl_event_source *
wl_event_loop_add_signal(struct wl_event_loop *loop,
			int signal_number,
			wl_event_loop_signal_func_t func,
			void *data);

62
63
64
int wl_event_source_timer_update(struct wl_event_source *source,
				 int ms_delay);
int wl_event_source_remove(struct wl_event_source *source);
65
void wl_event_source_check(struct wl_event_source *source);
66

67

68
int wl_event_loop_dispatch(struct wl_event_loop *loop, int timeout);
69
70
71
struct wl_event_source *wl_event_loop_add_idle(struct wl_event_loop *loop,
					       wl_event_loop_idle_func_t func,
					       void *data);
72
int wl_event_loop_get_fd(struct wl_event_loop *loop);
Kristian Høgsberg's avatar
Kristian Høgsberg committed
73
74

struct wl_client;
75
struct wl_display;
76
struct wl_input_device;
77

78
struct wl_display *wl_display_create(void);
79
void wl_display_destroy(struct wl_display *display);
80
struct wl_event_loop *wl_display_get_event_loop(struct wl_display *display);
81
82
int wl_display_add_socket(struct wl_display *display, const char *name);
void wl_display_terminate(struct wl_display *display);
83
84
void wl_display_run(struct wl_display *display);

85
86
void wl_display_add_object(struct wl_display *display,
			   struct wl_object *object);
87

88
typedef void (*wl_global_bind_func_t)(struct wl_client *client, void *data,
89
				      uint32_t version, uint32_t id);
90

91
92
93
94
struct wl_global *wl_display_add_global(struct wl_display *display,
					const struct wl_interface *interface,
					void *data,
					wl_global_bind_func_t bind);
95

96
97
void wl_display_remove_global(struct wl_display *display,
			      struct wl_global *global);
Laszlo Agocs's avatar
Laszlo Agocs committed
98

99
struct wl_client *wl_client_create(struct wl_display *display, int fd);
100
void wl_client_destroy(struct wl_client *client);
101
void wl_client_flush(struct wl_client *client);
102

103
104
105
106
struct wl_resource *
wl_client_add_object(struct wl_client *client,
		     const struct wl_interface *interface,
		     const void *implementation, uint32_t id, void *data);
107
108
109
110
struct wl_resource *
wl_client_new_object(struct wl_client *client,
		     const struct wl_interface *interface,
		     const void *implementation, void *data);
111

112
113
114
115
116
117
118
119
120
struct wl_resource {
	struct wl_object object;
	void (*destroy)(struct wl_resource *resource);
	struct wl_list link;
	struct wl_list destroy_listener_list;
	struct wl_client *client;
	void *data;
};

Benjamin Franzke's avatar
Benjamin Franzke committed
121
122
123
124
125
126
127
128
129
130
struct wl_shm_callbacks {
	void (*buffer_created)(struct wl_buffer *buffer);

	void (*buffer_damaged)(struct wl_buffer *buffer,
			      int32_t x, int32_t y,
			      int32_t width, int32_t height);

	void (*buffer_destroyed)(struct wl_buffer *buffer);
};

131
struct wl_buffer {
132
	struct wl_resource resource;
133
	int32_t width, height;
134
	uint32_t busy_count;
Benjamin Franzke's avatar
Benjamin Franzke committed
135
	void *user_data;
136
137
};

138
139
140
struct wl_listener {
	struct wl_list link;
	void (*func)(struct wl_listener *listener,
141
		     struct wl_resource *resource, uint32_t time);
142
143
};

144
struct wl_surface {
145
	struct wl_resource resource;
146
147
};

148
149
150
151
struct wl_grab;
struct wl_grab_interface {
	void (*motion)(struct wl_grab *grab,
		       uint32_t time, int32_t x, int32_t y);
152
153
	void (*button)(struct wl_grab *grab,
		       uint32_t time, int32_t button, int32_t state);
154
155
156
157
158
159
160
161
	void (*end)(struct wl_grab *grab, uint32_t time);
};

struct wl_grab {
	const struct wl_grab_interface *interface;
	struct wl_input_device *input_device;
};

162
struct wl_input_device {
163
164
	struct wl_list resource_list;
	struct wl_resource *pointer_focus_resource;
165
	struct wl_surface *pointer_focus;
166
	struct wl_resource *keyboard_focus_resource;
167
168
169
170
171
172
173
174
175
	struct wl_surface *keyboard_focus;
	struct wl_array keys;
	uint32_t pointer_focus_time;
	uint32_t keyboard_focus_time;
	struct wl_listener pointer_focus_listener;
	struct wl_listener keyboard_focus_listener;

	int32_t x, y;
	struct wl_grab *grab;
176
	struct wl_grab implicit_grab;
177
178
179
180
181
	uint32_t grab_time;
	int32_t grab_x, grab_y;
	uint32_t grab_button;
	struct wl_listener grab_listener;
};
182

183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/*
 * Post an event to the client's object referred to by 'resource'.
 * 'opcode' is the event number generated from the protocol XML
 * description (the event name). The variable arguments are the event
 * parameters, in the order they appear in the protocol XML specification.
 *
 * The variable arguments' types are:
 * - type=uint: 	uint32_t
 * - type=int:		int32_t
 * - type=string:	(const char *) to a nil-terminated string
 * - type=array:	(struct wl_array *)
 * - type=fd:		int, that is an open file descriptor
 * - type=new_id:	(struct wl_object *) or (struct wl_resource *)
 * - type=object:	(struct wl_object *) or (struct wl_resource *)
 */
198
199
void wl_resource_post_event(struct wl_resource *resource,
			    uint32_t opcode, ...);
200
201
void wl_resource_queue_event(struct wl_resource *resource,
			     uint32_t opcode, ...);
202
203

/* msg is a printf format string, variable args are its args. */
204
205
void wl_resource_post_error(struct wl_resource *resource,
			    uint32_t code, const char *msg, ...);
206
void wl_resource_post_no_memory(struct wl_resource *resource);
207

208
void
209
210
wl_display_post_frame(struct wl_display *display, struct wl_surface *surface,
		      uint32_t msecs);
211

212
213
214
215
void
wl_client_add_resource(struct wl_client *client,
		       struct wl_resource *resource);

216
217
218
struct wl_display *
wl_client_get_display(struct wl_client *client);

219
void
220
wl_resource_destroy(struct wl_resource *resource, uint32_t time);
221

222
void
223
wl_input_device_init(struct wl_input_device *device);
224

225
226
227
228
229
230
231
232
233
234
235
236
void
wl_input_device_set_pointer_focus(struct wl_input_device *device,
				  struct wl_surface *surface,
				  uint32_t time,
				  int32_t x, int32_t y,
				  int32_t sx, int32_t sy);

void
wl_input_device_set_keyboard_focus(struct wl_input_device *device,
				   struct wl_surface *surface,
				   uint32_t time);

237
238
239
240
241
242
243
244
245
246
247
void
wl_input_device_end_grab(struct wl_input_device *device, uint32_t time);
void
wl_input_device_start_grab(struct wl_input_device *device,
			   struct wl_grab *grab,
			   uint32_t button, uint32_t time);
int
wl_input_device_update_grab(struct wl_input_device *device,
			    struct wl_grab *grab,
			    struct wl_surface *surface, uint32_t time);

Benjamin Franzke's avatar
Benjamin Franzke committed
248
249
250
251
252
253
254
255
struct wl_shm;

void *
wl_shm_buffer_get_data(struct wl_buffer *buffer);

int32_t
wl_shm_buffer_get_stride(struct wl_buffer *buffer);

256
257
258
uint32_t
wl_shm_buffer_get_format(struct wl_buffer *buffer);

Benjamin Franzke's avatar
Benjamin Franzke committed
259
260
struct wl_buffer *
wl_shm_buffer_create(struct wl_shm *shm, int width, int height,
261
		     int stride, uint32_t visual, void *data);
Benjamin Franzke's avatar
Benjamin Franzke committed
262
263
264
265
266
267
268
269
270
271
272

int
wl_buffer_is_shm(struct wl_buffer *buffer);

struct wl_shm *
wl_shm_init(struct wl_display *display,
	    const struct wl_shm_callbacks *callbacks);

void
wl_shm_finish(struct wl_shm *shm);

273
274
275
276
#ifdef  __cplusplus
}
#endif

Kristian Høgsberg's avatar
Kristian Høgsberg committed
277
#endif