<?xml version="1.0" encoding="UTF-8"?>
<protocol name="agl_shell">
<copyright>
- Copyright © 2019 Collabora, Ltd.
+ Copyright © 2019, 2022 Collabora, Ltd.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="agl_shell" version="1">
- <description summary="user interface for weston-ivi">
+ <interface name="agl_shell" version="3">
+ <description summary="user interface for Automotive Grade Linux platform">
+ Starting with version 2 of the protocol, the client is required to wait
+ for the 'bound_ok' or 'bound_fail' events in order to proceed further.
+
+ In case the client gets a 'bound_fail' event then it should consider that
+ there's another client already bound to the agl_shell protocol.
+ A client that receives a 'bound_ok' event should consider that there's
+ no other client already bound to the interface and can proceed further.
+
+ If the client uses an older version of the protocol it will receive
+ automatically an error and the compositor will terminate the connection,
+ if there's another client already bound the interface.
+
+ If the client receives the 'bound_fail' event and attempts to use the
+ interface further it will receive an error and the compositor will
+ terminate the connection. After the 'bound_fail' event was received the
+ client should call the destructor, which has been added with version 2
+ of the protocol. The client is free to try at a later point in time to
+ see if it will receive the 'bound_ok' event, but there's no explicit way
+ of finding out when that event will be delivered.
+ It is assumed that it can infer that information through other
+ means/other channels.
</description>
+ <request name="destroy" type="destructor" since="2">
+ <description summary="destroys the factory object">
+ </description>
+ </request>
+
<enum name="error">
<entry name="invalid_argument" value="0"/>
<entry name="background_exists" value="1"/>
<entry name="panel_exists" value="2"/>
+ <entry name="split_failed" value="3" since="3"/>
</enum>
<enum name="edge">
<entry name="right" value="3"/>
</enum>
+ <enum name="tile_orientation" since="3">
+ <entry name="none" value="0"/>
+ <entry name="top" value="1"/>
+ <entry name="bottom" value="2"/>
+ <entry name="left" value="3"/>
+ <entry name="right" value="4"/>
+ </enum>
+
+
<request name="ready">
<description summary="client is ready to be shown">
Tell the server that this client is ready to be shown. The server
<arg name="app_id" type="string"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
+
+ <event name="bound_ok" since="2">
+ <description summary="event sent if binding was ok">
+ Informs the client that it was able to bind the agl_shell
+ interface succesfully. Clients are required to wait for this
+ event before continuing further.
+ </description>
+ </event>
+
+ <event name="bound_fail" since="2">
+ <description summary="event sent if binding was nok">
+ Informs the client that binding to the agl_shell interface was
+ unsuccesfull. Clients are required to wait for this event for
+ continuing further.
+ </description>
+ </event>
+
+ <request name="set_app_split" since="3">
+ <description summary="set the application split">
+ Request changes the application from the original mode (whatever that
+ might be) to a split, tiled orientation mode defined in the orientation
+ enum. Clients need to implement resizing (meaing handle xdg-shell
+ configure events) for this to work correctly.
+
+ This request only handles a single level of tiling for practical
+ reasons: to keep implementation simple and straight forward. The
+ compositor will ignore requests if there are already two windows
+ present, and will terminate the client's connection with a protocol
+ violation, if it detects more than one tiling level.
+
+ If there's no app_id with the supplied name it will be added to a
+ pending list in order to be applied when an application id gets started.
+ Applications can use this approch if they want to be started in a
+ tiled orientantion position, before creating the xdg-shell toplevel role.
+
+ A none orientation type would make the window go back to the original
+ maximized mode. If two windows are side by side, returning one of them
+ back the original mode would mean the other one will be made hidden
+ and the one doing the request for the none orientation will become
+ the currently active window. A further activation, using activate_app
+ request for the other window would make that one active.
+
+ Closing the window in the tiled orientation state implies that either
+ the background surface will displayed, or in case there was another
+ applications being shown at that time, will make that application be
+ returned to the original, maximized state.
+
+ The tiled orientation could be applied independently of each other,
+ such that a client can transition from one tiled orientation to
+ another. Note that any other window already present would literally
+ take the opposite orientation with the one currently being changed. So
+ tiled orientation modification automatically implies a tile orientation
+ for any other application already present/active at that time.
+
+ In case there's already a client active at that time, it will be
+ attributed automatically the opposite tiled orientation, such that two
+ concurrent applications can be displayed at the same time.
+
+ The orientation tiles can not be combined, and only state at a time
+ can be active. Only horizontal and vertical tiling is possible.
+
+ Input focus is being delivered to the last started/activated window, such
+ that users can cycle between that one or the other, assumes there's
+ another window in the first place.
+
+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a
+ description of app_id.
+ </description>
+ <arg name="app_id" type="string"/>
+ <arg name="orientation" type="uint" enum="tile_orientation"/>
+ <arg name="output" type="object" interface="wl_output"/>
+ </request>
+
</interface>
</protocol>