Review Request: fix infinite recurssion in kcategorizedview

Thomas Lübking thomas.luebking at web.de
Mon Dec 5 14:14:13 GMT 2011



> On Dec. 4, 2011, 6:47 p.m., Thomas Lübking wrote:
> > Ok, i think i know what's wrong.
> > KCategorizedView::updateGeometries() calls QListView::updateGeometries() which has it's own opinion on whether the scrollbars should be visible (valid range) or not and triggers a (sometimes additionally timered) resize through ::layoutChildren() http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/itemviews/qlistview.cpp#line1499 - the comment above the main block isn't all accurate, layoutChldren is called regardless of the policy.
> > 
> > My approach was then to prevent QListView from having an own opinion on the scrollbar visibility by fixing it before calling the baseclass QListView::updateGeometries()
> > 
> > 
> > // bug 213068 ------------------------------------------------------------
> >     const Qt::ScrollBarPolicy verticalP = verticalScrollBarPolicy(), horizontalP = horizontalScrollBarPolicy();
> >     setVerticalScrollBarPolicy(verticalScrollBar()->isVisibleTo(this) ? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff);
> >     setHorizontalScrollBarPolicy(horizontalScrollBar()->isVisibleTo(this) ? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff);
> >     // /bug 213068 ------------------------------------------------------------
> > 
> >     QListView::updateGeometries();
> > 
> >     // bug 213068 ------------------------------------------------------------
> >     setVerticalScrollBarPolicy(verticalP);
> >     setHorizontalScrollBarPolicy(horizontalP);
> >     // /bug 213068 ------------------------------------------------------------
> > 
> > in addition i ensure the horizontal range was also set on the early skip
> > 
> > const int rowCount = d->proxyModel->rowCount();
> >     if (!rowCount) {
> >         horizontalScrollBar()->setRange(0, 0);
> >         verticalScrollBar()->setRange(0, 0);
> >         return;
> >     }
> > 
> > but i actually doubt this is relevant.
> > 
> > However, i cannot reproduce the issue (commenting the fixed policies in kpluginselector.cpp) and as a bonus kpluginselector resizes faster (resize/geometryUpdate came in pairs here before, not tested with the patch but it feels faster ;-)
> > 
> > Can please anyone attempt to confirm or deny the approach?
> 
> Jaime Torres Amate wrote:
>     If your patch includes your comment, you have my Ship it!.

Thanks, I'll take that as a "works for me" =)
https://git.reviewboard.kde.org/r/103335/


- Thomas


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/103313/#review8704
-----------------------------------------------------------


On Dec. 4, 2011, 8:42 a.m., Jaime Torres Amate wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://git.reviewboard.kde.org/r/103313/
> -----------------------------------------------------------
> 
> (Updated Dec. 4, 2011, 8:42 a.m.)
> 
> 
> Review request for kdelibs and Rafael Fernández López.
> 
> 
> Description
> -------
> 
> Basically, what I do is:
> If there are one or zero columns, hide the horizontalScrollBar until it is needed. (it has worked in the past, but in another file).
> Apply the same strategy with files.
> 
> Additional stuff:
> Moved the common calculus of itemSize outside of the if then else.
> 
> 
> This addresses bugs 213068 and 287847.
>     http://bugs.kde.org/show_bug.cgi?id=213068
>     http://bugs.kde.org/show_bug.cgi?id=287847
> 
> 
> Diffs
> -----
> 
>   kdeui/itemviews/kcategorizedview.cpp 46a1cde 
>   kutils/kpluginselector.cpp ca0691d 
> 
> Diff: http://git.reviewboard.kde.org/r/103313/diff/diff
> 
> 
> Testing
> -------
> 
> Krunner config does not loop (neither kgetnewstuff from kstars). I can not test with amarok (I've hit by an amarok start bug).
> Please, test with other programs.
> 
> 
> Thanks,
> 
> Jaime Torres Amate
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20111205/acd17ac8/attachment.htm>


More information about the kde-core-devel mailing list