diff --git a/clients/aurorae/src/aurorae.cpp b/clients/aurorae/src/aurorae.cpp index e07a84e574..7ec9a820da 100644 --- a/clients/aurorae/src/aurorae.cpp +++ b/clients/aurorae/src/aurorae.cpp @@ -21,6 +21,7 @@ along with this program. If not, see . #include #include +#include #include #include #include @@ -235,6 +236,7 @@ AuroraeClient::AuroraeClient(KDecorationBridge *bridge, KDecorationFactory *fact : KDecoration(bridge, factory) , m_view(NULL) , m_item(AuroraeFactory::instance()->createQmlDecoration(this)) + , m_mutex(new QMutex(QMutex::Recursive)) { connect(AuroraeFactory::instance(), SIGNAL(buttonsChanged()), SIGNAL(buttonsChanged())); connect(AuroraeFactory::instance(), SIGNAL(configChanged()), SIGNAL(configChanged())); @@ -271,6 +273,7 @@ void AuroraeClient::init() m_view->setRenderTarget(m_fbo.data()); }); connect(m_view, &QQuickWindow::afterRendering, [this]{ + QMutexLocker locker(m_mutex.data()); m_buffer = m_fbo->toImage(); }); connect(m_view, &QQuickWindow::afterRendering, this, @@ -551,6 +554,7 @@ bool AuroraeClient::animationsSupported() const void AuroraeClient::render(QPaintDevice *device, const QRegion &sourceRegion) { + QMutexLocker locker(m_mutex.data()); QPainter painter(device); painter.setClipRegion(sourceRegion); painter.drawImage(QPoint(0, 0), m_buffer); diff --git a/clients/aurorae/src/aurorae.h b/clients/aurorae/src/aurorae.h index f164b16702..1d105bd6b7 100644 --- a/clients/aurorae/src/aurorae.h +++ b/clients/aurorae/src/aurorae.h @@ -23,6 +23,7 @@ along with this program. If not, see . #include #include +class QMutex; class QOpenGLFramebufferObject; class QQmlComponent; class QQmlEngine; @@ -160,6 +161,7 @@ private: QScopedPointer m_item; QScopedPointer m_fbo; QImage m_buffer; + QScopedPointer m_mutex; }; }