• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2016 Quentin "Sardem FF7" Glidic
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #ifndef WESTON_DESKTOP_H
25 #define WESTON_DESKTOP_H
26 
27 #include <libweston/libweston.h>
28 #include <pixman.h>
29 #include <stdbool.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 enum weston_desktop_surface_edge {
36 	WESTON_DESKTOP_SURFACE_EDGE_NONE = 0,
37 	WESTON_DESKTOP_SURFACE_EDGE_TOP = 1,
38 	WESTON_DESKTOP_SURFACE_EDGE_BOTTOM = 2,
39 	WESTON_DESKTOP_SURFACE_EDGE_LEFT = 4,
40 	WESTON_DESKTOP_SURFACE_EDGE_TOP_LEFT = 5,
41 	WESTON_DESKTOP_SURFACE_EDGE_BOTTOM_LEFT = 6,
42 	WESTON_DESKTOP_SURFACE_EDGE_RIGHT = 8,
43 	WESTON_DESKTOP_SURFACE_EDGE_TOP_RIGHT = 9,
44 	WESTON_DESKTOP_SURFACE_EDGE_BOTTOM_RIGHT = 10,
45 };
46 
47 struct weston_desktop;
48 struct weston_desktop_client;
49 struct weston_desktop_surface;
50 
51 struct weston_desktop_api {
52 	size_t struct_size;
53 	void (*ping_timeout)(struct weston_desktop_client *client,
54 			     void *user_data);
55 	void (*pong)(struct weston_desktop_client *client,
56 		     void *user_data);
57 
58 	void (*surface_added)(struct weston_desktop_surface *surface,
59 			      void *user_data);
60 	void (*surface_removed)(struct weston_desktop_surface *surface,
61 				void *user_data);
62 	void (*committed)(struct weston_desktop_surface *surface,
63 			  int32_t sx, int32_t sy, void *user_data);
64 	void (*show_window_menu)(struct weston_desktop_surface *surface,
65 				 struct weston_seat *seat, int32_t x, int32_t y,
66 				 void *user_data);
67 	void (*set_parent)(struct weston_desktop_surface *surface,
68 			   struct weston_desktop_surface *parent,
69 			   void *user_data);
70 	void (*move)(struct weston_desktop_surface *surface,
71 		     struct weston_seat *seat, uint32_t serial, void *user_data);
72 	void (*resize)(struct weston_desktop_surface *surface,
73 		       struct weston_seat *seat, uint32_t serial,
74 		       enum weston_desktop_surface_edge edges, void *user_data);
75 	void (*fullscreen_requested)(struct weston_desktop_surface *surface,
76 				     bool fullscreen,
77 				     struct weston_output *output,
78 				     void *user_data);
79 	void (*maximized_requested)(struct weston_desktop_surface *surface,
80 				    bool maximized, void *user_data);
81 	void (*minimized_requested)(struct weston_desktop_surface *surface,
82 				    void *user_data);
83 
84 	/** Position suggestion for an Xwayland window
85 	 *
86 	 * X11 applications assume they can position their windows as necessary,
87 	 * which is not possible in Wayland where positioning is driven by the
88 	 * shell alone. This function is used to relay absolute position wishes
89 	 * from Xwayland clients to the shell.
90 	 *
91 	 * This is particularly used for mapping windows at specified locations,
92 	 * e.g. via the commonly used '-geometry' command line option. In such
93 	 * case, a call to surface_added() is immediately followed by
94 	 * xwayland_position() if the X11 application specified a position.
95 	 * The committed() call that will map the window occurs later, so it
96 	 * is recommended to usually store and honour the given position for
97 	 * windows that are not yet mapped.
98 	 *
99 	 * Calls to this function may happen also at other times.
100 	 *
101 	 * The given coordinates are in the X11 window system coordinate frame
102 	 * relative to the X11 root window. Care should be taken to ensure the
103 	 * window gets mapped to coordinates that correspond to the proposed
104 	 * position from the X11 client perspective.
105 	 *
106 	 * \param surface The surface in question.
107 	 * \param x The absolute X11 coordinate for x.
108 	 * \param y The absolute X11 coordinate for y.
109 	 * \param user_data The user_data argument passed in to
110 	 * weston_desktop_create().
111 	 *
112 	 * This callback can be NULL.
113 	 */
114 	void (*set_xwayland_position)(struct weston_desktop_surface *surface,
115 				      int32_t x, int32_t y, void *user_data);
116 };
117 
118 void
119 weston_seat_break_desktop_grabs(struct weston_seat *seat);
120 
121 struct weston_desktop *
122 weston_desktop_create(struct weston_compositor *compositor,
123 		      const struct weston_desktop_api *api, void *user_data);
124 void
125 weston_desktop_destroy(struct weston_desktop *desktop);
126 
127 struct wl_client *
128 weston_desktop_client_get_client(struct weston_desktop_client *client);
129 void
130 weston_desktop_client_for_each_surface(struct weston_desktop_client *client,
131 				       void (*callback)(struct weston_desktop_surface *surface, void *user_data),
132 				       void *user_data);
133 int
134 weston_desktop_client_ping(struct weston_desktop_client *client);
135 
136 bool
137 weston_surface_is_desktop_surface(struct weston_surface *surface);
138 struct weston_desktop_surface *
139 weston_surface_get_desktop_surface(struct weston_surface *surface);
140 
141 void
142 weston_desktop_surface_set_user_data(struct weston_desktop_surface *self,
143 				     void *user_data);
144 struct weston_view *
145 weston_desktop_surface_create_view(struct weston_desktop_surface *surface);
146 void
147 weston_desktop_surface_unlink_view(struct weston_view *view);
148 void
149 weston_desktop_surface_propagate_layer(struct weston_desktop_surface *surface);
150 void
151 weston_desktop_surface_set_activated(struct weston_desktop_surface *surface,
152 				     bool activated);
153 void
154 weston_desktop_surface_set_fullscreen(struct weston_desktop_surface *surface,
155 				      bool fullscreen);
156 void
157 weston_desktop_surface_set_maximized(struct weston_desktop_surface *surface,
158 				     bool maximized);
159 void
160 weston_desktop_surface_set_resizing(struct weston_desktop_surface *surface,
161 				    bool resized);
162 void
163 weston_desktop_surface_set_size(struct weston_desktop_surface *surface,
164 				int32_t width, int32_t height);
165 void
166 weston_desktop_surface_close(struct weston_desktop_surface *surface);
167 void
168 weston_desktop_surface_add_metadata_listener(struct weston_desktop_surface *surface,
169 					     struct wl_listener *listener);
170 
171 void *
172 weston_desktop_surface_get_user_data(struct weston_desktop_surface *surface);
173 struct weston_desktop_client *
174 weston_desktop_surface_get_client(struct weston_desktop_surface *surface);
175 struct weston_surface *
176 weston_desktop_surface_get_surface(struct weston_desktop_surface *surface);
177 const char *
178 weston_desktop_surface_get_title(struct weston_desktop_surface *surface);
179 const char *
180 weston_desktop_surface_get_app_id(struct weston_desktop_surface *surface);
181 pid_t
182 weston_desktop_surface_get_pid(struct weston_desktop_surface *surface);
183 bool
184 weston_desktop_surface_get_activated(struct weston_desktop_surface *surface);
185 bool
186 weston_desktop_surface_get_maximized(struct weston_desktop_surface *surface);
187 bool
188 weston_desktop_surface_get_fullscreen(struct weston_desktop_surface *surface);
189 bool
190 weston_desktop_surface_get_resizing(struct weston_desktop_surface *surface);
191 struct weston_geometry
192 weston_desktop_surface_get_geometry(struct weston_desktop_surface *surface);
193 struct weston_size
194 weston_desktop_surface_get_max_size(struct weston_desktop_surface *surface);
195 struct weston_size
196 weston_desktop_surface_get_min_size(struct weston_desktop_surface *surface);
197 
198 #ifdef __cplusplus
199 }
200 #endif
201 
202 #endif /* WESTON_DESKTOP_H */
203