backend/wayland: Implement start() interface of ds_backend
[platform/core/uifw/libds.git] / src / libds / backend / wayland / backend.h
1 #ifndef DS_BACKEND_WAYLAND_H
2 #define DS_BACKEND_WAYLAND_H
3
4 #include "libds/interfaces/backend.h"
5 #include "libds/interfaces/output.h"
6 #include "libds/interfaces/input_device.h"
7 #include "libds/interfaces/pointer.h"
8 #include "libds/interfaces/keyboard.h"
9 #include "libds/interfaces/touch.h"
10
11 struct ds_wl_backend_server
12 {
13     struct ds_wl_backend *backend;
14     struct wl_display *display;
15     struct wl_registry *registry;
16     struct wl_compositor *compositor;
17     struct xdg_wm_base *xdg_wm_base;
18     struct wl_event_source *event_source;
19     struct wl_shm *shm;
20 };
21
22 struct ds_wl_backend
23 {
24     struct ds_backend base;
25
26     struct wl_display *display;
27     struct wl_listener display_destroy;
28
29     struct wl_list outputs; // ds_wl_output.link
30     struct wl_list buffers; // ds_wl_buffer.link
31     struct wl_list seats; // ds_wl_seat.link
32
33     struct wl_event_source *server_event_source;
34     struct ds_wl_backend_server server;
35
36     size_t requested_outputs;
37 };
38
39 struct ds_wl_buffer
40 {
41     struct ds_buffer *buffer;
42     struct wl_buffer *wl_buffer;
43     struct wl_list link; // ds_wl_backend.buffers
44     struct wl_listener buffer_destroy;
45
46     bool released;
47 };
48
49 struct ds_wl_output
50 {
51     struct ds_output base;
52
53     struct ds_wl_backend *backend;
54
55     struct wl_surface *surface;
56     struct xdg_surface *xdg_surface;
57     struct xdg_toplevel *xdg_toplevel;
58     struct wl_callback *frame_callback;
59
60     struct wl_list link;
61
62     struct {
63         struct ds_wl_pointer *pointer;
64         struct wl_surface *surface;
65         int32_t hotspot_x, hotspot_y;
66         uint32_t enter_serial;
67     } cursor;
68 };
69
70 struct ds_wl_seat
71 {
72     struct ds_wl_backend *backend;
73     struct ds_wl_output *output;
74
75     struct wl_seat *wl_seat;
76     char *name;
77
78     struct ds_input_device *pointer_dev;
79     struct ds_input_device *keyboard_dev;
80     struct ds_input_device *touch_dev;
81
82     struct wl_callback *initial_info_cb;
83
84     struct wl_list link; // ds_wl_backend.seats
85
86     enum wl_seat_capability caps;
87
88     int version;
89     uint32_t enter_serial;
90
91     bool initialized;
92 };
93
94 struct ds_wl_input_device
95 {
96     struct ds_input_device base;
97
98     struct ds_wl_backend *backend;
99     struct ds_wl_seat *seat;
100 };
101
102 struct ds_wl_pointer
103 {
104     struct ds_pointer base;
105
106     struct ds_wl_input_device *input_device;
107     struct wl_pointer *wl_pointer;
108 };
109
110 struct ds_wl_keyboard
111 {
112     struct ds_keyboard base;
113
114     struct wl_keyboard *wl_keyboard;
115 };
116
117 struct ds_wl_touch
118 {
119     struct ds_touch base;
120
121     struct wl_touch *wl_touch;
122 };
123
124 struct ds_wl_backend *
125 wl_backend_from_backend(struct ds_backend *backend);
126
127 struct ds_wl_output *create_wl_output(struct ds_wl_backend *backend);
128
129 void
130 destroy_wl_buffer(struct ds_wl_buffer *buffer);
131
132 struct ds_wl_seat *create_wl_seat(struct ds_wl_backend *backend, uint32_t id,
133         uint32_t available_version);
134
135 void destroy_wl_seat(struct ds_wl_seat *seat);
136
137 void output_enter_pointer(struct ds_wl_output *output,
138         struct ds_wl_pointer *pointer, uint32_t serial);
139
140 void output_leave_pointer(struct ds_wl_output *output);
141
142 #endif