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

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


On December 4th, 2011, 8:42 a.m., Jaime Torres Amate wrote:

Review request for kdelibs and Rafael Fernández López.
By Jaime Torres Amate.

Updated Dec. 4, 2011, 8:42 a.m.

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.

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.
Bugs: 213068, 287847

Diffs

  • kdeui/itemviews/kcategorizedview.cpp (46a1cde)
  • kutils/kpluginselector.cpp (ca0691d)

View Diff