Fix saving handle width in QSplitter::saveState()
QSplitter::handleWidth() returns either a style dependent value if d->handleWidth is negative or the value of d->handleWidth itself. So to preserve this choice after calling saveState()/restoreState() we should save and restore the value of d->handleWidth rather than a result of handleWidth() which is non-negative. Change-Id: Idc11f8063d34b6c4a5f9b0a0032868679766dfb9 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
parent
eb6507039f
commit
80ca159b47
@ -1609,7 +1609,7 @@ QByteArray QSplitter::saveState() const
|
|||||||
}
|
}
|
||||||
stream << list;
|
stream << list;
|
||||||
stream << childrenCollapsible();
|
stream << childrenCollapsible();
|
||||||
stream << qint32(handleWidth());
|
stream << qint32(d->handleWidth);
|
||||||
stream << opaqueResize();
|
stream << opaqueResize();
|
||||||
stream << qint32(orientation());
|
stream << qint32(orientation());
|
||||||
stream << d->opaqueResizeSet;
|
stream << d->opaqueResizeSet;
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
#include <qlabel.h>
|
#include <qlabel.h>
|
||||||
#include <qdialog.h>
|
#include <qdialog.h>
|
||||||
#include <qscreen.h>
|
#include <qscreen.h>
|
||||||
|
#include <qproxystyle.h>
|
||||||
#include <qdebug.h> // for file error messages
|
#include <qdebug.h> // for file error messages
|
||||||
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QSplitter)
|
QT_FORWARD_DECLARE_CLASS(QSplitter)
|
||||||
@ -88,6 +89,7 @@ private slots:
|
|||||||
void testRemoval();
|
void testRemoval();
|
||||||
void rubberBandNotInSplitter();
|
void rubberBandNotInSplitter();
|
||||||
void saveAndRestoreStateOfNotYetShownSplitter();
|
void saveAndRestoreStateOfNotYetShownSplitter();
|
||||||
|
void saveAndRestoreHandleWidth();
|
||||||
|
|
||||||
// task-specific tests below me:
|
// task-specific tests below me:
|
||||||
void task187373_addAbstractScrollAreas();
|
void task187373_addAbstractScrollAreas();
|
||||||
@ -301,6 +303,41 @@ void tst_QSplitter::saveAndRestoreStateOfNotYetShownSplitter()
|
|||||||
delete spl;
|
delete spl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TestSplitterStyle : public QProxyStyle
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TestSplitterStyle() : handleWidth(5) {}
|
||||||
|
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE
|
||||||
|
{
|
||||||
|
if (metric == QStyle::PM_SplitterWidth)
|
||||||
|
return handleWidth;
|
||||||
|
else
|
||||||
|
return QProxyStyle::pixelMetric(metric, option, widget);
|
||||||
|
}
|
||||||
|
int handleWidth;
|
||||||
|
};
|
||||||
|
|
||||||
|
void tst_QSplitter::saveAndRestoreHandleWidth()
|
||||||
|
{
|
||||||
|
TestSplitterStyle style;
|
||||||
|
style.handleWidth = 5;
|
||||||
|
QSplitter spl;
|
||||||
|
spl.setStyle(&style);
|
||||||
|
|
||||||
|
QCOMPARE(spl.handleWidth(), style.handleWidth);
|
||||||
|
style.handleWidth = 10;
|
||||||
|
QCOMPARE(spl.handleWidth(), style.handleWidth);
|
||||||
|
QByteArray ba = spl.saveState();
|
||||||
|
spl.setHandleWidth(20);
|
||||||
|
QCOMPARE(spl.handleWidth(), 20);
|
||||||
|
spl.setHandleWidth(-1);
|
||||||
|
QCOMPARE(spl.handleWidth(), style.handleWidth);
|
||||||
|
spl.setHandleWidth(15);
|
||||||
|
QCOMPARE(spl.handleWidth(), 15);
|
||||||
|
spl.restoreState(ba);
|
||||||
|
QCOMPARE(spl.handleWidth(), style.handleWidth);
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QSplitter::saveState_data()
|
void tst_QSplitter::saveState_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<IntList>("initialSizes");
|
QTest::addColumn<IntList>("initialSizes");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user