QListView: Use correct available size when calculating scrollbars.
Calculation was working as long as one didn't use per pixel scrolling. Task-number: QTBUG-48579 Change-Id: Ie02e28b008c5c81ed45d7dd17fed96148c23b598 Reviewed-by: Thorbjørn Lindeijer <bjorn@lindeijer.nl> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: David Faure <david.faure@kdab.com>bb10
parent
eb149ec95c
commit
0cfdfcc82e
|
|
@ -1846,8 +1846,7 @@ void QCommonListViewBase::updateHorizontalScrollBar(const QSize &step)
|
|||
const bool bothScrollBarsAuto = qq->verticalScrollBarPolicy() == Qt::ScrollBarAsNeeded &&
|
||||
qq->horizontalScrollBarPolicy() == Qt::ScrollBarAsNeeded;
|
||||
|
||||
const QSize viewportSize(viewport()->width() + (qq->verticalScrollBar()->maximum() > 0 ? qq->verticalScrollBar()->width() : 0),
|
||||
viewport()->height() + (qq->horizontalScrollBar()->maximum() > 0 ? qq->horizontalScrollBar()->height() : 0));
|
||||
const QSize viewportSize = qq->contentsRect().size();
|
||||
|
||||
bool verticalWantsToShow = contentsSize.height() > viewportSize.height();
|
||||
bool horizontalWantsToShow;
|
||||
|
|
@ -1877,8 +1876,7 @@ void QCommonListViewBase::updateVerticalScrollBar(const QSize &step)
|
|||
const bool bothScrollBarsAuto = qq->verticalScrollBarPolicy() == Qt::ScrollBarAsNeeded &&
|
||||
qq->horizontalScrollBarPolicy() == Qt::ScrollBarAsNeeded;
|
||||
|
||||
const QSize viewportSize(viewport()->width() + (qq->verticalScrollBar()->maximum() > 0 ? qq->verticalScrollBar()->width() : 0),
|
||||
viewport()->height() + (qq->horizontalScrollBar()->maximum() > 0 ? qq->horizontalScrollBar()->height() : 0));
|
||||
const QSize viewportSize = qq->contentsRect().size();
|
||||
|
||||
bool horizontalWantsToShow = contentsSize.width() > viewportSize.width();
|
||||
bool verticalWantsToShow;
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ private slots:
|
|||
void spacing();
|
||||
void testScrollToWithHidden();
|
||||
void testViewOptions();
|
||||
void taskQTBUG_39902_mutualScrollBars_data();
|
||||
void taskQTBUG_39902_mutualScrollBars();
|
||||
};
|
||||
|
||||
|
|
@ -2359,8 +2360,21 @@ private:
|
|||
QStyle* m_oldStyle;
|
||||
};
|
||||
|
||||
void tst_QListView::taskQTBUG_39902_mutualScrollBars_data()
|
||||
{
|
||||
QTest::addColumn<QAbstractItemView::ScrollMode>("horizontalScrollMode");
|
||||
QTest::addColumn<QAbstractItemView::ScrollMode>("verticalScrollMode");
|
||||
QTest::newRow("per item / per item") << QAbstractItemView::ScrollPerItem << QAbstractItemView::ScrollPerItem;
|
||||
QTest::newRow("per pixel / per item") << QAbstractItemView::ScrollPerPixel << QAbstractItemView::ScrollPerItem;
|
||||
QTest::newRow("per item / per pixel") << QAbstractItemView::ScrollPerItem << QAbstractItemView::ScrollPerPixel;
|
||||
QTest::newRow("per pixel / per pixel") << QAbstractItemView::ScrollPerPixel << QAbstractItemView::ScrollPerPixel;
|
||||
}
|
||||
|
||||
void tst_QListView::taskQTBUG_39902_mutualScrollBars()
|
||||
{
|
||||
QFETCH(QAbstractItemView::ScrollMode, horizontalScrollMode);
|
||||
QFETCH(QAbstractItemView::ScrollMode, verticalScrollMode);
|
||||
|
||||
QWidget window;
|
||||
window.resize(400, 300);
|
||||
QListView *view = new QListView(&window);
|
||||
|
|
@ -2372,6 +2386,9 @@ void tst_QListView::taskQTBUG_39902_mutualScrollBars()
|
|||
model.setData(model.index(i, 0), itemSize, Qt::SizeHintRole);
|
||||
view->setModel(&model);
|
||||
|
||||
view->setVerticalScrollMode(verticalScrollMode);
|
||||
view->setHorizontalScrollMode(horizontalScrollMode);
|
||||
|
||||
window.show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&window));
|
||||
// make sure QListView is done with layouting the items (1/10 sec, like QListView)
|
||||
|
|
@ -2412,7 +2429,7 @@ void tst_QListView::taskQTBUG_39902_mutualScrollBars()
|
|||
QTRY_VERIFY(view->horizontalScrollBar()->isVisible());
|
||||
QTRY_VERIFY(view->verticalScrollBar()->isVisible());
|
||||
|
||||
// now remove just one single pixel in with -> both scroll bars will show up since they depend on each other
|
||||
// now remove just one single pixel in width -> both scroll bars will show up since they depend on each other
|
||||
view->resize(itemSize.width() + view->frameWidth() * 2 - 1, model.rowCount() * itemSize.height() + view->frameWidth() * 2);
|
||||
QTRY_VERIFY(view->horizontalScrollBar()->isVisible());
|
||||
QTRY_VERIFY(view->verticalScrollBar()->isVisible());
|
||||
|
|
@ -2421,6 +2438,11 @@ void tst_QListView::taskQTBUG_39902_mutualScrollBars()
|
|||
view->resize(itemSize.width() + view->frameWidth() * 2, model.rowCount() * itemSize.height() + view->frameWidth() * 2);
|
||||
QTRY_VERIFY(!view->horizontalScrollBar()->isVisible());
|
||||
QTRY_VERIFY(!view->verticalScrollBar()->isVisible());
|
||||
|
||||
// now remove just one single pixel in height -> both scroll bars will show up since they depend on each other
|
||||
view->resize(itemSize.width() + view->frameWidth() * 2, model.rowCount() * itemSize.height() + view->frameWidth() * 2 - 1);
|
||||
QTRY_VERIFY(view->horizontalScrollBar()->isVisible());
|
||||
QTRY_VERIFY(view->verticalScrollBar()->isVisible());
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QListView)
|
||||
|
|
|
|||
Loading…
Reference in New Issue