diff options
Diffstat (limited to 'src/widgets/widgets/qtabbar.cpp')
-rw-r--r-- | src/widgets/widgets/qtabbar.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index 4b649a70ac..9a382e96dd 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -407,10 +407,12 @@ void QTabBarPrivate::init() { Q_Q(QTabBar); leftB = new QToolButton(q); + leftB->setObjectName(QStringLiteral("ScrollLeftButton")); leftB->setAutoRepeat(true); QObject::connect(leftB, SIGNAL(clicked()), q, SLOT(_q_scrollTabs())); leftB->hide(); rightB = new QToolButton(q); + rightB->setObjectName(QStringLiteral("ScrollRightButton")); rightB->setAutoRepeat(true); QObject::connect(rightB, SIGNAL(clicked()), q, SLOT(_q_scrollTabs())); rightB->hide(); @@ -831,21 +833,24 @@ void QTabBarPrivate::_q_scrollTabs() Q_Q(QTabBar); const QObject *sender = q->sender(); const bool horizontal = !verticalTabs(shape); - const QRect scrollRect = normalizedScrollRect(); + const QRect scrollRect = normalizedScrollRect().translated(scrollOffset, 0); + int i = -1; if (sender == leftB) { for (i = tabList.count() - 1; i >= 0; --i) { int start = horizontal ? tabList.at(i).rect.left() : tabList.at(i).rect.top(); - if (start < scrollRect.left() + scrollOffset) { + if (start < scrollRect.left()) { makeVisible(i); return; } } } else if (sender == rightB) { for (i = 0; i < tabList.count(); ++i) { - int end = horizontal ? tabList.at(i).rect.right() : tabList.at(i).rect.bottom(); - if (end > scrollRect.right() + scrollOffset) { + const auto tabRect = tabList.at(i).rect; + int start = horizontal ? tabRect.left() : tabRect.top(); + int end = horizontal ? tabRect.right() : tabRect.bottom(); + if (end > scrollRect.right() && start > scrollOffset) { makeVisible(i); return; } @@ -997,14 +1002,16 @@ int QTabBar::insertTab(int index, const QIcon& icon, const QString &text) d->tabList[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) { QStyleOptionTabV4 opt; @@ -2397,7 +2404,7 @@ void QTabBar::timerEvent(QTimerEvent *event) This property controls how items are elided when there is not enough space to show them for a given tab bar size. - By default the value is style dependent. + By default the value is style-dependent. \sa QTabWidget::elideMode, usesScrollButtons, QStyle::SH_TabBar_ElideMode */ @@ -2426,7 +2433,7 @@ void QTabBar::setElideMode(Qt::TextElideMode mode) When there are too many tabs in a tab bar for its size, the tab bar can either choose to expand its size or to add buttons that allow you to scroll through the tabs. - By default the value is style dependant. + By default the value is style-dependent. \sa elideMode, QTabWidget::usesScrollButtons, QStyle::SH_TabBar_PreferNoArrows */ |