diff --git a/effects/screenedge/screenedgeeffect.h b/effects/screenedge/screenedgeeffect.h --- a/effects/screenedge/screenedgeeffect.h +++ b/effects/screenedge/screenedgeeffect.h @@ -48,13 +48,14 @@ void edgeApproaching(ElectricBorder border, qreal factor, const QRect &geometry); void cleanup(); private: + void ensureGlowSvg(); Glow *createGlow(ElectricBorder border, qreal factor, const QRect &geometry); template T *createCornerGlow(ElectricBorder border); template T *createEdgeGlow(ElectricBorder border, const QSize &size); - QSize cornerGlowSize(ElectricBorder border) const; - Plasma::Svg *m_glow; + QSize cornerGlowSize(ElectricBorder border); + Plasma::Svg *m_glow = nullptr; QHash m_borders; QTimer *m_cleanupTimer; }; diff --git a/effects/screenedge/screenedgeeffect.cpp b/effects/screenedge/screenedgeeffect.cpp --- a/effects/screenedge/screenedgeeffect.cpp +++ b/effects/screenedge/screenedgeeffect.cpp @@ -37,10 +37,8 @@ ScreenEdgeEffect::ScreenEdgeEffect() : Effect() - , m_glow(new Plasma::Svg(this)) , m_cleanupTimer(new QTimer(this)) { - m_glow->setImagePath(QStringLiteral("widgets/glowbar")); connect(effects, SIGNAL(screenEdgeApproaching(ElectricBorder,qreal,QRect)), SLOT(edgeApproaching(ElectricBorder,qreal,QRect))); m_cleanupTimer->setInterval(5000); m_cleanupTimer->setSingleShot(true); @@ -59,6 +57,14 @@ cleanup(); } +void ScreenEdgeEffect::ensureGlowSvg() +{ + if (!m_glow) { + m_glow = new Plasma::Svg(this); + m_glow->setImagePath(QStringLiteral("widgets/glowbar")); + } +} + void ScreenEdgeEffect::cleanup() { for (QHash::iterator it = m_borders.begin(); @@ -263,6 +269,8 @@ template T *ScreenEdgeEffect::createCornerGlow(ElectricBorder border) { + ensureGlowSvg(); + switch (border) { case ElectricTopLeft: return new T(m_glow->pixmap(QStringLiteral("bottomright")).toImage()); @@ -277,8 +285,10 @@ } } -QSize ScreenEdgeEffect::cornerGlowSize(ElectricBorder border) const +QSize ScreenEdgeEffect::cornerGlowSize(ElectricBorder border) { + ensureGlowSvg(); + switch (border) { case ElectricTopLeft: return m_glow->elementSize(QStringLiteral("bottomright")); @@ -296,6 +306,8 @@ template T *ScreenEdgeEffect::createEdgeGlow(ElectricBorder border, const QSize &size) { + ensureGlowSvg(); + QPoint pixmapPosition(0, 0); QPixmap l, r, c; switch (border) {