after giving up misusing private objects, we are free to move our

private data back to to private object.
This commit is contained in:
Uwe Rathmann 2017-10-25 14:53:49 +02:00
parent e1e0edec3e
commit 958b609306
2 changed files with 142 additions and 129 deletions

View File

@ -104,7 +104,24 @@ static QskWindowStore qskReleasedWindowCounter;
class QskControlPrivate : public QQuickItemPrivate class QskControlPrivate : public QQuickItemPrivate
{ {
Q_DECLARE_PUBLIC(QskControl) Q_DECLARE_PUBLIC(QskControl)
public: public:
QskControlPrivate():
controlFlags( qskControlFlags() ),
controlFlagsMask( 0 ),
explicitLocale( false ),
autoFillBackground( false ),
autoLayoutChildren( false ),
polishOnResize( false ),
blockedPolish( false ),
blockedImplicitSize( true ),
clearPreviousNodes( false ),
isInitiallyPainted( false ),
focusPolicy( Qt::NoFocus ),
isWheelEnabled( false )
{
}
void mirrorChange() override void mirrorChange() override
{ {
Q_Q( QskControl ); Q_Q( QskControl );
@ -154,10 +171,27 @@ public:
return q->gestureFilter( child, event ); return q->gestureFilter( child, event );
} }
};
static_assert( sizeof( QskControlPrivate ) == sizeof( QQuickItemPrivate ), QLocale locale;
"QskControlPrivate may not have additional members." );
quint16 controlFlags;
quint16 controlFlagsMask;
bool explicitLocale : 1;
bool autoFillBackground : 1;
bool autoLayoutChildren : 1;
bool polishOnResize : 1;
bool blockedPolish : 1;
bool blockedImplicitSize : 1;
bool clearPreviousNodes : 1;
bool isInitiallyPainted : 1;
uint focusPolicy : 4;
bool isWheelEnabled;
};
QskControl::QskControl( QQuickItem* parent ): QskControl::QskControl( QQuickItem* parent ):
QskControl( *( new QskControlPrivate() ), parent ) QskControl( *( new QskControlPrivate() ), parent )
@ -165,23 +199,11 @@ QskControl::QskControl( QQuickItem* parent ):
} }
QskControl::QskControl( QQuickItemPrivate& dd, QQuickItem* parent ): QskControl::QskControl( QQuickItemPrivate& dd, QQuickItem* parent ):
Inherited( dd, parent ), Inherited( dd, parent )
m_controlFlags( qskControlFlags() ),
m_controlFlagsMask( 0 ),
m_explicitLocale( false ),
m_autoFillBackground( false ),
m_autoLayoutChildren( false ),
m_polishOnResize( false ),
m_blockedPolish( false ),
m_blockedImplicitSize( true ),
m_clearPreviousNodes( false ),
m_isInitiallyPainted( false ),
m_focusPolicy( Qt::NoFocus ),
m_isWheelEnabled( false )
{ {
Q_D( QskControl ); Q_D( QskControl );
if ( m_controlFlags & QskControl::DeferredLayout ) if ( d->controlFlags & QskControl::DeferredLayout )
{ {
// In general the geometry of an item should be the job of // In general the geometry of an item should be the job of
// the parent - unfortunatly not done by Qt Quick // the parent - unfortunatly not done by Qt Quick
@ -219,7 +241,7 @@ QskControl::QskControl( QQuickItemPrivate& dd, QQuickItem* parent ):
connect( qskSetup, SIGNAL( controlFlagsChanged() ), connect( qskSetup, SIGNAL( controlFlagsChanged() ),
this, SLOT( updateControlFlags() ) ); this, SLOT( updateControlFlags() ) );
if ( m_controlFlags & QskControl::DeferredUpdate ) if ( d->controlFlags & QskControl::DeferredUpdate )
qskFilterWindow( window() ); qskFilterWindow( window() );
} }
@ -293,15 +315,16 @@ void QskControl::setGeometry( qreal x, qreal y, qreal width, qreal height )
QRectF QskControl::geometry() const QRectF QskControl::geometry() const
{ {
Q_D( const QQuickItem ); Q_D( const QskControl );
return QRectF( d->x, d->y, d->width, d->height ); return QRectF( d->x, d->y, d->width, d->height );
} }
void QskControl::setAutoFillBackground( bool on ) void QskControl::setAutoFillBackground( bool on )
{ {
if ( on != m_autoFillBackground ) Q_D( QskControl );
if ( on != d->autoFillBackground )
{ {
m_autoFillBackground = on; d->autoFillBackground = on;
update(); update();
Q_EMIT controlFlagsChanged(); Q_EMIT controlFlagsChanged();
@ -310,14 +333,15 @@ void QskControl::setAutoFillBackground( bool on )
bool QskControl::autoFillBackground() const bool QskControl::autoFillBackground() const
{ {
return m_autoFillBackground; return d_func()->autoFillBackground;
} }
void QskControl::setAutoLayoutChildren( bool on ) void QskControl::setAutoLayoutChildren( bool on )
{ {
if ( on != m_autoLayoutChildren ) Q_D( QskControl );
if ( on != d->autoLayoutChildren )
{ {
m_autoLayoutChildren = on; d->autoLayoutChildren = on;
if ( on ) if ( on )
polish(); polish();
@ -327,7 +351,7 @@ void QskControl::setAutoLayoutChildren( bool on )
bool QskControl::autoLayoutChildren() const bool QskControl::autoLayoutChildren() const
{ {
return m_autoLayoutChildren; return d_func()->autoLayoutChildren;
} }
void QskControl::setTransparentForPositioner( bool on ) void QskControl::setTransparentForPositioner( bool on )
@ -342,8 +366,7 @@ void QskControl::setTransparentForPositioner( bool on )
bool QskControl::isTransparentForPositioner() const bool QskControl::isTransparentForPositioner() const
{ {
Q_D( const QskControl ); return d_func()->isTransparentForPositioner();
return d->isTransparentForPositioner();
} }
bool QskControl::isTransparentForPositioner( const QQuickItem* item ) bool QskControl::isTransparentForPositioner( const QQuickItem* item )
@ -356,9 +379,10 @@ bool QskControl::isTransparentForPositioner( const QQuickItem* item )
void QskControl::setPolishOnResize( bool on ) void QskControl::setPolishOnResize( bool on )
{ {
if ( on != m_polishOnResize ) Q_D( QskControl );
if ( on != d->polishOnResize )
{ {
m_polishOnResize = on; d->polishOnResize = on;
polish(); polish();
Q_EMIT controlFlagsChanged(); Q_EMIT controlFlagsChanged();
@ -367,41 +391,39 @@ void QskControl::setPolishOnResize( bool on )
bool QskControl::polishOnResize() const bool QskControl::polishOnResize() const
{ {
return m_polishOnResize; return d_func()->polishOnResize;
} }
void QskControl::setWheelEnabled( bool on ) void QskControl::setWheelEnabled( bool on )
{ {
if ( on != m_isWheelEnabled ) Q_D( QskControl );
if ( on != d->isWheelEnabled )
{ {
m_isWheelEnabled = on; d->isWheelEnabled = on;
// Q_EMIT wheelEnabledChanged(); Q_EMIT wheelEnabledChanged();
} }
} }
bool QskControl::isWheelEnabled() const bool QskControl::isWheelEnabled() const
{ {
return m_isWheelEnabled; return d_func()->isWheelEnabled;
} }
void QskControl::setFocusPolicy( Qt::FocusPolicy policy ) void QskControl::setFocusPolicy( Qt::FocusPolicy policy )
{ {
if ( policy != m_focusPolicy ) Q_D( QskControl );
if ( policy != d->focusPolicy )
{ {
m_focusPolicy = policy & ~Qt::TabFocus; d->focusPolicy = policy & ~Qt::TabFocus;
QQuickItem::setActiveFocusOnTab( policy & Qt::TabFocus ); QQuickItem::setActiveFocusOnTab( policy & Qt::TabFocus );
#if 0
// we have to get rid of the hack used in playground/inputpanel
// so that we can add additional signals !!!
Q_EMIT ( focusPolicyChanged() ); Q_EMIT ( focusPolicyChanged() );
#endif
} }
} }
Qt::FocusPolicy QskControl::focusPolicy() const Qt::FocusPolicy QskControl::focusPolicy() const
{ {
uint policy = m_focusPolicy; uint policy = d_func()->focusPolicy;
if ( activeFocusOnTab() ) if ( activeFocusOnTab() )
policy |= Qt::TabFocus; policy |= Qt::TabFocus;
@ -420,34 +442,35 @@ void QskControl::setTabFence( bool on )
bool QskControl::isTabFence() const bool QskControl::isTabFence() const
{ {
Q_D( const QskControl ); return d_func()->isTabFence;
return d->isTabFence;
} }
QskControl::Flags QskControl::controlFlags() const QskControl::Flags QskControl::controlFlags() const
{ {
return QskControl::Flags( m_controlFlags ); return QskControl::Flags( d_func()->controlFlags );
} }
void QskControl::setControlFlags( Flags flags ) void QskControl::setControlFlags( Flags flags )
{ {
// set all bits in the mask // set all bits in the mask
m_controlFlagsMask = std::numeric_limits< controlFlags_t >::max(); d_func()->controlFlagsMask = std::numeric_limits< controlFlags_t >::max();
updateControlFlags( flags ); updateControlFlags( flags );
} }
void QskControl::resetControlFlags() void QskControl::resetControlFlags()
{ {
// clear all bits in the mask // clear all bits in the mask
m_controlFlagsMask = 0; d_func()->controlFlagsMask = 0;
updateControlFlags( static_cast< Flags >( qskControlFlags() ) ); updateControlFlags( static_cast< Flags >( qskControlFlags() ) );
} }
void QskControl::setControlFlag( Flag flag, bool on ) void QskControl::setControlFlag( Flag flag, bool on )
{ {
m_controlFlagsMask |= flag; Q_D( QskControl );
if ( ( m_controlFlags & flag ) != on ) d->controlFlagsMask |= flag;
if ( ( d->controlFlags & flag ) != on )
{ {
updateControlFlag( flag, on ); updateControlFlag( flag, on );
Q_EMIT controlFlagsChanged(); Q_EMIT controlFlagsChanged();
@ -456,11 +479,13 @@ void QskControl::setControlFlag( Flag flag, bool on )
void QskControl::resetControlFlag( Flag flag ) void QskControl::resetControlFlag( Flag flag )
{ {
m_controlFlagsMask &= ~flag; Q_D( QskControl );
d->controlFlagsMask &= ~flag;
const bool on = qskSetup->testControlFlag( static_cast< QskSetup::Flag >( flag ) ); const bool on = qskSetup->testControlFlag( static_cast< QskSetup::Flag >( flag ) );
if ( ( m_controlFlags & flag ) != on ) if ( ( d->controlFlags & flag ) != on )
{ {
updateControlFlag( flag, on ); updateControlFlag( flag, on );
Q_EMIT controlFlagsChanged(); Q_EMIT controlFlagsChanged();
@ -469,7 +494,7 @@ void QskControl::resetControlFlag( Flag flag )
bool QskControl::testControlFlag( Flag flag ) const bool QskControl::testControlFlag( Flag flag ) const
{ {
return m_controlFlags & flag; return d_func()->controlFlags & flag;
} }
void QskControl::updateControlFlags() void QskControl::updateControlFlags()
@ -479,7 +504,7 @@ void QskControl::updateControlFlags()
void QskControl::updateControlFlags( Flags flags ) void QskControl::updateControlFlags( Flags flags )
{ {
const auto oldFlags = m_controlFlags; const auto oldFlags = d_func()->controlFlags;
const auto newFlags = static_cast< controlFlags_t >( flags ); const auto newFlags = static_cast< controlFlags_t >( flags );
if ( oldFlags != newFlags ) if ( oldFlags != newFlags )
@ -499,15 +524,15 @@ void QskControl::updateControlFlag( uint flag, bool on )
Q_D( QskControl ); Q_D( QskControl );
if ( ( flag > std::numeric_limits< controlFlags_t >::max() ) if ( ( flag > std::numeric_limits< controlFlags_t >::max() )
|| ( bool( m_controlFlags & flag ) == on ) ) || ( bool( d->controlFlags & flag ) == on ) )
{ {
return; return;
} }
if ( on ) if ( on )
m_controlFlags |= flag; d->controlFlags |= flag;
else else
m_controlFlags &= ~flag; d->controlFlags &= ~flag;
switch( flag ) switch( flag )
{ {
@ -527,7 +552,7 @@ void QskControl::updateControlFlag( uint flag, bool on )
} }
case QskControl::DeferredPolish: case QskControl::DeferredPolish:
{ {
if ( !on && m_blockedPolish ) if ( !on && d->blockedPolish )
polish(); polish();
break; break;
@ -665,7 +690,8 @@ void QskControl::setMargins( const QMarginsF& margins )
setMarginsHint( subControl | Margin, m ); setMarginsHint( subControl | Margin, m );
resetImplicitSize(); resetImplicitSize();
if ( m_polishOnResize || m_autoLayoutChildren ) Q_D( const QskControl );
if ( d->polishOnResize || d->autoLayoutChildren )
polish(); polish();
qskSendEventTo( this, QEvent::ContentsRectChange ); qskSendEventTo( this, QEvent::ContentsRectChange );
@ -687,7 +713,8 @@ void QskControl::resetMargins()
{ {
resetImplicitSize(); resetImplicitSize();
if ( m_polishOnResize || m_autoLayoutChildren ) Q_D( const QskControl );
if ( d->polishOnResize || d->autoLayoutChildren )
polish(); polish();
qskSendEventTo( this, QEvent::ContentsRectChange ); qskSendEventTo( this, QEvent::ContentsRectChange );
@ -727,8 +754,7 @@ QRectF QskControl::contentsRect() const
bool QskControl::layoutMirroring() const bool QskControl::layoutMirroring() const
{ {
Q_D( const QskControl ); return d_func()->effectiveLayoutMirror;
return d->effectiveLayoutMirror;
} }
void QskControl::setLayoutMirroring( bool on, bool recursive ) void QskControl::setLayoutMirroring( bool on, bool recursive )
@ -773,16 +799,18 @@ void QskControl::resetLayoutMirroring()
QLocale QskControl::locale() const QLocale QskControl::locale() const
{ {
return m_locale; return d_func()->locale;
} }
void QskControl::setLocale( const QLocale& locale ) void QskControl::setLocale( const QLocale& locale )
{ {
m_explicitLocale = true; Q_D( QskControl );
if ( m_locale != locale ) d->explicitLocale = true;
if ( d->locale != locale )
{ {
m_locale = locale; d->locale = locale;
qskSendEventTo( this, QEvent::LocaleChange ); qskSendEventTo( this, QEvent::LocaleChange );
qskSetup->inheritLocale( this, locale ); qskSetup->inheritLocale( this, locale );
} }
@ -790,9 +818,11 @@ void QskControl::setLocale( const QLocale& locale )
void QskControl::resetLocale() void QskControl::resetLocale()
{ {
if ( m_explicitLocale ) Q_D( QskControl );
if ( d->explicitLocale )
{ {
m_explicitLocale = false; d->explicitLocale = false;
qskResolveLocale( this ); qskResolveLocale( this );
} }
} }
@ -800,10 +830,12 @@ void QskControl::resetLocale()
// not static as being called from QskSetup.cpp // not static as being called from QskSetup.cpp
bool qskInheritLocale( QskControl* control, const QLocale& locale ) bool qskInheritLocale( QskControl* control, const QLocale& locale )
{ {
if ( control->m_explicitLocale || control->m_locale == locale ) auto d = static_cast< QskControlPrivate *>( QQuickItemPrivate::get( control ) );
if ( d->explicitLocale || d->locale == locale )
return false; return false;
control->m_locale = locale; d->locale = locale;
qskSendEventTo( control, QEvent::LocaleChange ); qskSendEventTo( control, QEvent::LocaleChange );
return true; return true;
@ -813,11 +845,12 @@ void qskResolveLocale( QskControl* control )
{ {
const QLocale locale = qskSetup->inheritedLocale( control ); const QLocale locale = qskSetup->inheritedLocale( control );
if ( control->m_locale != locale ) auto d = static_cast< QskControlPrivate *>( QQuickItemPrivate::get( control ) );
if ( d->locale != locale )
{ {
control->m_locale = locale; d->locale = locale;
qskSendEventTo( control, QEvent::LocaleChange );
qskSendEventTo( control, QEvent::LocaleChange );
qskSetup->inheritLocale( control, locale ); qskSetup->inheritLocale( control, locale );
} }
} }
@ -833,7 +866,7 @@ QSizeF QskControl::effectiveConstraint( Qt::SizeHint whichHint ) const
// in most cases we don't have a preferred width or height // in most cases we don't have a preferred width or height
// and fall back to the implicit size. // and fall back to the implicit size.
if ( m_blockedImplicitSize ) if ( d_func()->blockedImplicitSize )
{ {
QskControl* that = const_cast< QskControl* >( this ); QskControl* that = const_cast< QskControl* >( this );
that->updateImplicitSize(); that->updateImplicitSize();
@ -851,9 +884,11 @@ QSizeF QskControl::effectiveConstraint( Qt::SizeHint whichHint ) const
void QskControl::resetImplicitSize() void QskControl::resetImplicitSize()
{ {
if ( m_controlFlags & QskControl::DeferredLayout ) Q_D( QskControl );
if ( d->controlFlags & QskControl::DeferredLayout )
{ {
m_blockedImplicitSize = true; d->blockedImplicitSize = true;
layoutConstraintChanged(); layoutConstraintChanged();
} }
else else
@ -893,7 +928,7 @@ bool QskControl::event( QEvent* event )
} }
case QEvent::LayoutRequest: case QEvent::LayoutRequest:
{ {
if ( m_autoLayoutChildren ) if ( d_func()->autoLayoutChildren )
resetImplicitSize(); resetImplicitSize();
break; break;
@ -981,7 +1016,7 @@ void QskControl::changeEvent( QEvent* event )
different skinlets, that can't deal with nodes different skinlets, that can't deal with nodes
created from other skinlets created from other skinlets
*/ */
m_clearPreviousNodes = true; d_func()->clearPreviousNodes = true;
resetImplicitSize(); resetImplicitSize();
polish(); polish();
@ -1003,7 +1038,7 @@ void QskControl::componentComplete()
#if defined( QT_DEBUG ) #if defined( QT_DEBUG )
if ( qobject_cast< const QQuickBasePositioner* >( parent() ) ) if ( qobject_cast< const QQuickBasePositioner* >( parent() ) )
{ {
if ( m_controlFlags & QskControl::DeferredLayout ) if ( d_func()->controlFlags & QskControl::DeferredLayout )
{ {
qWarning( "QskControl in DeferredLayout mode under control of a positioner" ); qWarning( "QskControl in DeferredLayout mode under control of a positioner" );
} }
@ -1046,11 +1081,13 @@ void QskControl::itemChange( QQuickItem::ItemChange change,
{ {
Inherited::itemChange( change, value ); Inherited::itemChange( change, value );
Q_D( QskControl );
switch( change ) switch( change )
{ {
case QQuickItem::ItemParentHasChanged: case QQuickItem::ItemParentHasChanged:
{ {
if ( !m_explicitLocale ) if ( !d->explicitLocale )
qskResolveLocale( this ); qskResolveLocale( this );
// not necessarily correct, when parent != parentItem ??? // not necessarily correct, when parent != parentItem ???
@ -1062,22 +1099,21 @@ void QskControl::itemChange( QQuickItem::ItemChange change,
{ {
if ( value.boolValue ) if ( value.boolValue )
{ {
if ( m_blockedPolish ) if ( d->blockedPolish )
polish(); polish();
if ( m_controlFlags & QskControl::DeferredUpdate ) if ( d->controlFlags & QskControl::DeferredUpdate )
{ {
Q_D( QskControl );
if ( d->dirtyAttributes ) if ( d->dirtyAttributes )
update(); update();
} }
} }
else else
{ {
if ( m_controlFlags & QskControl::CleanupOnVisibility ) if ( d->controlFlags & QskControl::CleanupOnVisibility )
cleanupNodes(); cleanupNodes();
m_isInitiallyPainted = false; d->isInitiallyPainted = false;
} }
#if 1 #if 1
@ -1096,7 +1132,7 @@ void QskControl::itemChange( QQuickItem::ItemChange change,
{ {
if ( value.window ) if ( value.window )
{ {
if ( m_controlFlags & QskControl::DeferredUpdate ) if ( d->controlFlags & QskControl::DeferredUpdate )
qskFilterWindow( value.window ); qskFilterWindow( value.window );
} }
@ -1125,7 +1161,8 @@ void QskControl::geometryChanged(
if ( newGeometry.size() != oldGeometry.size() ) if ( newGeometry.size() != oldGeometry.size() )
{ {
if ( m_polishOnResize || m_autoLayoutChildren ) Q_D( const QskControl );
if ( d->polishOnResize || d->autoLayoutChildren )
polish(); polish();
} }
@ -1142,18 +1179,20 @@ void QskControl::layoutConstraintChanged()
void QskControl::updatePolish() void QskControl::updatePolish()
{ {
if ( m_controlFlags & QskControl::DeferredPolish ) Q_D( QskControl );
if ( d->controlFlags & QskControl::DeferredPolish )
{ {
if ( !isVisible() ) if ( !isVisible() )
{ {
m_blockedPolish = true; d->blockedPolish = true;
return; return;
} }
} }
m_blockedPolish = false; d->blockedPolish = false;
if ( m_autoLayoutChildren ) if ( d->autoLayoutChildren )
{ {
const QRectF rect = layoutRect(); const QRectF rect = layoutRect();
@ -1173,17 +1212,20 @@ void QskControl::updatePolish()
QSGNode* QskControl::updatePaintNode( QSGNode* node, UpdatePaintNodeData* data ) QSGNode* QskControl::updatePaintNode( QSGNode* node, UpdatePaintNodeData* data )
{ {
Q_UNUSED( data ); Q_UNUSED( data );
Q_ASSERT( isVisible() || !( m_controlFlags & QskControl::DeferredUpdate ) );
if ( !m_isInitiallyPainted ) Q_D( QskControl );
m_isInitiallyPainted = true;
if ( m_clearPreviousNodes ) Q_ASSERT( isVisible() || !( d->controlFlags & QskControl::DeferredUpdate ) );
if ( !d->isInitiallyPainted )
d->isInitiallyPainted = true;
if ( d->clearPreviousNodes )
{ {
delete node; delete node;
node = nullptr; node = nullptr;
m_clearPreviousNodes = false; d->clearPreviousNodes = false;
} }
if ( node == nullptr ) if ( node == nullptr )
@ -1267,7 +1309,7 @@ void QskControl::updateLayout()
void QskControl::updateImplicitSize() void QskControl::updateImplicitSize()
{ {
m_blockedImplicitSize = false; d_func()->blockedImplicitSize = false;
const auto m = margins(); const auto m = margins();
const auto dw = m.left() + m.right(); const auto dw = m.left() + m.right();
@ -1288,7 +1330,7 @@ QSizeF QskControl::contentsSizeHint() const
qreal w = -1; // no hint qreal w = -1; // no hint
qreal h = -1; qreal h = -1;
if ( m_autoLayoutChildren ) if ( d_func()->autoLayoutChildren )
{ {
for ( const auto child : childItems() ) for ( const auto child : childItems() )
{ {
@ -1310,8 +1352,7 @@ QSizeF QskControl::contentsSizeHint() const
bool QskControl::isPolishScheduled() const bool QskControl::isPolishScheduled() const
{ {
Q_D( const QskControl ); return d_func()->polishScheduled;
return d->polishScheduled;
} }
bool QskControl::isUpdateNodeScheduled() const bool QskControl::isUpdateNodeScheduled() const
@ -1324,7 +1365,7 @@ bool QskControl::isUpdateNodeScheduled() const
bool QskControl::isInitiallyPainted() const bool QskControl::isInitiallyPainted() const
{ {
return m_isInitiallyPainted; return d_func()->isInitiallyPainted;
} }
QVector< QskAspect::Subcontrol > QskControl::subControls() const QVector< QskAspect::Subcontrol > QskControl::subControls() const

View File

@ -44,16 +44,11 @@ class QSK_EXPORT QskControl : public QQuickItem, public QskResizable, public Qsk
Q_PROPERTY( bool transparentForPositioners READ isTransparentForPositioner Q_PROPERTY( bool transparentForPositioners READ isTransparentForPositioner
WRITE setTransparentForPositioner NOTIFY controlFlagsChanged FINAL ) WRITE setTransparentForPositioner NOTIFY controlFlagsChanged FINAL )
#if 0
Q_PROPERTY( Qt::FocusPolicy focusPolicy READ focusPolicy Q_PROPERTY( Qt::FocusPolicy focusPolicy READ focusPolicy
WRITE setFocusPolicy NOTIFY focusPolicyChanged FINAL ) WRITE setFocusPolicy NOTIFY focusPolicyChanged FINAL )
Q_PROPERTY( bool wheelEnabled READ isWheelEnabled Q_PROPERTY( bool wheelEnabled READ isWheelEnabled
WRITE setWheelEnabled NOTIFY wheelEnabledChanged FINAL ) WRITE setWheelEnabled NOTIFY wheelEnabledChanged FINAL )
#else
Q_PROPERTY( Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy FINAL )
Q_PROPERTY( bool wheelEnabled READ isWheelEnabled WRITE setWheelEnabled FINAL )
#endif
Q_PROPERTY( bool tabFence READ isTabFence Q_PROPERTY( bool tabFence READ isTabFence
WRITE setTabFence NOTIFY controlFlagsChanged FINAL ) WRITE setTabFence NOTIFY controlFlagsChanged FINAL )
@ -171,8 +166,8 @@ public:
Q_SIGNALS: Q_SIGNALS:
void localeChanged( const QLocale& ); void localeChanged( const QLocale& );
void controlFlagsChanged(); void controlFlagsChanged();
// ### No additional signals can be added without finding a runtime void focusPolicyChanged();
// metaobject replacement solution for the wrapped QQuickItem subclasses. void wheelEnabledChanged();
public Q_SLOTS: public Q_SLOTS:
void setGeometry( const QRectF& ); void setGeometry( const QRectF& );
@ -231,29 +226,6 @@ private:
void setupImplicitSizeConnections( bool ); void setupImplicitSizeConnections( bool );
private: private:
friend bool qskInheritLocale( QskControl*, const QLocale& );
friend void qskResolveLocale( QskControl* );
QLocale m_locale;
quint16 m_controlFlags;
quint16 m_controlFlagsMask;
bool m_explicitLocale : 1;
bool m_autoFillBackground : 1;
bool m_autoLayoutChildren : 1;
bool m_polishOnResize : 1;
bool m_blockedPolish : 1;
bool m_blockedImplicitSize : 1;
bool m_clearPreviousNodes : 1;
bool m_isInitiallyPainted : 1;
uint m_focusPolicy : 4;
bool m_isWheelEnabled;
Q_DECLARE_PRIVATE( QskControl ) Q_DECLARE_PRIVATE( QskControl )
}; };