From ddbc5db920ff4408f4bf4dc9431887ef61b62081 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Thu, 19 Apr 2018 09:33:24 +0200 Subject: [PATCH] using a renderjob for restoring the componentComplete flags --- src/controls/QskDirtyItemFilter.cpp | 35 +++++++++++++++++++---------- src/controls/QskDirtyItemFilter.h | 1 - 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/controls/QskDirtyItemFilter.cpp b/src/controls/QskDirtyItemFilter.cpp index d5045133..af8ba2ec 100644 --- a/src/controls/QskDirtyItemFilter.cpp +++ b/src/controls/QskDirtyItemFilter.cpp @@ -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,21 +118,12 @@ void QskDirtyItemFilter::beforeSynchronizing( QQuickWindow* window ) to avoid having all items in the dirtyList. */ 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, bool ( *isBlocked )( const QQuickItem* ) ) { diff --git a/src/controls/QskDirtyItemFilter.h b/src/controls/QskDirtyItemFilter.h index d5e6156e..8e193f80 100644 --- a/src/controls/QskDirtyItemFilter.h +++ b/src/controls/QskDirtyItemFilter.h @@ -29,7 +29,6 @@ public: private: void beforeSynchronizing( QQuickWindow* ); - void resetBlockedDirty(); QSet< QObject* > m_windows; };