diff --git a/plugins/kdecorations/aurorae/src/aurorae.cpp b/plugins/kdecorations/aurorae/src/aurorae.cpp index 4c5879be2e..15266b7987 100644 --- a/plugins/kdecorations/aurorae/src/aurorae.cpp +++ b/plugins/kdecorations/aurorae/src/aurorae.cpp @@ -270,8 +270,6 @@ Decoration::~Decoration() if (m_context) { m_context->makeCurrent(m_offscreenSurface.data()); - delete m_renderControl; - delete m_view.data(); m_fbo.reset(); delete m_item; @@ -324,8 +322,8 @@ void Decoration::init() m_item->setParentItem(visualParent.value()); visualParent.value()->setProperty("drawBackground", false); } else { - m_renderControl = new QQuickRenderControl(this); - m_view = new QQuickWindow(m_renderControl); + m_renderControl.reset(new QQuickRenderControl); + m_view = new QQuickWindow(m_renderControl.data()); bool usingGL = m_view->rendererInterface()->graphicsApi() == QSGRendererInterface::OpenGL; m_view->setColor(Qt::transparent); m_view->setFlags(Qt::FramelessWindowHint); @@ -392,8 +390,8 @@ void Decoration::init() } m_updateTimer->start(); }; - connect(m_renderControl, &QQuickRenderControl::renderRequested, this, requestUpdate); - connect(m_renderControl, &QQuickRenderControl::sceneChanged, this, requestUpdate); + connect(m_renderControl.data(), &QQuickRenderControl::renderRequested, this, requestUpdate); + connect(m_renderControl.data(), &QQuickRenderControl::sceneChanged, this, requestUpdate); m_item->setParentItem(m_view->contentItem()); diff --git a/plugins/kdecorations/aurorae/src/aurorae.h b/plugins/kdecorations/aurorae/src/aurorae.h index 3b280990e6..80e477ba04 100644 --- a/plugins/kdecorations/aurorae/src/aurorae.h +++ b/plugins/kdecorations/aurorae/src/aurorae.h @@ -87,7 +87,11 @@ private: KWin::Borders *m_extendedBorders; KWin::Borders *m_padding; QString m_themeName; - QQuickRenderControl *m_renderControl = nullptr; + + //workaround QtBug-68997 + //deleting of a RenderControl/controlled window triggers deletion of other queued deleted items + //deleting this queued means we know we're not processing anything else at the same time and should minimise the damage + QScopedPointer m_renderControl; QScopedPointer m_updateTimer; QScopedPointer m_context; QScopedPointer m_offscreenSurface;