When tabs are inserted or removed in a QTabBar, QTabBarPrivate::refresh() is called...
authorRobert Knight <robertknight@gmail.com>
Sun, 20 Apr 2008 14:28:31 +0000 (16:28 +0200)
committerLisandro Damián Nicanor Pérez Meyer <lisandro@debian.org>
Fri, 1 May 2015 19:35:39 +0000 (19:35 +0000)
commitb6858b35056e2f47030bff2c29a6e9c592a8f46a
treefccf1dc3cac484f9b869fb14cefe86d633524cdd
parentd6d8de1eef0ea4df4c98e167c4186d2196d3950b
When tabs are inserted or removed in a QTabBar, QTabBarPrivate::refresh() is called to update the layout. If the tabbar widget is hidden, this just sets a boolean variable (layoutDirty) and returns, so the parent widget's layout is not notified about the possible geometry change.

Prior to Qt 4.4 this was not a problem because the geometry was
recalculated in QTabBar::sizeHint() if the layoutDirty variable was
set.  In Qt 4.4 however the layout caches size hint information in
QWidgetItemV2.  Since the cache information is not invalidated, the
layout may end up using out-of-date size hint information to compute
the widget size.

If the QTabBar is empty when QTabBar::sizeHint() is called, it will
return a size with a height of 0, which will be kept in the cache and
so the tab bar will never be shown.

This patch fixes the problem by calling updateGeometry() whenever the
tab bar's layout is refreshed.

qt-bugs@ issue : 208185
Trolltech task ID : 208349
bugs.kde.org number : 159014

Gbp-Pq: Name 0225-invalidate-tabbar-geometry-on-refresh.patch
src/gui/widgets/qtabbar.cpp