From d2d37852a2686e302b2c1a2bc2277046a0b2f093 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 31 Aug 2017 09:09:05 +0200 Subject: [PATCH] suing initSizePolicy in constructors to avoid potential problems from layout requests coming before the parent has been constructed completely. --- src/controls/QskGraphicLabel.cpp | 2 +- src/controls/QskInputPanel.cpp | 4 +++- src/controls/QskPageIndicator.cpp | 2 +- src/controls/QskPushButton.cpp | 2 +- src/controls/QskResizable.cpp | 15 +++++++++++++++ src/controls/QskResizable.h | 3 +++ src/controls/QskSeparator.cpp | 4 ++-- src/controls/QskSlider.cpp | 4 ++-- src/controls/QskStatusIndicator.cpp | 2 +- src/controls/QskSubWindow.cpp | 2 +- src/controls/QskTabBar.cpp | 4 ++-- src/controls/QskTabButton.cpp | 2 +- src/controls/QskTextLabel.cpp | 2 +- 13 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/controls/QskGraphicLabel.cpp b/src/controls/QskGraphicLabel.cpp index db038ba2..b0a24725 100644 --- a/src/controls/QskGraphicLabel.cpp +++ b/src/controls/QskGraphicLabel.cpp @@ -44,7 +44,7 @@ QskGraphicLabel::QskGraphicLabel( const QUrl& source, QQuickItem* parent ): Inherited( parent ), m_data( new PrivateData( source ) ) { - setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); + initSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); if ( !m_data->source.isEmpty() ) polish(); diff --git a/src/controls/QskInputPanel.cpp b/src/controls/QskInputPanel.cpp index b4d69650..94af34c2 100644 --- a/src/controls/QskInputPanel.cpp +++ b/src/controls/QskInputPanel.cpp @@ -226,9 +226,11 @@ QskInputPanel::QskInputPanel( QQuickItem* parent ): QskControl( parent ), m_data( new PrivateData ) { - setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); setFlag( ItemHasContents ); setAcceptedMouseButtons( Qt::MouseButtonMask ); + + initSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); + updateLocale( locale() ); QObject::connect( this, &QskControl::localeChanged, diff --git a/src/controls/QskPageIndicator.cpp b/src/controls/QskPageIndicator.cpp index e08528a6..abd786cb 100644 --- a/src/controls/QskPageIndicator.cpp +++ b/src/controls/QskPageIndicator.cpp @@ -31,7 +31,7 @@ QskPageIndicator::QskPageIndicator( int count, QQuickItem* parent ): m_data( new PrivateData( count ) ) { // as we don't stretch the bullets - setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Fixed ); } QskPageIndicator::QskPageIndicator( QQuickItem* parent ): diff --git a/src/controls/QskPushButton.cpp b/src/controls/QskPushButton.cpp index d78f63ed..34ae4d85 100644 --- a/src/controls/QskPushButton.cpp +++ b/src/controls/QskPushButton.cpp @@ -46,7 +46,7 @@ QskPushButton::QskPushButton( const QString& text, QQuickItem* parent ): Inherited( parent ), m_data( new PrivateData( text ) ) { - setSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); } QskPushButton::~QskPushButton() diff --git a/src/controls/QskResizable.cpp b/src/controls/QskResizable.cpp index 56a2825b..25e9a740 100644 --- a/src/controls/QskResizable.cpp +++ b/src/controls/QskResizable.cpp @@ -17,6 +17,21 @@ QskResizable::~QskResizable() { } +void QskResizable::initSizePolicy( + QskSizePolicy::Policy horizontalPolicy, + QskSizePolicy::Policy verticalPolicy ) +{ + /* + In constructors of derived classes you don't need + to propagate changes by layoutConstraintChanged. + Sometimes it is even worse as the parent might not be + even prepared to handle the LayouRequest event. + */ + + m_sizePolicy.setHorizontalPolicy( horizontalPolicy ); + m_sizePolicy.setVerticalPolicy( verticalPolicy ); +} + void QskResizable::setSizePolicy( const QskSizePolicy& policy ) { if ( policy != m_sizePolicy ) diff --git a/src/controls/QskResizable.h b/src/controls/QskResizable.h index b5239929..af4b3b71 100644 --- a/src/controls/QskResizable.h +++ b/src/controls/QskResizable.h @@ -63,6 +63,9 @@ public: virtual qreal heightForWidth( qreal width ) const; virtual qreal widthForHeight( qreal height ) const; +protected: + void initSizePolicy( QskSizePolicy::Policy, QskSizePolicy::Policy ); + private: virtual void layoutConstraintChanged(); diff --git a/src/controls/QskSeparator.cpp b/src/controls/QskSeparator.cpp index af7734bb..4f494274 100644 --- a/src/controls/QskSeparator.cpp +++ b/src/controls/QskSeparator.cpp @@ -18,9 +18,9 @@ QskSeparator::QskSeparator( Qt::Orientation orientation, QQuickItem* parent ): m_orientation( orientation ) { if ( orientation == Qt::Horizontal ) - setSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); else - setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); + initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); } QskSeparator::~QskSeparator() diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index 744abcee..3f134abe 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -47,9 +47,9 @@ QskSlider::QskSlider( Qt::Orientation orientation, QQuickItem* parent ): setActiveFocusOnTab( true ); if ( orientation == Qt::Horizontal ) - setSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); else - setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); + initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); setMetric( QskSlider::Handle | QskAspect::Position, position() ); diff --git a/src/controls/QskStatusIndicator.cpp b/src/controls/QskStatusIndicator.cpp index eabb667f..0361fa9f 100644 --- a/src/controls/QskStatusIndicator.cpp +++ b/src/controls/QskStatusIndicator.cpp @@ -64,7 +64,7 @@ QskStatusIndicator::QskStatusIndicator( QQuickItem* parent ): Inherited( parent ), m_data( new PrivateData() ) { - setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); + initSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding ); } QskStatusIndicator::~QskStatusIndicator() diff --git a/src/controls/QskSubWindow.cpp b/src/controls/QskSubWindow.cpp index 8093968b..fc79bb8d 100644 --- a/src/controls/QskSubWindow.cpp +++ b/src/controls/QskSubWindow.cpp @@ -34,7 +34,7 @@ QskSubWindow::QskSubWindow( QQuickItem* parent ): m_data( new PrivateData() ) { setMargins( 0 ); - setSizePolicy( QskSizePolicy::MinimumExpanding, QskSizePolicy::MinimumExpanding ); + initSizePolicy( QskSizePolicy::MinimumExpanding, QskSizePolicy::MinimumExpanding ); setAutoLayoutChildren( true ); } diff --git a/src/controls/QskTabBar.cpp b/src/controls/QskTabBar.cpp index 71e0db3e..85763e59 100644 --- a/src/controls/QskTabBar.cpp +++ b/src/controls/QskTabBar.cpp @@ -46,9 +46,9 @@ QskTabBar::QskTabBar( Qt::Orientation orientation, QQuickItem* parent ): m_data->layoutBox->setExtraSpacingAt( Qt::RightEdge | Qt::BottomEdge ); if ( orientation == Qt::Horizontal ) - setSizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Preferred, QskSizePolicy::Fixed ); else - setSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Preferred ); + initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Preferred ); setAutoLayoutChildren( true ); diff --git a/src/controls/QskTabButton.cpp b/src/controls/QskTabButton.cpp index fd41abda..265f6577 100644 --- a/src/controls/QskTabButton.cpp +++ b/src/controls/QskTabButton.cpp @@ -37,7 +37,7 @@ QskTabButton::QskTabButton( const QString& text, QQuickItem* parent ): { resolveTabBar(); - setSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); setCheckable( true ); setExclusive( true ); diff --git a/src/controls/QskTextLabel.cpp b/src/controls/QskTextLabel.cpp index 8c39932f..67369ff4 100644 --- a/src/controls/QskTextLabel.cpp +++ b/src/controls/QskTextLabel.cpp @@ -37,7 +37,7 @@ QskTextLabel::QskTextLabel( const QString& text, QQuickItem* parent ): Inherited( parent ), m_data( new PrivateData( text ) ) { - setSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); + initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); } QskTextLabel::~QskTextLabel()