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;
};
}