<table><tr><td style="">davidedmundson added a comment.</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/D2218" rel="noreferrer">View Revision</a></tr></table><br /><div><div><p>When adding a new design can you describe the design in words. i.e what roles a class has<br />
It'd make things a lot easier.</p>

<p>ScreenPool: <br />
It seems to have two jobs:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">you've got the converting screen "names" to IDs.</li>
<li class="remarkup-list-item">"Tracking" DesktopViews</li>
</ul>

<p>Why do we have m_idsForConnector and m_idsForDesktopView</p>

<p>m_idsForDesktopView  is bound to be the same as <br />
m_idsForConnector(view->screenToFollow()->name())   right?</p>

<p>at which point we can kill the second one, and that simplifies a lot of the code and avoid something that can go out of sync.</p>

<p>Panels are now a bit of a mix:</p>

<p>In createWaitingPanels we base the panel screen based on where the DesktopView is<br />
in primaryChanged - we don't and use screens API directly (BUG: and setting screenToFollow)<br />
in removeView we're using the View as the indicator of what screen is which.<br />
screenForContainment is also going via View.</p>

<p>Is it meant to be going via a View or not?</p>

<p>Personally I think it's a bit weird as we can generate the index directly from the screen, but whatever it should be it should be consistent</p>

<p>bugs:<br />
I think you also have a potential crash if you switch primary on a panel and then disconnect the first screen</p>

<p>This code will have a bug if you drag a panelview to another screen - then resize the first screen.<br />
Same for if you have a panel on a primary screen then switch primary then alter the screen.</p>

<p>You have a crash if:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">you have previously inserted a containment on screen A</li>
<li class="remarkup-list-item">you reboot with screen B, C</li>
<li class="remarkup-list-item">number of screens ==2, firstAvailableIndex=1</li>
<li class="remarkup-list-item">the first containment will restore</li>
<li class="remarkup-list-item">the second one will be a new containment  with an ID of 3</li>
<li class="remarkup-list-item">createContainment checks number of ScreensAvailable and will return a null pointer.</li>
</ul></div></div><br /><div><strong>REPOSITORY</strong><div><div>rPLASMAWORKSPACE Plasma Workspace</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D2218" rel="noreferrer">https://phabricator.kde.org/D2218</a></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>mart, Plasma<br /><strong>Cc: </strong>davidedmundson, rwooninck, graesslin, plasma-devel, jensreuterberg, abetts, sebas<br /></div>