[PATCH wayland v4] doc: start documenting Xwayland
Jonas Ådahl
jadahl at gmail.com
Mon Dec 18 09:59:18 UTC 2017
On Fri, Aug 18, 2017 at 04:29:43PM +0300, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> This is a rough intro to what Xwayland is and does, with just one
> implementation detail so far (Window identification).
>
> I paid no attention to formatting details, those can be polished in
> follow-ups. I just want the prose out.
>
> I also just quickly whacked up the diagram, would be happy to see
> someone replace it with a nicer one. I just didn't have time to learn
> dot for now.
>
> v2:
> - typo fix
> - rephrase "talking to hardware" as "driving the displays"
> - mention circular dependency in intro
> - add section to explain rootless and rootful modes
> - remove paragraph about Xwayland protocol usage
> - move TBD part to the end under a new section header
>
> v3:
> - use "advantage" and "disadvantage" instead of "pro" and "con"
> - slight rewording on rootful mode and rootless mode paragraphs
> - removed the paragraph about the lack of shell and special Wayland
> protocol extensions
> - removed the commented out list of ideas to write
>
> v4:
> - typo fixes pointed out by Yong
>
> Cc: Olivier Fourdan <ofourdan at redhat.com>
> Cc: Jonas Ådahl <jadahl at gmail.com>
> Cc: Daniel Stone <daniel at fooishbar.org>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
Looks good to me.
Reviewed-by: Jonas Ådahl <jadahl at gmail.com>
Jonas
> ---
> doc/publican/Makefile.am | 5 +-
> doc/publican/sources/Wayland.xml | 1 +
> doc/publican/sources/Xwayland.xml | 170 +++++++++++++++++++++
> .../sources/images/xwayland-architecture.png | Bin 0 -> 7611 bytes
> 4 files changed, 175 insertions(+), 1 deletion(-)
> create mode 100644 doc/publican/sources/Xwayland.xml
> create mode 100644 doc/publican/sources/images/xwayland-architecture.png
>
> diff --git a/doc/publican/Makefile.am b/doc/publican/Makefile.am
> index 57728a0..e861fe6 100644
> --- a/doc/publican/Makefile.am
> +++ b/doc/publican/Makefile.am
> @@ -24,9 +24,11 @@ publican_sources = \
> $(srcdir)/sources/Preface.xml \
> $(srcdir)/sources/Revision_History.xml \
> $(srcdir)/sources/Protocol.xml \
> + $(srcdir)/sources/Xwayland.xml \
> $(srcdir)/sources/Compositors.xml \
> $(srcdir)/sources/images/icon.svg \
> $(srcdir)/sources/images/wayland.png \
> + $(srcdir)/sources/images/xwayland-architecture.png \
> $(srcdir)/sources/Client.xml \
> $(srcdir)/sources/Server.xml
>
> @@ -43,7 +45,8 @@ css_sources = \
>
> img_sources = \
> $(srcdir)/sources/images/icon.svg \
> - $(srcdir)/sources/images/wayland.png
> + $(srcdir)/sources/images/wayland.png \
> + $(srcdir)/sources/images/xwayland-architecture.png
>
> doxygen_img_sources := \
> $(doxydir)/xml/wayland-architecture.png \
> diff --git a/doc/publican/sources/Wayland.xml b/doc/publican/sources/Wayland.xml
> index 2f47f13..0457c15 100644
> --- a/doc/publican/sources/Wayland.xml
> +++ b/doc/publican/sources/Wayland.xml
> @@ -11,6 +11,7 @@
> <xi:include href="Compositors.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
> <xi:include href="Architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
> <xi:include href="Protocol.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
> + <xi:include href="Xwayland.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
> <xi:include href="ProtocolSpec.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
> <xi:include href="Client.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
> <xi:include href="Server.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
> diff --git a/doc/publican/sources/Xwayland.xml b/doc/publican/sources/Xwayland.xml
> new file mode 100644
> index 0000000..a39866f
> --- /dev/null
> +++ b/doc/publican/sources/Xwayland.xml
> @@ -0,0 +1,170 @@
> +<?xml version='1.0' encoding='utf-8' ?>
> +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
> +<!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent">
> +%BOOK_ENTITIES;
> +]>
> +<chapter id="chap-X11-Application-Support">
> + <title>X11 Application Support</title>
> + <section id="sect-X11-Application-Support-introduction">
> + <title>Introduction</title>
> + <para>
> + Being able to run existing X11 applications is crucial for the adoption
> + of Wayland, especially on desktops, as there will always be X11
> + applications that have not been or cannot be converted into Wayland
> + applications, and throwing them all away would be prohibitive.
> + Therefore a Wayland compositor often needs to support running X11
> + applications.
> + </para>
> + <para>
> + X11 and Wayland are different enough that there is no "simple" way to
> + translate between them. Most of X11 is uninteresting to a Wayland
> + compositor. That, combined with the gigantic implementation effort needed
> + to support X11, makes it intractable to just write X11 support directly in
> + a Wayland compositor. The implementation would be nothing short of a
> + real X11 server.
> + </para>
> + <para>
> + Therefore, Wayland compositors should use Xwayland, the X11 server that
> + lives in the Xorg server source code repository and shares most of the
> + implementation with the Xorg server. Xwayland is a complete X11 server,
> + just like Xorg is, but instead of driving the displays and opening input
> + devices, it acts as a Wayland client. The rest of this chapter talks
> + about how Xwayland works.
> + </para>
> + <para>
> + For integration and architecture reasons, while Xwayland is a Wayland
> + client of the Wayland compositor, the Wayland compositor is an X11 client
> + of Xwayland. This circular dependency requires special care from the
> + Wayland compositor.
> + </para>
> + </section>
> + <section id="sect-X11-Application-Support-two-modes">
> + <title>Two Modes for Foreign Windows</title>
> + <para>
> + In general, windows from a foreign window system can be presented in one
> + of two ways: rootless and rootful (not rootless).
> + </para>
> + <para>
> + In rootful mode, the foreign window system as a whole is represented as a
> + window (or more) of its own. You have a native window, inside which all
> + the foreign windows are. The advantage of this approach in Xwayland's
> + case is that you can run your favourite X11 window manager to manage your
> + X11 applications. The disadvantage is that the foreign windows do not
> + integrate with the native desktop. Therefore this mode is not usually
> + used.
> + </para>
> + <para>
> + In rootless mode, each foreign window is a first-class resident among the
> + native windows. Foreign windows are not confined inside a native window
> + but act as if they were native windows. The advantage is that one can
> + freely stack and mix native and foreign windows, which is not possible in
> + rootful mode. The disadvantage is that this mode is harder to implement
> + and fundamental differences in window systems may prevent some things
> + from working. With rootless Xwayland, the Wayland compositor must take
> + the role as the X11 window manager, and one cannot use any other X11
> + window manager in its place.
> + </para>
> + <para>
> + This chapter concentrates on the rootless mode, and ignores the rootful
> + mode.
> + </para>
> + </section>
> + <section id="sect-X11-Application-Support-architecture">
> + <title>Architecture</title>
> + <para>
> + A Wayland compositor usually takes care of launching Xwayland.
> + Xwayland works in cooperation with a Wayland compositor as follows:
> + </para>
> + <figure>
> + <title>Xwayland architecture diagram</title>
> + <mediaobjectco>
> + <imageobjectco>
> + <imageobject>
> + <imagedata fileref="images/xwayland-architecture.png" format="PNG" />
> + </imageobject>
> + </imageobjectco>
> + </mediaobjectco>
> + </figure>
> + <para>
> + An X11 application connects to Xwayland just like it would connect to any
> + X server. Xwayland processes all the X11 requests. On the other end,
> + Xwayland is a Wayland client that connects to the Wayland compositor.
> + </para>
> + <para>
> + The X11 window manager (XWM) is an integral part of the Wayland
> + compositor. XWM uses the usual X11 window management protocol to manage
> + all X11 windows in Xwayland. Most importantly, XWM acts as a bridge
> + between Xwayland window state and the Wayland compositor's window manager
> + (WWM). This way WWM can manage all windows, both native Wayland and X11
> + (Xwayland) windows. This is very important for a coherent user
> + experience.
> + </para>
> + <para>
> + Since Xwayland uses Wayland for input and output, it does not have any
> + use for the device drivers that Xorg uses. None of the xf86-video-* or
> + xf86-input-* modules are used. There also is no configuration file for
> + the Xwayland server. For optional hardware accelerated rendering,
> + Xwayland uses GLAMOR.
> + </para>
> + <para>
> + A Wayland compositor usually spawns only one Xwayland instance. This is
> + because many X11 applications assume they can communicate with other X11
> + applications through the X server, and this requires a shared X server
> + instance. This also means that Xwayland does not protect nor isolate X11
> + clients from each other, unless the Wayland compositor specifically
> + chooses to break the X11 client intercommunications by spawning
> + application specific Xwayland instances. X11 clients are naturally
> + isolated from Wayland clients.
> + </para>
> + <para>
> + Xwayland compatibility compared to a native X server will probably never
> + reach 100%. Desktop environment (DE) components, specifically X11 window
> + managers, are practically never supported. An X11 window manager would
> + not know about native Wayland windows, so it could manage only X11
> + windows. On the other hand, there must be an XWM that reserves the
> + exclusive window manager role so that the Wayland compositor could show
> + the X11 windows appropriately. For other DE components, like pagers and
> + panels, adding the necessary interfaces to support them in WWM through XWM
> + is often considered not worthwhile.
> + </para>
> + </section>
> + <section id="sect-X11-Application-Support-xwm">
> + <title>X Window Manager (XWM)</title>
> + <para>
> + From the X11 point of view, the X window manager (XWM) living inside a
> + Wayland compositor is just like any other window manager. The difference
> + is mostly in which process it resides in, and the few extra conventions
> + in the X11 protocol to support Wayland window management (WWM)
> + specifically.
> + </para>
> + <para>
> + There are two separate asynchronous communication channels between
> + Xwayland and a Wayland compositor: one uses the Wayland protocol, and the
> + other one, solely for XWM, uses X11 protocol. This setting demands great
> + care from the XWM implementation to avoid (random) deadlocks with
> + Xwayland. It is often nearly impossible to prove that synchronous or
> + blocking X11 calls from XWM cannot cause a deadlock, and therefore it is
> + strongly recommended to make all X11 communications asynchronous. All
> + Wayland communications are already asynchonous by design.
> + </para>
> + <section id="sect-X11-Application-Support-xwm-window-identification">
> + <title>Window identification</title>
> + <para>
> + In Xwayland, an X11 window may have a corresponding wl_surface object
> + in Wayland. The wl_surface object is used for input and output: it is
> + referenced by input events and used to provide the X11 window content
> + to the Wayland compositor. The X11 window and the wl_surface live in
> + different protocol streams, and they need to be matched for XWM to do
> + its job.
> + </para>
> + <para>
> + When Xwayland creates a wl_surface on Wayland, it will also send an X11
> + ClientMessage of type atom "WL_SURFACE_ID" to the X11 window carrying
> + the wl_surface Wayland object ID as the first 32-bit data element. This
> + is how XWM can associate a wl_surface with an X11 window. Note that
> + the request to create a wl_surface and the ID message may arrive in any
> + order in the Wayland compositor.
> + </para>
> + </section>
> + </section>
> +</chapter>
> diff --git a/doc/publican/sources/images/xwayland-architecture.png b/doc/publican/sources/images/xwayland-architecture.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..f24dc1837f2e190c9d38719420a844aeb5997efa
> GIT binary patch
> literal 7611
> zcmb`M2UJsQx`q)I=^!9T^#n0UM?ktDD2S1wp?9SBE*;SWNbe|wdJqEAdq)riaw1JY
> zdI<=j_Yz7d_jk&fxpU8)nLBH;Ru(%DcK+=D``+()-yQZ;^$`Ur6Da`!0mWmbhj0Rd
> z3&P-OMob8PGhO9-27X+0lYgv1OiVm6t2P5(k~k~rx)Bgu`TFB|p*~_UlYoHL=<!22
> z4X?EIDc`5+R?}Cu7GqzjJmeT7B&uRfR*KUvRxFBE-A`wIwDohZj^jp0mriUtcXote
> z1D{br`g%p<-FIbtbEJ{<uRE9{8pN-;bN7CSy>;nSoP6=<(bY%PJS4RoeR$L|+aL!!
> zA=*3MPc}fDv(MW#10#VRS&Z!>$>Qx_-M^G(a<qf(^=c9l7Vel9?)x at 6x^&Znf?$Rq
> zp5zmI{^;eVr|Rkn%23)y(gPee$@mN_5a7~!zfh}qyxc5=jA+Mxcd>7Cd3iQzOl4uh
> zsf918tD~gtqe_Yh`tHTkH7nUv8UF^m&K(mOnZCZ~E}~?g*g0rlDJVe+B4U*Z=phIK
> zUU{JlIzi at yWyI)9CRcxa>L0x!PMcGhkI$j&9p8zos;a7wk7P^tY0L|&kf<4$(Y{x?
> zugXP+ugmV++uLX~I&mN+C1rS6t2rGGBQE!T$}0LZkN40VcE~Lkp3lq0rQ7JS-tc0T
> zl1=)<)7y$oT+wrWetzui>?^CQ!S7B^`~m{b>+0&>y`vA|+k!Q%Z11d?)5z1%(gp?w
> zer{`{=hG8OS$_&sfevOp2oZIf<`rq)?qrT(yLUVjNENhNF<$$LXZt;>i;;nt?anHX
> z95Xo)L!^$rexX+3knIaY!}K2RkSnO?*{XSDR8&bYWDs at OL-suprl>@CVCzo_XqFoB
> ziQaUnqrl}g9yu#ZOGz_4P8z>WN=!TxlUHj@(ok6`%)?XI)YMc|#49XZSy*UiK7sD*
> zJO3Ub(9qauXJ^-AS^3pSOKW&yLSIjhiI#TvJ^gi=QlF-#<7>aHt*za)8}3F3hfr7e
> z?5}{A*^gpq3X>=fFCPz%&=fIyx16p!2 at 46$yLxMBz1zo~<1y#WXUD5ouU at sVun@3)
> zJ-b_i>bmT<w^e^;KkU60Q at k2evzXo^NktaJ&}(@?C&XNmtXk6F=NVa9U^R;D-`U<j
> z-2c$2Rf6j3YP7jfd7-mYdU|>Z<I?hAUajMlYmW|Fw`n<X*BaFAcyHM>iQw~#y`^Vo
> zrn-V!&VQ{r7WJg43LRd5e}7Z$S@?~YhqGYYe0+S;B*P!FGm1G*COdhUn0zu9iaN3^
> z&L3Lwoc7LZXc*7WF0-7hbFn{7U!I%0`KR(m9 at -r?E*s&Gemo>z5J%5((1fM3W%hp>
> z<Ndw5c9*rWvC*%wpG|UebsZQSJhIpbD3X%0-?Ptf at f-CSx%B2i-e3m`#mUL34zshh
> z)zjBM@;DyEM6tZ at uk`NRmJ^za`D?-QLFQ*#14)DB*TP4?Gor4b-JgVog|)V}Ha9m%
> z(DTtW($jl?+HS=l9G5o(&V8+{7C(njsb$LWdGPV>yqXJ?7(8|N at UXP7(A3sehpDTp
> zmm0T}XmEG%heN<(1g#n}e=7{Djmi2#?b6=f-i3+ak?Y0A_U at xgW72bnW&4J-0*MHO
> zE*x%pYT;2vPfsuEw$QDfry6D$TKK&8clvntRQakwv!AZc#?n%m4G9%hrie{Eu|;`S
> zVd0a~5i+qWL_`_V-lqP3mfgv-k#<bwM4Kt0Ki#>ry*5@!seN>O{PO(t08}17e;BKw
> zq2cW8tnA5F;OFYWJT)g9o98Q0k2qV$iik-`NsX#jl3GrXVyJlP_Zr;bU7s0>PY>r}
> zK0 at AIa?91B7clbMn3PDRx~_zTe>B>}qB(-xU%dEuw2(>^*m{fxn at r2h?7KdGSKu*p
> zLD^+(vVIWyjs<nPqTM3TO9Fu*U3V9HMBUzWn2y!E<t4SpoAlDf^;CtC45su{Ej!Rc
> zThqAMS8Zr%b17171}C7(KTD_^L@)@Hl$PctnzmJODyOobyeEPlH?5y`Z)|L=j+90i
> zcDMn#IzL3o5<|cyHh6AMfAl?QFA3%2(JB)6I}}9jogQFXytdzuVx`3##;ay#OctZ%
> zK0Y=x%XW)_dWD3ClUm7YZ+ik+ZCbV0`s8A8|Ng5{&6800ie`Y^N19y9-b$-J101WT
> zfQse)`}aLPYezL-r6NQf#t$$7n<?eLb;*CM%zxOr|CYA@<qU6xz8jlbEpkpy(Zw%A
> z1_lOd?8n*!7U$=4^710|sUqVw)(B1Pm)si;4-e<(&0#hwDk^q%g`?M6KbZ9HQNxfG
> zIXUL*<JGIf#Zq2dzsP6JOlWdz`ugJQ-4?~8 at e8R=8<>_GG&F6c-^F`D)3LL^Z*I<@
> z9{Bc+j+ND+T!$Ev2(Q*F9$768DO>JynasH7OL*}jIE979El3U$d5fRF7lV<NmBqZp
> zZ^Xqa_r)bAUuR)qp{K90?q|<(>5OD_aB#>BIP-q_ at +|ZGWO1U_3Dw!TQ+OK*O<4Y#
> z^&nNu2^!R$E+xjzU67mmhI(hc7Ne-3 at Ns`we|VyHS&jJFZMyaK^$<$d?`k>1!oonB
> z4ww3~%gO{t)+#u&r*q27<1njXw4C9FU89A?#hPH8R5z5As9K*aWyiR>xq+8s_F%}=
> z*Vm_tI=oL at ac|h#a?aO)5yvTU_*s24D($zvjbs+J7Y{g-MrwGy89m?(O75|I$%j#a
> zCNM at R!tz^9wtmgi($JtgKgs{_!5OE+=5_dHrWNgXa_FL?qob}qh<uU+Rm+$h8$;LL
> zkbODX*S9&SCW}nmn5gXo$AzWM?-PkGUHUdOw7<9aZFpEO&w8#iYG`PPjDdgNiL`JH
> zuaAi^9<~<g=;%<)F8}a>7|n8vO4{$i){J>>PR`nBd7yD`SJx926>Jjd2A;RD8!~=M
> zTn<i7U{Zn|PaK$P^i)d|e};sEz3!4!U}a^Mlas?@u_r3e-}(pO&5b_#+!Yno;!j${
> zVj+m^`PU&%#B6EZ<))&kgM))WaN7BU6iSq#(|2Ekx=854g2e$5H68iB9;@sX4d?bC
> z*}B<eNB9>Y$z2pgDCg(rn`&=ofBUA9fadVH=17j-W6{*qWQuxIw!Mr)2wQ1sYSzCr
> zh<R=96CEBNewmD(THamKP*Za#n2dpmnHh+?yJY%mgl?IMoPt8|Dr*0_QtqO)qhoYr
> zB!|G6d!q^XuHb91phz(9?d|OJ>zuP%S^@x;xVZ^Kg68T}QbobcS>8YX`t at sbvy8lw
> zlarIR^-{5Z?VF`OCqW^hoiA^B_$NH6=GVlO5#Pr$MPgx~>>k%i_~O>QcNZkqB%Zeg
> z#mCc}370e-?Jg$0dxzWKPnYqRl#$5*l*GluGbhWKnwI7_^XURCU#rlt+_d8fULAJj
> z$`vF$ztTgK<B&YI(#t~#Ku}|2<B>&3rXvH3gzNm2Cx(KYocH$a8U4<f8v-X*e10bW
> z&d#yMzRLqhF7 at 2Ky**`wQ1H1k=IbdJQY}N8goMQ9`*e8gTXg$a(V~))Qr(MHdPvUy
> zfts#dD at DalY*$iWx|Ft#&absiyS-9KB$6obHJrOC_e(%!5Ver!#w7R*UgPGID6#2e
> zVXNLJcv|`K at o~$Z6m0j at zB9PWN>83NI?ob9IHaU}ds6O#frXIr+*lbZtgNhb at YxA?
> z4uwJ;G0o{tTmk~61qJYYjo|=4y@?u!32>ci9VSG(&!VED>b|2ti2K4V!>uxVC at CpH
> zsfHSM#K7V3A~nZ*7iIb>Z$jR}jtXCvy-J5o(*3}of17RpYYO_$`8p10XM6w1NK$Gl
> zkH at tcOSXGH^A+VyB8bz|)8OD>Q|${|^5UtNP2xOz5P&Jb^rvqOe^&3lJaCFXP=~{R
> zv<$e^Hnz4q+uOS3roqZkx9R&%%}2SrqP=ssk-cmeJD(~lDjFJ2fyvy#A0z=y;Ns?9
> z0T at dkVKJDif<M?~Xng;yb&S_5w6x{y7;}DB+hGa`@;kyNQL#x=gTKiMwbCXl=Ysae
> zAD$fgZES9ypKb;SI6lq}GXI&gEJM(HL&kv}F at v**DrYpRr7A(|?%_!i7KaC+ at gy5P
> z=0fXZl_At^V=k*UgN at UDm-@0tRu}s+WdqLq&K71rhvX?EcBXwdx5e<s$K95d581Dl
> ze!AL*M>rB~T2b=-^pnY0g~g+2maC1i{cXR`bHBqke={--#3&d3=9_hQId-wRs_6wI
> zt0WMhO+Z<IrU%6W at dsKTX2=xzx~i&*PrqiXOF}|od3pJyV(XsTYA+>o`UOm%Uwuwa
> z&YL%HYNvfx54Y!N!sh4E3A(zv6ciKy6ikzd%<lhRVmu>@7li;sBTp7Kj#h(0=10rT
> zz_~e9(|!ul;Y^qlzi}foG&J=1*hgLofS<d&NWeB3EMKp9A<y8oN<j1+Zf%VA`t=X+
> zd~O~d5(pn3pNosj+1VKooRTSRryLFLCotG>iD9GTR72nuDsDQ`avt^|YWZ1<<KyGD
> z&z~C`8t6znz`kE2Rq*umR9220v!_2!?pf&U?ELWI_SpiErow`P+eiihBZCTa66Cjq
> zr}|*>u!uW<vKGmZaD$47B*F{&t$}iq69sA&R at a*WJ_jU|a4;IBk}L?hdDHBYXWBhq
> zT$A_i+61d*`{h<Sp%4qOVW3U*oBbq^B3xWHc-%UGszvSP|26iqjY>zXMG^-nm_^fM
> z12XjPy~CZ7K;(Ztauh;zTZ_P96hs%}k6?=Ly2r=$!2H)LTwPhQ*McCFdHDI+#2gJ=
> zT<#z>3Wu6;<92zf>EE?4|NV56HDMNWEGj86s&j?}sOwl at FvmtG6^hwh{QRO!Q3?tQ
> zN((%UazbEI0!|qI_6>9t5}m;5>EWSQsvv~$IM^_h|2198^EMK&gKK?S=HP8)qvvLZ
> zxXXJOa=h9uY5(GIfB#iFIt?SEUJRYq*g>t@!cd{MnVA{Z)!WF3?Z?t%yAu-=S*1L-
> zy1c!;!KgZ^_}qdwz at dIB`HJPGkH9jt94hGQB1%g)uRGFfFEOQ{46?{JQ^YT$TwLp$
> z8XA1;%}Ay%qTNZ;!am&w#QqQdyp*84*IxAec%%jN<f7BrZsz&g`no>=^I*!$moJx>
> zm$PeL>HXQfLX|!4gGNDHoBXQ44X~U at YSVI^_t`%l3VhUQgjSV~KZ%KHLldsb^U5j^
> z9|1UbcxlHdeUVK=jGBezBo%Ygxo{5-s?}yNS2uI`XHH;%F3LLS1w0=yEvKWSGilq?
> z at G_VR{1bK0K at g6gea72^mbbUQHc&kOaYT_**PY0`yt$dA#9>*f%b!$gP!C^o)%i9t
> z;XB)Qc{pRJ1wXY3X2UIyYXn>Bz*LqV_t>QM5SA?+S-q;LsL<ek8;T@|oNo5Vv){a_
> zU95M at 0}@2NgOWYl4!QC2`j~%ai!2UIJe5ot|40}i^%Zq(W`wl&4p2!F2squ7Bz}J+
> z{<}T>KbPYFhuY`T>KenR?s~Ggt!aFBh*d`Yfv%)HA<+(g^w5wT?G6%-{H(0k)UJTp
> z!XCQr%s-Y_dhp<)9fQziwP15eD97&K1VUB?igJ;WkpUKKe}6wHHa9nSY03I5Y4<kL
> zwmK!#^|I)xMD#?Zm70mkFEC_5Q4vQFkgxWRjw3vNadB~C#0}7$gxf+SvzTgfV~KG~
> zMr^F$%ag;gN-IpAOCV-}Gt=+=)7$d$@<3b2NJ$f6*qp}+1%-u2)j(c=$N;GUf<sw*
> zpLnd%)9LBc*e(5Z(eoWL%8=<Qn}p0v%%}|MePRg4|6r=nsAxD4tTH$x#Ph`qF1qkM
> zwM=fhaNwl?h*ysB?%hf40h9XKvu7tgZ+Wx<l0Ab77&X<IqiJAVkanNcVbJ(jC|LxV
> zqO5w;NGK?fiMAps at 87crw*E3?>#(83l at 5}T#ms=|krB=+YZ0bmt%<?G>>*oP8k$1~
> z+iJb+elOgbuCcN4a|vGFNMjy*<LrL%NkXK1TM)^uTelRm<65{hObz2dXLWt~QbZN4
> z1659rjf;bLT$3dwBb)nt_h%ltn+Sm_`>_g#i5foR<}`RpVq%p)9=E?bvRep%(aWn&
> zgZoyH5(iE5v(k~>zQf;CD|H=!P0-?<AEdtREqI+AhfYMB1M8X_yonhc1Odf*txcuB
> zd}x_JLV3ZNEOFrGqv$65M&s+(uR)XUT}Hc$@6F82C`Iq+>?WIkx5ov?$H(I~F`3E9
> zO2oQNUfY>xdz`ZxqO!8*5dzIi8yh9X#dlMC{LIYF=ZkbJ&v3OZQ_cRMje>_$T}Lqs
> zNlm7vreD5%@$vP2^5n^SL|8-w4;L5cz1n3b5vCt%(b?WU>NI$k)E2b9d&=qvRD5m+
> z+qKx6&cn-F)m*9!oiir#?PonY_cU31-dpAJ4_as-j+*%4hQnwzxre~?2^}&Y_y;L$
> zW at z!-Ul|%5)u}hgNJ at INw$MF1JRB5s>1?d87St)&Lxgf}zcu*p1?SY^uAtbaCh2+u
> zHemGkS2RQPe>s;5^EurgIoO!8`<M=3`WTPj6$@e0Ghh?8Vn>*v?M3tQ@~FtkLk&YO
> zt_7j;rJ)G%i;Ti7C^U9wWyKbhLb=_A+7R<-Mq7WPHnz^Li_Bh^iT^9j|DPtM{XFL{
> z7e0NuudSUV47=djF3Xq*LyiW6NML+o0>3r;V3FbuXiySbsJIip=FO4a7J!SALXuba
> z^lKe04n}5x>Rn at ImhzAy+pzt!E4ksf^?Ee8uI<yOPe2$Agol4kK%}Hd)*xR=9j{gP
> z$v=1iI=h{}{Ti6s2Je)c2rvC{nENj!FispjFYegw>qC`*o?k01&dbeBQHJJGUU)#u
> ziAaP$>wF;~aBQ4kPyoyBr<VVxs`$~JujLeM)ALHexNV`p9TXK5xK5W)0LA(HD4B6;
> zqwZ!}PebNktsCf!L$X{}*_Q_FacR=t at zeufzs9DeoeWer0j1wPe*zo;n~a~1weg?*
> z9FOOh6xBSyI1SFT@?bQps6?se-OQd~^_-tHFVHB!;c#w?y)G;VJz|*2mH=4}jv$>L
> zA{G=NR!%{|r%1S_mex)bSk-Uf<<|uy0q72}RI<Rq0mvXPx3FVD`R|}PNrTxrIC8+W
> z`sJ7V`5LMzB99L<-~NsAjv20*Vb+b$kG1XXd5zgxZUV9Z=6mnpASNcp$<dLmcM0cN
> z&X|r7Lb>41x5dQ79w{o)6mqVXo1t7?T~*V><ydYF&gxA^G777vODYfplcxlS$A4vG
> zWc0><d8_SThYJ5|Ecv$_{nsTA)W?qlntUJ#mrUz@{P-~gzkw1A_NA}SxWXJHR&(d4
> znDg!P!fjUK|E0oM=DSQP&z{A#ntZjb_EU>e1d8kH<5Q*QATQrWtzV-^+;3a0nEfLW
> z1Tfv^s-u(q6=g3fCMx<PJo#`P?+7-Q7x30~a==@D-r&ZB03YA_>Z+9gvAdt&iL+vD
> zOT_6?+p`Mb&{Uwb$g0v(0cq(bkU(ZVmG(c@$a?DT>4|D at 2gI6Gf~^ez90?>OqGJa)
> z;e-KU!*v&D=cn9nDHkE{y0A=9mg4t}hrnVMdr~<kS$Z}i-&*x$T-7!l8mLGAeh?$8
> zlDi*=WiS^)^jqg7GLaKCKeGnpAJ>I_U_WMwDH3xOj{W<a0Xy$a*BZx?#9p3w%?j at L
> z8%Z{t8m{4+mcp*FuuM)(^#}-nP#KVKSCT+pBJ|cR2TZg7>G8gNU)IRZgmJm4f`^9(
> z3>Lm0`WLq?-ax^5tFop>3&8ErN<)KWmP>o1u$D9 at 0u^)PV0Rb4H>k#i1Ydg>9Iq6X
> zE~zEh7?QU90*E{!0_=w%*EZh?ucX~@5v0bx(&+*3mA^yaaZWj%n$6BW#4xreRjjnC
> z>YIrmd4M~<ar7V#Z4SI$nQQ^TA_qsug`|jx2viiawt;~%7s#qgKjOyo)$@Wf9+YAq
> z)q8ETL*~Jqr0SBa`g(7G$+!m-Zi>H0&e5)(o#BfdyBkxD at ccdC>=FlXIFEdd at o(QA
> z8o%oX<`o!^FW4QR_08o-q(XN8uOQr4bOU+OU)KL4X8qnC#{JfIq{Q$6$6)gW-~~Xc
> zSl6S4o>bt8xsc~aeE~oQ2nh)fZ%U-~uWy=StU$5|hy|xs3ZnJ%S*if)XhFz4u(*i>
> zH8rC32EBcYpLOk8EV8hbeKJz6^Tez~Rvf~&ZdstBSx;PzjErn;xm%>aPciajBq&o2
> zV=%@#I at YHlv0dbplsi^-y$SL0LgM1$X&JqEsRX$a<ptu>{tYaMsFXPF+_?jikCGdP
> z+;8<-+}Fr^r)8Sx;w5P4G7||nKXXzL{1?&&kv2P~$tLfF79~b62~hoOW5NR7LVGw|
> zgMHCes2jLaC)M)=dp at VWn;$tnu4OE|O^^VQG;s6dj9?PjIyl at 4YDb|W3`19mTU_Qf
> zO4GVyW2w(-5d_2#FClRfqYH%p`aa)pqoGe$Y+`I|tiK;(%0<A|X<8n6*xZ+J1iXhI
> zZ}^2*cV1QM{@JF)%Xn?wUt=PWPJ`$B4K<#~HrpL{hvd3L!0lIp#|o+sOXN*{{vZCR
> Bvx)!!
>
> literal 0
> HcmV?d00001
>
> --
> 2.13.0
>
More information about the wayland-devel
mailing list