summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp5
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp40
2 files changed, 45 insertions, 0 deletions
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index 0a00086138..06c20adb9d 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -2105,6 +2105,8 @@ bool QDockAreaLayoutInfo::updateTabBar() const
const QSignalBlocker blocker(tabBar);
bool gap = false;
+ const quintptr oldCurrentId = currentTabId();
+
int tab_idx = 0;
for (int i = 0; i < item_list.count(); ++i) {
const QDockAreaLayoutItem &item = item_list.at(i);
@@ -2153,6 +2155,9 @@ bool QDockAreaLayoutInfo::updateTabBar() const
tabBar->removeTab(tab_idx);
}
+ if (oldCurrentId > 0 && currentTabId() != oldCurrentId)
+ that->setCurrentTabId(oldCurrentId);
+
//returns if the tabbar is visible or not
return ( (gap ? 1 : 0) + tabBar->count()) > 1;
}
diff --git a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
index 82832bced1..70df31ed69 100644
--- a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
+++ b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
@@ -40,6 +40,7 @@
#include <qdockwidget.h>
#include <qmainwindow.h>
#include <qlineedit.h>
+#include <qtabbar.h>
#include <QDesktopWidget>
#include <QtGui/QPainter>
#include "private/qdockwidget_p.h"
@@ -68,6 +69,7 @@ private slots:
void allowedAreas();
void toggleViewAction();
void visibilityChanged();
+ void updateTabBarOnVisibilityChanged();
void dockLocationChanged();
void setTitleBarWidget();
void titleBarDoubleClick();
@@ -586,6 +588,44 @@ void tst_QDockWidget::visibilityChanged()
QCOMPARE(spy.at(0).at(0).toBool(), true);
}
+void tst_QDockWidget::updateTabBarOnVisibilityChanged()
+{
+ // QTBUG49045: Populate tabified dock area with 4 widgets, set the tab
+ // index to 2 (dw2), hide dw0, dw1 and check that the tab index is 0 (dw3).
+ QMainWindow mw;
+ mw.setMinimumSize(400, 400);
+ mw.setWindowTitle(QTest::currentTestFunction());
+ QDockWidget *dw0 = new QDockWidget("d1", &mw);
+ dw0->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw0);
+ QDockWidget *dw1 = new QDockWidget("d2", &mw);
+ dw1->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw1);
+ QDockWidget *dw2 = new QDockWidget("d3", &mw);
+ dw2->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw2);
+ QDockWidget *dw3 = new QDockWidget("d4", &mw);
+ dw3->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw3);
+ mw.tabifyDockWidget(dw0, dw1);
+ mw.tabifyDockWidget(dw1, dw2);
+ mw.tabifyDockWidget(dw2, dw3);
+
+ QTabBar *tabBar = mw.findChild<QTabBar *>();
+ QVERIFY(tabBar);
+ tabBar->setCurrentIndex(2);
+
+ mw.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mw));
+
+ QCOMPARE(tabBar->currentIndex(), 2);
+
+ dw0->hide();
+ dw1->hide();
+ QTRY_COMPARE(tabBar->count(), 2);
+ QCOMPARE(tabBar->currentIndex(), 0);
+}
+
Q_DECLARE_METATYPE(Qt::DockWidgetArea)
void tst_QDockWidget::dockLocationChanged()