using a renderjob for restoring the componentComplete flags
This commit is contained in:
parent
6e2e80d2de
commit
ddbc5db920
@ -51,6 +51,26 @@ static inline void qskBlockDirty( QQuickItem* item, bool on )
|
|||||||
qskBlockDirty( child, on );
|
qskBlockDirty( child, on );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class ResetBlockedDirtyJob final : public QRunnable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline ResetBlockedDirtyJob( QQuickWindow* window ):
|
||||||
|
m_window( window )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void run() override final
|
||||||
|
{
|
||||||
|
qskBlockDirty( m_window->contentItem(), false );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const QQuickWindow* m_window;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
QskDirtyItemFilter::QskDirtyItemFilter( QObject* parent ):
|
QskDirtyItemFilter::QskDirtyItemFilter( QObject* parent ):
|
||||||
QObject( parent )
|
QObject( parent )
|
||||||
{
|
{
|
||||||
@ -98,21 +118,12 @@ void QskDirtyItemFilter::beforeSynchronizing( QQuickWindow* window )
|
|||||||
to avoid having all items in the dirtyList.
|
to avoid having all items in the dirtyList.
|
||||||
*/
|
*/
|
||||||
qskBlockDirty( window->contentItem(), true );
|
qskBlockDirty( window->contentItem(), true );
|
||||||
connect( window, &QQuickWindow::afterSynchronizing,
|
|
||||||
this, &QskDirtyItemFilter::resetBlockedDirty );
|
window->scheduleRenderJob( new ResetBlockedDirtyJob( window ),
|
||||||
|
QQuickWindow::AfterSynchronizingStage );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskDirtyItemFilter::resetBlockedDirty()
|
|
||||||
{
|
|
||||||
auto window = qobject_cast< QQuickWindow* >( sender() );
|
|
||||||
Q_ASSERT( window );
|
|
||||||
|
|
||||||
qskBlockDirty( window->contentItem(), false );
|
|
||||||
disconnect( window, &QQuickWindow::afterSynchronizing,
|
|
||||||
this, &QskDirtyItemFilter::resetBlockedDirty );
|
|
||||||
}
|
|
||||||
|
|
||||||
void QskDirtyItemFilter::filterDirtyList( QQuickWindow* window,
|
void QskDirtyItemFilter::filterDirtyList( QQuickWindow* window,
|
||||||
bool ( *isBlocked )( const QQuickItem* ) )
|
bool ( *isBlocked )( const QQuickItem* ) )
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void beforeSynchronizing( QQuickWindow* );
|
void beforeSynchronizing( QQuickWindow* );
|
||||||
void resetBlockedDirty();
|
|
||||||
|
|
||||||
QSet< QObject* > m_windows;
|
QSet< QObject* > m_windows;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user