<table><tr><td style="">antonanikin updated the summary for this revision. <a href="https://phabricator.kde.org/transactions/detail/PHID-XACT-DREV-66gdwhxy3gavsgg/" rel="noreferrer">(Show Details)</a><br />antonanikin updated the test plan for this revision. <a href="https://phabricator.kde.org/transactions/detail/PHID-XACT-DREV-eu7pmwlgafghelm/" rel="noreferrer">(Show Details)</a>
</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/D3683" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>EDIT DETAILS</strong><div><div style="white-space: pre-wrap; color: #74777D;"><div style="padding: 8px 0;">...</div>The <span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">patch provides mechanism to fix this behavior.<br />
<br />
First, it disable view painter updates during load to avoid content "flickering" and also to hide font size "jumping", which happens for example for Qt help pages with JavaScript enabled for `QWebView`. This JS also breaks positioning inside page:<br />
<br />
1) Some Qt page is loaded and `loadFinished()` signal emitted, then view set right position inside page.</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">cause of the problem is:</span><br />
<br />
<span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">2) After this,</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">1) Some</span> page <span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">JS finishes it's work and change font settings (size).</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">is loaded and `loadFinished()` signal is emitted,</span> <span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">This leads to contents "moving" inside view and as a result we have wrong position</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">then `QWebView` sets right position inside page</span>.<br />
<br />
<span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">Therefore secondly</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">2) After `loadFinished()` emitting</span>, <span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">we fix position after page loading with simple JS code</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">page JS code finishes it's work and changes font settings (size)</span>. <span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">JS allow us to "jump" inside already loaded page without it's reloading which happens with using standard view's methods like `load()` or `setUrl()`</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">This leads to page contents "moving" inside view widget and as a result we have wrong position</span>.<br />
<br />
<span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">Such positioning fixing also applied on resize event - standard view's behaviour breaks position during widget resize</span><span style="padding: 0 2px; color: #3e6d35; background: rgba(151, 234, 151, .6);">To fix this, first, we disable view painter updates during load to avoid content "flickering" and also to hide font size "jumping". Secondly, we reset position inside page after loading with using standard `QWebFrame` method `scrollToAnchor()`</span>.</div></div></div><br /><div><strong>EDIT DETAILS</strong><div><div style="white-space: pre-wrap; color: #74777D;">Tested on master branch<span style="padding: 0 2px; color: #802b2b; background: rgba(251, 175, 175, .7);">. For correct work it needs D3671 applied to kdevelop</span>.</div></div></div><br /><div><strong>REPOSITORY</strong><div><div>R33 KDevPlatform</div></div></div><br /><div><strong>BRANCH</strong><div><div>master</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D3683" rel="noreferrer">https://phabricator.kde.org/D3683</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>antonanikin, KDevelop, kfunk<br /><strong>Cc: </strong>kfunk, kdevelop-devel<br /></div>