From b22317458c5a077a480e6ed8f157ea409985a468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Mon, 11 Aug 2014 11:41:08 +0200 Subject: [PATCH] Override ::reparent in X11Renderer Required to stop and disconnect the timer. Otherwise it's possible that the render is invoked after the Client got destroyed. This happened for example with e.g. opening Kickoff. --- decorations/decorationrenderer.cpp | 10 ++++++++++ decorations/decorationrenderer.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/decorations/decorationrenderer.cpp b/decorations/decorationrenderer.cpp index ad9e46f966..6019a1392d 100644 --- a/decorations/decorationrenderer.cpp +++ b/decorations/decorationrenderer.cpp @@ -100,6 +100,16 @@ X11Renderer::~X11Renderer() } } +void X11Renderer::reparent(Deleted *deleted) +{ + if (m_scheduleTimer->isActive()) { + m_scheduleTimer->stop(); + disconnect(m_scheduleTimer, &QTimer::timeout, this, &X11Renderer::render); + disconnect(this, &Renderer::renderScheduled, m_scheduleTimer, static_cast(&QTimer::start)); + } + Renderer::reparent(deleted); +} + void X11Renderer::render() { const QRegion scheduled = getScheduled(); diff --git a/decorations/decorationrenderer.h b/decorations/decorationrenderer.h index 4b842d71f8..e216e2687a 100644 --- a/decorations/decorationrenderer.h +++ b/decorations/decorationrenderer.h @@ -89,6 +89,8 @@ public: explicit X11Renderer(DecoratedClientImpl *client); virtual ~X11Renderer(); + void reparent(Deleted *deleted) override; + protected: void render() override;