xwayland: Use new Xwayland DDX
[profile/ivi/weston-ivi-shell.git] / xwayland / xwayland.h
1 /*
2  * Copyright © 2012 Intel Corporation
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 #include <wayland-server.h>
24 #include <xcb/xcb.h>
25 #include <xcb/xfixes.h>
26 #include <xcb/composite.h>
27 #include <cairo/cairo-xcb.h>
28
29 #include "compositor.h"
30
31 #define SEND_EVENT_MASK (0x80)
32 #define EVENT_TYPE(event) ((event)->response_type & ~SEND_EVENT_MASK)
33
34 struct weston_xserver {
35         struct wl_display *wl_display;
36         struct wl_event_loop *loop;
37         struct wl_event_source *sigchld_source;
38         int abstract_fd;
39         struct wl_event_source *abstract_source;
40         int unix_fd;
41         struct wl_event_source *unix_source;
42         int wm_fd;
43         int display;
44         struct wl_event_source *sigusr1_source;
45         struct weston_process process;
46         struct wl_resource *resource;
47         struct wl_client *client;
48         struct weston_compositor *compositor;
49         struct weston_wm *wm;
50         struct wl_listener destroy_listener;
51 };
52
53 struct weston_wm {
54         xcb_connection_t *conn;
55         const xcb_query_extension_reply_t *xfixes;
56         struct wl_event_source *source;
57         xcb_screen_t *screen;
58         struct hash_table *window_hash;
59         struct weston_xserver *server;
60         xcb_window_t wm_window;
61         struct weston_wm_window *focus_window;
62         struct theme *theme;
63         xcb_cursor_t *cursors;
64         int last_cursor;
65         xcb_render_pictforminfo_t format_rgb, format_rgba;
66         xcb_visualid_t visual_id;
67         xcb_colormap_t colormap;
68         struct wl_listener create_surface_listener;
69         struct wl_listener activate_listener;
70         struct wl_listener transform_listener;
71         struct wl_listener kill_listener;
72         struct wl_list unpaired_window_list;
73
74         xcb_window_t selection_window;
75         xcb_window_t selection_owner;
76         int incr;
77         int data_source_fd;
78         struct wl_event_source *property_source;
79         xcb_get_property_reply_t *property_reply;
80         int property_start;
81         struct wl_array source_data;
82         xcb_selection_request_event_t selection_request;
83         xcb_atom_t selection_target;
84         xcb_timestamp_t selection_timestamp;
85         int selection_property_set;
86         int flush_property_on_delete;
87         struct wl_listener selection_listener;
88
89         xcb_window_t dnd_window;
90         xcb_window_t dnd_owner;
91
92         struct {
93                 xcb_atom_t               wm_protocols;
94                 xcb_atom_t               wm_normal_hints;
95                 xcb_atom_t               wm_take_focus;
96                 xcb_atom_t               wm_delete_window;
97                 xcb_atom_t               wm_state;
98                 xcb_atom_t               wm_s0;
99                 xcb_atom_t               wm_client_machine;
100                 xcb_atom_t               net_wm_cm_s0;
101                 xcb_atom_t               net_wm_name;
102                 xcb_atom_t               net_wm_pid;
103                 xcb_atom_t               net_wm_icon;
104                 xcb_atom_t               net_wm_state;
105                 xcb_atom_t               net_wm_state_fullscreen;
106                 xcb_atom_t               net_wm_user_time;
107                 xcb_atom_t               net_wm_icon_name;
108                 xcb_atom_t               net_wm_window_type;
109                 xcb_atom_t               net_wm_window_type_desktop;
110                 xcb_atom_t               net_wm_window_type_dock;
111                 xcb_atom_t               net_wm_window_type_toolbar;
112                 xcb_atom_t               net_wm_window_type_menu;
113                 xcb_atom_t               net_wm_window_type_utility;
114                 xcb_atom_t               net_wm_window_type_splash;
115                 xcb_atom_t               net_wm_window_type_dialog;
116                 xcb_atom_t               net_wm_window_type_dropdown;
117                 xcb_atom_t               net_wm_window_type_popup;
118                 xcb_atom_t               net_wm_window_type_tooltip;
119                 xcb_atom_t               net_wm_window_type_notification;
120                 xcb_atom_t               net_wm_window_type_combo;
121                 xcb_atom_t               net_wm_window_type_dnd;
122                 xcb_atom_t               net_wm_window_type_normal;
123                 xcb_atom_t               net_wm_moveresize;
124                 xcb_atom_t               net_supporting_wm_check;
125                 xcb_atom_t               net_supported;
126                 xcb_atom_t               motif_wm_hints;
127                 xcb_atom_t               clipboard;
128                 xcb_atom_t               clipboard_manager;
129                 xcb_atom_t               targets;
130                 xcb_atom_t               utf8_string;
131                 xcb_atom_t               wl_selection;
132                 xcb_atom_t               incr;
133                 xcb_atom_t               timestamp;
134                 xcb_atom_t               multiple;
135                 xcb_atom_t               compound_text;
136                 xcb_atom_t               text;
137                 xcb_atom_t               string;
138                 xcb_atom_t               text_plain_utf8;
139                 xcb_atom_t               text_plain;
140                 xcb_atom_t               xdnd_selection;
141                 xcb_atom_t               xdnd_aware;
142                 xcb_atom_t               xdnd_enter;
143                 xcb_atom_t               xdnd_leave;
144                 xcb_atom_t               xdnd_drop;
145                 xcb_atom_t               xdnd_status;
146                 xcb_atom_t               xdnd_finished;
147                 xcb_atom_t               xdnd_type_list;
148                 xcb_atom_t               xdnd_action_copy;
149                 xcb_atom_t               wl_surface_id;
150         } atom;
151 };
152
153 void
154 dump_property(struct weston_wm *wm, xcb_atom_t property,
155               xcb_get_property_reply_t *reply);
156
157 const char *
158 get_atom_name(xcb_connection_t *c, xcb_atom_t atom);
159
160 void
161 weston_wm_selection_init(struct weston_wm *wm);
162 int
163 weston_wm_handle_selection_event(struct weston_wm *wm,
164                                  xcb_generic_event_t *event);
165
166 struct weston_wm *
167 weston_wm_create(struct weston_xserver *wxs, int fd);
168 void
169 weston_wm_destroy(struct weston_wm *wm);
170
171 struct weston_seat *
172 weston_wm_pick_seat(struct weston_wm *wm);
173
174 int
175 weston_wm_handle_dnd_event(struct weston_wm *wm,
176                            xcb_generic_event_t *event);
177 void
178 weston_wm_dnd_init(struct weston_wm *wm);