Review Request: fix infinite recurssion in kcategorizedview

Thomas Lübking thomas.luebking at web.de
Sun Dec 4 18:47:14 GMT 2011


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


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?

- Thomas Lübking


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/20111204/c543831d/attachment.htm>


More information about the kde-core-devel mailing list