<div>graesslin created this revision.<br />
graesslin added a reviewer: Plasma.<br />
Herald added a project: Plasma.<br />
Herald added a subscriber: plasma-devel.</div><br /><div><strong>REVISION SUMMARY</strong><div><p>QtWayland doesn't map the parent sub-surfaces in a sub-surface tree.<br />
According to the spec this would mean also the child sub-surface is not<br />
mapped. But being strict according to the spec will make applications<br />
like SystemSettings fail badly. Embedded child windows will not be<br />
rendered and QtWayland is going to hard freeze. This is not acceptable,<br />
thus we need to workaround this QtWayland bug till it's fixed.</p>

<p>It's worth mentioning that Weston as the reference compositor also<br />
doesn't handle this situation according to spec and renders the<br />
sub-surface. See <a href="https://bugs.freedesktop.org/show_bug.cgi?id=94735" class="remarkup-link" target="_blank" rel="noreferrer">https://bugs.freedesktop.org/show_bug.cgi?id=94735</a></p>

<p>The difficult part for the workaround is to determine whether a surface<br />
should be considered unmapped. E.g. when the parent gets unmapped we need<br />
to really unmap it. But what's the difference between an unmapped parent<br />
surface which should be considered mapped and an unmapped parent surface<br />
which should be considered unmapped?</p>

<p>The implementation goes with considering a new sub-surface always as<br />
mapped - independently of whether it ever got a buffer attached. As soon<br />
as it had a buffer attached and it gets unmapped again, it will go back<br />
to a standard conform way.</p>

<p>The behavior now is not standard conform, thus the autotest is adjusted<br />
to have QEXPECT_FAIL for the now no longer standard conform areas.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>rKWAYLAND KWayland</div></div></div><br /><div><strong>BRANCH</strong><div><div>subsurface-incorrect-mapping</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D1250" rel="noreferrer">https://phabricator.kde.org/D1250</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>autotests/client/test_wayland_subsurface.cpp<br />
src/server/surface_interface.cpp<br />
src/server/surface_interface_p.h</div></div></div><br /><div><strong>EMAIL PREFERENCES</strong><div><a href="https://phabricator.kde.org/settings/panel/emailpreferences/" rel="noreferrer">https://phabricator.kde.org/settings/panel/emailpreferences/</a></div></div><br /><div><strong>To: </strong>graesslin, Plasma<br /><strong>Cc: </strong>plasma-devel, sebas<br /></div>