diff --git a/src/scene/cursoritem.cpp b/src/scene/cursoritem.cpp index e438b403aa..6c9bfdcfff 100644 --- a/src/scene/cursoritem.cpp +++ b/src/scene/cursoritem.cpp @@ -54,7 +54,7 @@ void CursorItem::setImage(const QImage &image) m_surfaceItem.reset(); if (!m_imageItem) { - m_imageItem.reset(scene()->renderer()->createImageItem(scene(), this)); + m_imageItem = scene()->renderer()->createImageItem(scene(), this); } m_imageItem->setImage(image); m_imageItem->setSize(image.size() / image.devicePixelRatio()); diff --git a/src/scene/decorationitem.cpp b/src/scene/decorationitem.cpp index 2d8cc4f8e6..412dc52143 100644 --- a/src/scene/decorationitem.cpp +++ b/src/scene/decorationitem.cpp @@ -91,7 +91,7 @@ DecorationItem::DecorationItem(KDecoration2::Decoration *decoration, Window *win : Item(scene, parent) , m_window(window) { - m_renderer.reset(Compositor::self()->scene()->createDecorationRenderer(window->decoratedClient())); + m_renderer = Compositor::self()->scene()->createDecorationRenderer(window->decoratedClient()); connect(window, &Window::frameGeometryChanged, this, &DecorationItem::handleFrameGeometryChanged); diff --git a/src/scene/itemrenderer.h b/src/scene/itemrenderer.h index 389adf008c..543fb6f517 100644 --- a/src/scene/itemrenderer.h +++ b/src/scene/itemrenderer.h @@ -9,6 +9,7 @@ #include #include +#include class QPainter; @@ -36,7 +37,7 @@ public: virtual void renderBackground(const RenderTarget &renderTarget, const RenderViewport &viewport, const QRegion ®ion) = 0; virtual void renderItem(const RenderTarget &renderTarget, const RenderViewport &viewport, Item *item, int mask, const QRegion ®ion, const WindowPaintData &data) = 0; - virtual ImageItem *createImageItem(Scene *scene, Item *parent = nullptr) = 0; + virtual std::unique_ptr createImageItem(Scene *scene, Item *parent = nullptr) = 0; }; } // namespace KWin diff --git a/src/scene/itemrenderer_opengl.cpp b/src/scene/itemrenderer_opengl.cpp index 7a69c57544..0363ee09ac 100644 --- a/src/scene/itemrenderer_opengl.cpp +++ b/src/scene/itemrenderer_opengl.cpp @@ -26,9 +26,9 @@ ItemRendererOpenGL::ItemRendererOpenGL() } } -ImageItem *ItemRendererOpenGL::createImageItem(Scene *scene, Item *parent) +std::unique_ptr ItemRendererOpenGL::createImageItem(Scene *scene, Item *parent) { - return new ImageItemOpenGL(scene, parent); + return std::make_unique(scene, parent); } void ItemRendererOpenGL::beginFrame(const RenderTarget &renderTarget, const RenderViewport &viewport) diff --git a/src/scene/itemrenderer_opengl.h b/src/scene/itemrenderer_opengl.h index 9ca407a155..2de3786343 100644 --- a/src/scene/itemrenderer_opengl.h +++ b/src/scene/itemrenderer_opengl.h @@ -48,7 +48,7 @@ public: void renderBackground(const RenderTarget &renderTarget, const RenderViewport &viewport, const QRegion ®ion) override; void renderItem(const RenderTarget &renderTarget, const RenderViewport &viewport, Item *item, int mask, const QRegion ®ion, const WindowPaintData &data) override; - ImageItem *createImageItem(Scene *scene, Item *parent = nullptr) override; + std::unique_ptr createImageItem(Scene *scene, Item *parent = nullptr) override; private: QVector4D modulate(float opacity, float brightness) const; diff --git a/src/scene/itemrenderer_qpainter.cpp b/src/scene/itemrenderer_qpainter.cpp index ec30e14c0a..54fc101fa6 100644 --- a/src/scene/itemrenderer_qpainter.cpp +++ b/src/scene/itemrenderer_qpainter.cpp @@ -24,9 +24,9 @@ ItemRendererQPainter::~ItemRendererQPainter() { } -ImageItem *ItemRendererQPainter::createImageItem(Scene *scene, Item *parent) +std::unique_ptr ItemRendererQPainter::createImageItem(Scene *scene, Item *parent) { - return new ImageItem(scene, parent); + return std::make_unique(scene, parent); } QPainter *ItemRendererQPainter::painter() const diff --git a/src/scene/itemrenderer_qpainter.h b/src/scene/itemrenderer_qpainter.h index 049e5264a3..188fa55d1c 100644 --- a/src/scene/itemrenderer_qpainter.h +++ b/src/scene/itemrenderer_qpainter.h @@ -30,7 +30,7 @@ public: void renderBackground(const RenderTarget &renderTarget, const RenderViewport &viewport, const QRegion ®ion) override; void renderItem(const RenderTarget &renderTarget, const RenderViewport &viewport, Item *item, int mask, const QRegion ®ion, const WindowPaintData &data) override; - ImageItem *createImageItem(Scene *scene, Item *parent = nullptr) override; + std::unique_ptr createImageItem(Scene *scene, Item *parent = nullptr) override; private: void renderSurfaceItem(QPainter *painter, SurfaceItem *surfaceItem) const; diff --git a/src/scene/surfaceitem_wayland.cpp b/src/scene/surfaceitem_wayland.cpp index 90f5ea5fff..c6be06e951 100644 --- a/src/scene/surfaceitem_wayland.cpp +++ b/src/scene/surfaceitem_wayland.cpp @@ -116,18 +116,17 @@ void SurfaceItemWayland::handleSurfaceCommitted() SurfaceItemWayland *SurfaceItemWayland::getOrCreateSubSurfaceItem(KWaylandServer::SubSurfaceInterface *child) { - SurfaceItemWayland *&item = m_subsurfaces[child]; + auto &item = m_subsurfaces[child]; if (!item) { - item = new SurfaceItemWayland(child->surface(), scene()); - item->setParent(this); + item = std::make_unique(child->surface(), scene()); item->setParentItem(this); } - return item; + return item.get(); } void SurfaceItemWayland::handleChildSubSurfaceRemoved(KWaylandServer::SubSurfaceInterface *child) { - delete m_subsurfaces.take(child); + m_subsurfaces.erase(child); } void SurfaceItemWayland::handleChildSubSurfacesChanged() diff --git a/src/scene/surfaceitem_wayland.h b/src/scene/surfaceitem_wayland.h index 876b24ddaf..f3b54b6f35 100644 --- a/src/scene/surfaceitem_wayland.h +++ b/src/scene/surfaceitem_wayland.h @@ -8,6 +8,8 @@ #include "scene/surfaceitem.h" +#include + namespace KWaylandServer { class SubSurfaceInterface; @@ -56,7 +58,7 @@ private: SurfaceItemWayland *getOrCreateSubSurfaceItem(KWaylandServer::SubSurfaceInterface *s); QPointer m_surface; - QHash m_subsurfaces; + std::unordered_map> m_subsurfaces; }; class KWIN_EXPORT SurfacePixmapWayland final : public SurfacePixmap diff --git a/src/scene/windowitem.cpp b/src/scene/windowitem.cpp index 964310084d..61564ad87b 100644 --- a/src/scene/windowitem.cpp +++ b/src/scene/windowitem.cpp @@ -192,15 +192,15 @@ void WindowItem::addSurfaceItemDamageConnects(Item *item) } } -void WindowItem::updateSurfaceItem(SurfaceItem *surfaceItem) +void WindowItem::updateSurfaceItem(std::unique_ptr &&surfaceItem) { - m_surfaceItem.reset(surfaceItem); + m_surfaceItem = std::move(surfaceItem); if (m_surfaceItem) { connect(m_window, &Window::shadeChanged, this, &WindowItem::updateSurfaceVisibility); connect(m_window, &Window::bufferGeometryChanged, this, &WindowItem::updateSurfacePosition); connect(m_window, &Window::frameGeometryChanged, this, &WindowItem::updateSurfacePosition); - addSurfaceItemDamageConnects(surfaceItem); + addSurfaceItemDamageConnects(m_surfaceItem.get()); updateSurfacePosition(); updateSurfaceVisibility(); @@ -229,7 +229,7 @@ void WindowItem::updateShadowItem() Shadow *shadow = m_window->shadow(); if (shadow) { if (!m_shadowItem || m_shadowItem->shadow() != shadow) { - m_shadowItem.reset(new ShadowItem(shadow, m_window, scene(), this)); + m_shadowItem = std::make_unique(shadow, m_window, scene(), this); } if (m_decorationItem) { m_shadowItem->stackBefore(m_decorationItem.get()); @@ -248,7 +248,7 @@ void WindowItem::updateDecorationItem() return; } if (m_window->decoration()) { - m_decorationItem.reset(new DecorationItem(m_window->decoration(), m_window, scene(), this)); + m_decorationItem = std::make_unique(m_window->decoration(), m_window, scene(), this); if (m_shadowItem) { m_decorationItem->stackAfter(m_shadowItem.get()); } else if (m_surfaceItem) { @@ -293,13 +293,13 @@ void WindowItemX11::initialize() { switch (kwinApp()->operationMode()) { case Application::OperationModeX11: - updateSurfaceItem(new SurfaceItemX11(static_cast(window()), scene(), this)); + updateSurfaceItem(std::make_unique(static_cast(window()), scene(), this)); break; case Application::OperationModeXwayland: if (!window()->surface()) { updateSurfaceItem(nullptr); } else { - updateSurfaceItem(new SurfaceItemXwayland(static_cast(window()), scene(), this)); + updateSurfaceItem(std::make_unique(static_cast(window()), scene(), this)); } break; case Application::OperationModeWaylandOnly: @@ -310,13 +310,13 @@ void WindowItemX11::initialize() WindowItemWayland::WindowItemWayland(Window *window, Scene *scene, Item *parent) : WindowItem(window, scene, parent) { - updateSurfaceItem(new SurfaceItemWayland(window->surface(), scene, this)); + updateSurfaceItem(std::make_unique(window->surface(), scene, this)); } WindowItemInternal::WindowItemInternal(InternalWindow *window, Scene *scene, Item *parent) : WindowItem(window, scene, parent) { - updateSurfaceItem(new SurfaceItemInternal(window, scene, this)); + updateSurfaceItem(std::make_unique(window, scene, this)); } } // namespace KWin diff --git a/src/scene/windowitem.h b/src/scene/windowitem.h index 0a992a39c7..a0e40ee553 100644 --- a/src/scene/windowitem.h +++ b/src/scene/windowitem.h @@ -56,7 +56,7 @@ public: protected: explicit WindowItem(Window *window, Scene *scene, Item *parent = nullptr); - void updateSurfaceItem(SurfaceItem *surfaceItem); + void updateSurfaceItem(std::unique_ptr &&surfaceItem); private Q_SLOTS: void updateDecorationItem(); diff --git a/src/scene/workspacescene.h b/src/scene/workspacescene.h index c67ad3fdee..4512c3c84f 100644 --- a/src/scene/workspacescene.h +++ b/src/scene/workspacescene.h @@ -65,7 +65,7 @@ public: virtual void doneOpenGLContextCurrent(); virtual bool supportsNativeFence() const; - virtual DecorationRenderer *createDecorationRenderer(Decoration::DecoratedClientImpl *) = 0; + virtual std::unique_ptr createDecorationRenderer(Decoration::DecoratedClientImpl *) = 0; virtual std::unique_ptr createShadowTextureProvider(Shadow *shadow) = 0; /** diff --git a/src/scene/workspacescene_opengl.cpp b/src/scene/workspacescene_opengl.cpp index 4e8d6f4487..419e0d9783 100644 --- a/src/scene/workspacescene_opengl.cpp +++ b/src/scene/workspacescene_opengl.cpp @@ -70,9 +70,9 @@ bool WorkspaceSceneOpenGL::supportsNativeFence() const return m_backend->supportsNativeFence(); } -DecorationRenderer *WorkspaceSceneOpenGL::createDecorationRenderer(Decoration::DecoratedClientImpl *impl) +std::unique_ptr WorkspaceSceneOpenGL::createDecorationRenderer(Decoration::DecoratedClientImpl *impl) { - return new SceneOpenGLDecorationRenderer(impl); + return std::make_unique(impl); } std::unique_ptr WorkspaceSceneOpenGL::createShadowTextureProvider(Shadow *shadow) diff --git a/src/scene/workspacescene_opengl.h b/src/scene/workspacescene_opengl.h index 174ba2cb3d..5bd9a80f63 100644 --- a/src/scene/workspacescene_opengl.h +++ b/src/scene/workspacescene_opengl.h @@ -33,7 +33,7 @@ public: bool makeOpenGLContextCurrent() override; void doneOpenGLContextCurrent() override; bool supportsNativeFence() const override; - DecorationRenderer *createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override; + std::unique_ptr createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override; std::unique_ptr createShadowTextureProvider(Shadow *shadow) override; bool animationsSupported() const override; diff --git a/src/scene/workspacescene_qpainter.cpp b/src/scene/workspacescene_qpainter.cpp index c5d74592d1..a4ba5ad44d 100644 --- a/src/scene/workspacescene_qpainter.cpp +++ b/src/scene/workspacescene_qpainter.cpp @@ -36,9 +36,9 @@ WorkspaceSceneQPainter::~WorkspaceSceneQPainter() { } -DecorationRenderer *WorkspaceSceneQPainter::createDecorationRenderer(Decoration::DecoratedClientImpl *impl) +std::unique_ptr WorkspaceSceneQPainter::createDecorationRenderer(Decoration::DecoratedClientImpl *impl) { - return new SceneQPainterDecorationRenderer(impl); + return std::make_unique(impl); } std::unique_ptr WorkspaceSceneQPainter::createShadowTextureProvider(Shadow *shadow) diff --git a/src/scene/workspacescene_qpainter.h b/src/scene/workspacescene_qpainter.h index 0535033e81..68ad699674 100644 --- a/src/scene/workspacescene_qpainter.h +++ b/src/scene/workspacescene_qpainter.h @@ -25,7 +25,7 @@ public: explicit WorkspaceSceneQPainter(QPainterBackend *backend); ~WorkspaceSceneQPainter() override; - DecorationRenderer *createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override; + std::unique_ptr createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override; std::unique_ptr createShadowTextureProvider(Shadow *shadow) override; bool animationsSupported() const override