<table><tr><td style="">graesslin created this revision.<br />graesslin added a reviewer: Plasma.<br />Restricted Application added a project: Plasma.<br />Restricted Application added a subscriber: plasma-devel.</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D2252" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>The idea behind this change is to have a dedicated binary for the<br />
logout dialog. As a follow up ksmserver needs to be adjusted to invoke<br />
the helper binary instead of interacting with KSMShutdownDlg directly.</p>

<p>This will bring quite some improvements to the logout architecture:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">ksmserver doesn't need to run a QEventLoop to wait for the dialog to finish</li>
<li class="remarkup-list-item">it becomes easier to test changes for the logout dialog, one doesn't need to restart the session any more</li>
<li class="remarkup-list-item">ksmserver becomes better guarded against problems in the UI layer (e.g. OpenGL errors)</li>
<li class="remarkup-list-item">the binary can be changed to support Wayland</li>
<li class="remarkup-list-item">ksmserver becomes better guarded against problems with updating Qt while the session is running</li>
</ul>

<p>This change only introduces the creation of the binary. A new sub-dir<br />
"logout-greeter" is added which creates a ksmserver-logout-greeter.<br />
The greeter defines various command line arguments for the options which<br />
are being passed to the KSMShutdownDlg.</p>

<p>If the dialog returns an exit value of 0 it is interpreted as accepted.<br />
A return value != 0 indicates that the user rejected the logout.</p>

<p>The dialog also passes additional values back. In particular the logout<br />
method might be changed and returned back to ksmserver. To support this<br />
operation a pipe filedescriptor can be passed to the greeter. If present<br />
the greeter will write the numerical value of KWorkspace::ShutdownType<br />
into the pipe on success.</p>

<p>To indicate how the interaction - especially the reading from pipe -<br />
works, the change comes with an additional test binary. It forwards<br />
the command line arguments and creates the pipe to pass to the greeter<br />
and reads it back in a helper thread to be non-blocking. This approach is<br />
inspired from kwin_wayland's starting of Xwayland.</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>See the new test binary</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>rPLASMAWORKSPACE Plasma Workspace</div></div></div><br /><div><strong>BRANCH</strong><div><div>ksmserver-logout-greeter</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D2252" rel="noreferrer">https://phabricator.kde.org/D2252</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>ksmserver/CMakeLists.txt<br />
ksmserver/config-ksmserver.h.cmake<br />
ksmserver/logout-greeter/CMakeLists.txt<br />
ksmserver/logout-greeter/main.cpp<br />
ksmserver/logout-greeter/tests/CMakeLists.txt<br />
ksmserver/logout-greeter/tests/main.cpp<br />
ksmserver/shutdowndlg.cpp<br />
ksmserver/shutdowndlg.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, jensreuterberg, abetts, sebas<br /></div>