using a renderjob for restoring the componentComplete flags

This commit is contained in:
Uwe Rathmann 2018-04-19 09:33:24 +02:00
parent 6e2e80d2de
commit ddbc5db920
2 changed files with 23 additions and 13 deletions

View File

@ -51,6 +51,26 @@ static inline void qskBlockDirty( QQuickItem* item, bool 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 ):
QObject( parent )
{
@ -98,19 +118,10 @@ void QskDirtyItemFilter::beforeSynchronizing( QQuickWindow* window )
to avoid having all items in the dirtyList.
*/
qskBlockDirty( window->contentItem(), true );
connect( window, &QQuickWindow::afterSynchronizing,
this, &QskDirtyItemFilter::resetBlockedDirty );
}
}
void QskDirtyItemFilter::resetBlockedDirty()
{
auto window = qobject_cast< QQuickWindow* >( sender() );
Q_ASSERT( window );
qskBlockDirty( window->contentItem(), false );
disconnect( window, &QQuickWindow::afterSynchronizing,
this, &QskDirtyItemFilter::resetBlockedDirty );
window->scheduleRenderJob( new ResetBlockedDirtyJob( window ),
QQuickWindow::AfterSynchronizingStage );
}
}
void QskDirtyItemFilter::filterDirtyList( QQuickWindow* window,

View File

@ -29,7 +29,6 @@ public:
private:
void beforeSynchronizing( QQuickWindow* );
void resetBlockedDirty();
QSet< QObject* > m_windows;
};