wayland_protocols/xdg.rs
1//! Protocols related to window management
2
3#![cfg_attr(rustfmt, rustfmt_skip)]
4
5#[cfg(feature = "staging")]
6pub mod activation {
7 //! The way for a client to pass focus to another toplevel is as follows.
8 //!
9 //! The client that intends to activate another toplevel uses the
10 //! xdg_activation_v1.get_activation_token request to get an activation token.
11 //! This token is then passed to the client to be activated through a separate
12 //! band of communication. The client to be activated will then pass the token
13 //! it received to the xdg_activation_v1.activate request. The compositor can
14 //! then use this token to decide how to react to the activation request.
15 //!
16 //! The token the activating client gets may be ineffective either already at
17 //! the time it receives it, for example if it was not focused, for focus
18 //! stealing prevention. The activating client will have no way to discover
19 //! the validity of the token, and may still forward it to the to be activated
20 //! client.
21 //!
22 //! The created activation token may optionally get information attached to it
23 //! that can be used by the compositor to identify the application that we
24 //! intend to activate. This can for example be used to display a visual hint
25 //! about what application is being started.
26
27 #[allow(missing_docs)]
28 pub mod v1 {
29 wayland_protocol!(
30 "./protocols/staging/xdg-activation/xdg-activation-v1.xml",
31 []
32 );
33 }
34}
35
36#[cfg(feature = "unstable")]
37pub mod decoration {
38 //! This interface allows a compositor to announce support for server-side
39 //! decorations.
40
41 //! A window decoration is a set of window controls as deemed appropriate by
42 //! the party managing them, such as user interface components used to move,
43 //! resize and change a window's state.
44
45 //! A client can use this protocol to request being decorated by a supporting
46 //! compositor.
47
48 //! If compositor and client do not negotiate the use of a server-side
49 //! decoration using this protocol, clients continue to self-decorate as they
50 //! see fit.
51
52 /// Unstable version 1
53 pub mod zv1 {
54 wayland_protocol!(
55 "./protocols/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml",
56 [crate::xdg::shell]
57 );
58 }
59}
60
61#[cfg(feature = "unstable")]
62pub mod foreign {
63 //! Protocol for exporting xdg surface handles
64 //!
65 //! This protocol specifies a way for making it possible to reference a surface
66 //! of a different client. With such a reference, a client can, by using the
67 //! interfaces provided by this protocol, manipulate the relationship between
68 //! its own surfaces and the surface of some other client. For example, stack
69 //! some of its own surface above the other clients surface.
70 //!
71 //! In order for a client A to get a reference of a surface of client B, client
72 //! B must first export its surface using xdg_exporter.export. Upon doing this,
73 //! client B will receive a handle (a unique string) that it may share with
74 //! client A in some way (for example D-Bus). After client A has received the
75 //! handle from client B, it may use xdg_importer.import to create a reference
76 //! to the surface client B just exported. See the corresponding requests for
77 //! details.
78 //!
79 //! A possible use case for this is out-of-process dialogs. For example when a
80 //! sandboxed client without file system access needs the user to select a file
81 //! on the file system, given sandbox environment support, it can export its
82 //! surface, passing the exported surface handle to an unsandboxed process that
83 //! can show a file browser dialog and stack it above the sandboxed client's
84 //! surface.
85
86 /// Unstable version 1
87 pub mod zv1 {
88 wayland_protocol!(
89 "./protocols/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml",
90 []
91 );
92 }
93
94 /// Unstable version 2
95 pub mod zv2 {
96 wayland_protocol!(
97 "./protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml",
98 []
99 );
100 }
101}
102
103#[cfg(feature = "unstable")]
104pub mod xdg_output {
105 //! Protocol to describe output regions
106 //!
107 //! This protocol aims at describing outputs in a way which is more in line
108 //! with the concept of an output on desktop oriented systems.
109 //!
110 //! Some information are more specific to the concept of an output for
111 //! a desktop oriented system and may not make sense in other applications,
112 //! such as IVI systems for example.
113 //!
114 //! Typically, the global compositor space on a desktop system is made of
115 //! a contiguous or overlapping set of rectangular regions.
116 //!
117 //! Some of the information provided in this protocol might be identical
118 //! to their counterparts already available from wl_output, in which case
119 //! the information provided by this protocol should be preferred to their
120 //! equivalent in wl_output. The goal is to move the desktop specific
121 //! concepts (such as output location within the global compositor space,
122 //! the connector name and types, etc.) out of the core wl_output protocol.
123
124 /// Unstable version 1
125 pub mod zv1 {
126 wayland_protocol!(
127 "./protocols/unstable/xdg-output/xdg-output-unstable-v1.xml",
128 []
129 );
130 }
131}
132
133pub mod shell {
134 //! XDG Shell protocol
135 //!
136 //! Exposes the `xdg_wm_base` global, which deprecates and replaces `wl_shell`.
137
138 wayland_protocol!(
139 "./protocols/stable/xdg-shell/xdg-shell.xml",
140 []
141 );
142}
143
144#[cfg(feature = "staging")]
145pub mod toplevel_drag {
146 //! This protocol enhances normal drag and drop with the ability to move a
147 //! window at the same time. This allows having detachable parts of a window
148 //! that when dragged out of it become a new window and can be dragged over
149 //! an existing window to be reattached.
150 //!
151 //! A typical workflow would be when the user starts dragging on top of a
152 //! detachable part of a window, the client would create a `wl_data_source` and
153 //! a `xdg_toplevel_drag_v1` object and start the drag as normal via
154 //! `wl_data_device.start_drag`. Once the client determines that the detachable
155 //! window contents should be detached from the originating window, it creates
156 //! a new `xdg_toplevel` with these contents and issues a
157 //! `xdg_toplevel_drag_v1.attach` request before mapping it. From now on the new
158 //! window is moved by the compositor during the drag as if the client called
159 //! `xdg_toplevel.move`.
160 //!
161 //! Dragging an existing window is similar. The client creates a
162 //! `xdg_toplevel_drag_v1` object and attaches the existing toplevel before
163 //! starting the drag.
164 //!
165 //! Clients use the existing drag and drop mechanism to detect when a window
166 //! can be docked or undocked. If the client wants to snap a window into a
167 //! parent window it should delete or unmap the dragged top-level. If the
168 //! contents should be detached again it attaches a new toplevel as described
169 //! above. If a drag operation is cancelled without being dropped, clients
170 //! should revert to the previous state, deleting any newly created windows
171 //! as appropriate. When a drag operation ends as indicated by
172 //! `wl_data_source.dnd_drop_performed` the dragged toplevel window's final
173 //! position is determined as if a `xdg_toplevel_move` operation ended.
174
175 /// Version 1
176 pub mod v1 {
177 wayland_protocol!(
178 "./protocols/staging/xdg-toplevel-drag/xdg-toplevel-drag-v1.xml",
179 [crate::xdg::shell]
180 );
181 }
182}
183
184#[cfg(feature = "staging")]
185pub mod dialog {
186 //! The `xdg_wm_dialog_v1` interface is exposed as a global object allowing
187 //! to register surfaces with a xdg_toplevel role as "dialogs" relative to
188 //! another toplevel.
189 //!
190 //! The compositor may let this relation influence how the surface is
191 //! placed, displayed or interacted with.
192
193 /// Version 1
194 pub mod v1 {
195 wayland_protocol!(
196 "./protocols/staging/xdg-dialog/xdg-dialog-v1.xml",
197 [crate::xdg::shell]
198 );
199 }
200}
201
202#[cfg(feature = "staging")]
203pub mod toplevel_icon {
204 //! This protocol allows clients to set icons for their toplevel surfaces
205 //! either via the XDG icon stock (using an icon name), or from pixel data.
206 //!
207 //! A toplevel icon represents the individual toplevel (unlike the application
208 //! or launcher icon, which represents the application as a whole), and may be
209 //! shown in window switchers, window overviews and taskbars that list
210 //! individual windows.
211
212 /// Version 1
213 pub mod v1 {
214 wayland_protocol!(
215 "./protocols/staging/xdg-toplevel-icon/xdg-toplevel-icon-v1.xml",
216 [crate::xdg::shell]
217 );
218 }
219}
220
221#[cfg(feature = "staging")]
222pub mod system_bell {
223 //! This global interface enables clients to ring the system bell.
224
225 /// Version 1
226 pub mod v1 {
227 wayland_protocol!(
228 "./protocols/staging/xdg-system-bell/xdg-system-bell-v1.xml",
229 []
230 );
231 }
232}