summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qtabbar.cpp8
-rw-r--r--tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp26
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");