diff options
-rw-r--r-- | src/widgets/widgets/qtabbar.cpp | 8 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp | 26 |
2 files changed, 31 insertions, 3 deletions
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index ab4478a98b..2c65240434 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -990,14 +990,16 @@ int QTabBar::insertTab(int index, const QIcon& icon, const QString &text) d->tabList.at(index)->shortcutId = grabShortcut(QKeySequence::mnemonic(text)); #endif d->firstVisible = qMax(qMin(index, d->firstVisible), 0); - d->lastVisible = qMax(index, d->lastVisible); d->refresh(); if (d->tabList.count() == 1) setCurrentIndex(index); - else if (index <= d->currentIndex) { + else if (index <= d->currentIndex) ++d->currentIndex; + + if (index <= d->lastVisible) ++d->lastVisible; - } + else + d->lastVisible = index; if (d->closeButtonOnTabs) { QStyleOptionTab opt; diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp index db94e03ff4..d61b48a41c 100644 --- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp +++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp @@ -59,6 +59,7 @@ private slots: void testCurrentChanged(); void insertAtCurrentIndex(); + void insertAfterCurrentIndex(); void removeTab_data(); void removeTab(); @@ -236,6 +237,31 @@ void tst_QTabBar::insertAtCurrentIndex() QCOMPARE(tabBar.currentIndex(), 3); } +void tst_QTabBar::insertAfterCurrentIndex() +{ + TabBar tabBar; + + tabBar.addTab("Tab10"); + checkPositions(tabBar, { QStyleOptionTab::OnlyOneTab }); + + tabBar.addTab("Tab20"); + checkPositions(tabBar, { QStyleOptionTab::Beginning, QStyleOptionTab::End }); + + tabBar.insertTab(1, "Tab15"); + checkPositions(tabBar, + { QStyleOptionTab::Beginning, QStyleOptionTab::Middle, QStyleOptionTab::End }); + + tabBar.insertTab(3, "Tab30"); + checkPositions(tabBar, + { QStyleOptionTab::Beginning, QStyleOptionTab::Middle, QStyleOptionTab::Middle, + QStyleOptionTab::End }); + + tabBar.insertTab(3, "Tab25"); + checkPositions(tabBar, + { QStyleOptionTab::Beginning, QStyleOptionTab::Middle, QStyleOptionTab::Middle, + QStyleOptionTab::Middle, QStyleOptionTab::End }); +} + void tst_QTabBar::removeTab_data() { QTest::addColumn<int>("currentIndex"); |