| <?xml version="1.0" encoding="UTF-8"?> | 
 | <protocol name="keyboard_shortcuts_inhibit_unstable_v1"> | 
 |  | 
 |   <copyright> | 
 |     Copyright © 2017 Red Hat Inc. | 
 |  | 
 |     Permission is hereby granted, free of charge, to any person obtaining a | 
 |     copy of this software and associated documentation files (the "Software"), | 
 |     to deal in the Software without restriction, including without limitation | 
 |     the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
 |     and/or sell copies of the Software, and to permit persons to whom the | 
 |     Software is furnished to do so, subject to the following conditions: | 
 |  | 
 |     The above copyright notice and this permission notice (including the next | 
 |     paragraph) shall be included in all copies or substantial portions of the | 
 |     Software. | 
 |  | 
 |     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
 |     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
 |     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | 
 |     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
 |     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | 
 |     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 
 |     DEALINGS IN THE SOFTWARE. | 
 |   </copyright> | 
 |  | 
 |   <description summary="Protocol for inhibiting the compositor keyboard shortcuts"> | 
 |     This protocol specifies a way for a client to request the compositor | 
 |     to ignore its own keyboard shortcuts for a given seat, so that all | 
 |     key events from that seat get forwarded to a surface. | 
 |  | 
 |     Warning! The protocol described in this file is experimental and | 
 |     backward incompatible changes may be made. Backward compatible | 
 |     changes may be added together with the corresponding interface | 
 |     version bump. | 
 |     Backward incompatible changes are done by bumping the version | 
 |     number in the protocol and interface names and resetting the | 
 |     interface version. Once the protocol is to be declared stable, | 
 |     the 'z' prefix and the version number in the protocol and | 
 |     interface names are removed and the interface version number is | 
 |     reset. | 
 |   </description> | 
 |  | 
 |   <interface name="zwp_keyboard_shortcuts_inhibit_manager_v1" version="1"> | 
 |     <description summary="context object for keyboard grab_manager"> | 
 |       A global interface used for inhibiting the compositor keyboard shortcuts. | 
 |     </description> | 
 |  | 
 |     <request name="destroy" type="destructor"> | 
 |       <description summary="destroy the keyboard shortcuts inhibitor object"> | 
 | 	Destroy the keyboard shortcuts inhibitor manager. | 
 |       </description> | 
 |     </request> | 
 |  | 
 |     <request name="inhibit_shortcuts"> | 
 |       <description summary="create a new keyboard shortcuts inhibitor object"> | 
 | 	Create a new keyboard shortcuts inhibitor object associated with | 
 | 	the given surface for the given seat. | 
 |  | 
 | 	If shortcuts are already inhibited for the specified seat and surface, | 
 | 	a protocol error "already_inhibited" is raised by the compositor. | 
 |       </description> | 
 |       <arg name="id" type="new_id" interface="zwp_keyboard_shortcuts_inhibitor_v1"/> | 
 |       <arg name="surface" type="object" interface="wl_surface" | 
 | 	   summary="the surface that inhibits the keyboard shortcuts behavior"/> | 
 |       <arg name="seat" type="object" interface="wl_seat" | 
 | 	   summary="the wl_seat for which keyboard shortcuts should be disabled"/> | 
 |     </request> | 
 |  | 
 |     <enum name="error"> | 
 |       <entry name="already_inhibited" | 
 | 	     value="0" | 
 | 	     summary="the shortcuts are already inhibited for this surface"/> | 
 |     </enum> | 
 |   </interface> | 
 |  | 
 |   <interface name="zwp_keyboard_shortcuts_inhibitor_v1" version="1"> | 
 |     <description summary="context object for keyboard shortcuts inhibitor"> | 
 |       A keyboard shortcuts inhibitor instructs the compositor to ignore | 
 |       its own keyboard shortcuts when the associated surface has keyboard | 
 |       focus. As a result, when the surface has keyboard focus on the given | 
 |       seat, it will receive all key events originating from the specified | 
 |       seat, even those which would normally be caught by the compositor for | 
 |       its own shortcuts. | 
 |  | 
 |       The Wayland compositor is however under no obligation to disable | 
 |       all of its shortcuts, and may keep some special key combo for its own | 
 |       use, including but not limited to one allowing the user to forcibly | 
 |       restore normal keyboard events routing in the case of an unwilling | 
 |       client. The compositor may also use the same key combo to reactivate | 
 |       an existing shortcut inhibitor that was previously deactivated on | 
 |       user request. | 
 |  | 
 |       When the compositor restores its own keyboard shortcuts, an | 
 |       "inactive" event is emitted to notify the client that the keyboard | 
 |       shortcuts inhibitor is not effectively active for the surface and | 
 |       seat any more, and the client should not expect to receive all | 
 |       keyboard events. | 
 |  | 
 |       When the keyboard shortcuts inhibitor is inactive, the client has | 
 |       no way to forcibly reactivate the keyboard shortcuts inhibitor. | 
 |  | 
 |       The user can chose to re-enable a previously deactivated keyboard | 
 |       shortcuts inhibitor using any mechanism the compositor may offer, | 
 |       in which case the compositor will send an "active" event to notify | 
 |       the client. | 
 |  | 
 |       If the surface is destroyed, unmapped, or loses the seat's keyboard | 
 |       focus, the keyboard shortcuts inhibitor becomes irrelevant and the | 
 |       compositor will restore its own keyboard shortcuts but no "inactive" | 
 |       event is emitted in this case. | 
 |     </description> | 
 |  | 
 |     <request name="destroy" type="destructor"> | 
 |       <description summary="destroy the keyboard shortcuts inhibitor object"> | 
 | 	Remove the keyboard shortcuts inhibitor from the associated wl_surface. | 
 |       </description> | 
 |     </request> | 
 |  | 
 |     <event name="active"> | 
 |       <description summary="shortcuts are inhibited"> | 
 | 	This event indicates that the shortcut inhibitor is active. | 
 |  | 
 | 	The compositor sends this event every time compositor shortcuts | 
 | 	are inhibited on behalf of the surface. When active, the client | 
 | 	may receive input events normally reserved by the compositor | 
 | 	(see zwp_keyboard_shortcuts_inhibitor_v1). | 
 |  | 
 | 	This occurs typically when the initial request "inhibit_shortcuts" | 
 | 	first becomes active or when the user instructs the compositor to | 
 | 	re-enable and existing shortcuts inhibitor using any mechanism | 
 | 	offered by the compositor. | 
 |       </description> | 
 |     </event> | 
 |  | 
 |     <event name="inactive"> | 
 |       <description summary="shortcuts are restored"> | 
 | 	This event indicates that the shortcuts inhibitor is inactive, | 
 | 	normal shortcuts processing is restored by the compositor. | 
 |        </description> | 
 |     </event> | 
 |   </interface> | 
 | </protocol> |