summaryrefslogtreecommitdiff
path: root/src/desktop/Subsurface.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-02-01 15:08:30 +0000
committerVaxry <vaxry@vaxry.net>2025-02-01 15:08:30 +0000
commitc6f672257bd2ae98f4fd7a6a273b2d1d3e944baa (patch)
tree3b331626749173588719ac4303dd347af0820e5e /src/desktop/Subsurface.cpp
parent5b43c106bd1cde9ac0b5626130890cde4de0b245 (diff)
desktop: move popup and subsurface ctors to factories
makes sure m_pSelf is set before we do anything like possibly adding children fixes #9275 supersedes #9276
Diffstat (limited to 'src/desktop/Subsurface.cpp')
-rw-r--r--src/desktop/Subsurface.cpp65
1 files changed, 41 insertions, 24 deletions
diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp
index 1d938f39..33ee3553 100644
--- a/src/desktop/Subsurface.cpp
+++ b/src/desktop/Subsurface.cpp
@@ -7,28 +7,45 @@
#include "../render/Renderer.hpp"
#include "../managers/input/InputManager.hpp"
-CSubsurface::CSubsurface(PHLWINDOW pOwner) : m_pWindowParent(pOwner) {
- initSignals();
- initExistingSubsurfaces(pOwner->m_pWLSurface->resource());
-}
-
-CSubsurface::CSubsurface(WP<CPopup> pOwner) : m_pPopupParent(pOwner) {
- initSignals();
- initExistingSubsurfaces(pOwner->m_pWLSurface->resource());
-}
-
-CSubsurface::CSubsurface(SP<CWLSubsurfaceResource> pSubsurface, PHLWINDOW pOwner) : m_pSubsurface(pSubsurface), m_pWindowParent(pOwner) {
- m_pWLSurface = CWLSurface::create();
- m_pWLSurface->assign(pSubsurface->surface.lock(), this);
- initSignals();
- initExistingSubsurfaces(pSubsurface->surface.lock());
-}
-
-CSubsurface::CSubsurface(SP<CWLSubsurfaceResource> pSubsurface, WP<CPopup> pOwner) : m_pSubsurface(pSubsurface), m_pPopupParent(pOwner) {
- m_pWLSurface = CWLSurface::create();
- m_pWLSurface->assign(pSubsurface->surface.lock(), this);
- initSignals();
- initExistingSubsurfaces(pSubsurface->surface.lock());
+UP<CSubsurface> CSubsurface::create(PHLWINDOW pOwner) {
+ auto subsurface = UP<CSubsurface>(new CSubsurface());
+ subsurface->m_pWindowParent = pOwner;
+ subsurface->m_pSelf = subsurface;
+
+ subsurface->initSignals();
+ subsurface->initExistingSubsurfaces(pOwner->m_pWLSurface->resource());
+ return subsurface;
+}
+
+UP<CSubsurface> CSubsurface::create(WP<CPopup> pOwner) {
+ auto subsurface = UP<CSubsurface>(new CSubsurface());
+ subsurface->m_pPopupParent = pOwner;
+ subsurface->m_pSelf = subsurface;
+ subsurface->initSignals();
+ subsurface->initExistingSubsurfaces(pOwner->m_pWLSurface->resource());
+ return subsurface;
+}
+
+UP<CSubsurface> CSubsurface::create(SP<CWLSubsurfaceResource> pSubsurface, PHLWINDOW pOwner) {
+ auto subsurface = UP<CSubsurface>(new CSubsurface());
+ subsurface->m_pWindowParent = pOwner;
+ subsurface->m_pSelf = subsurface;
+ subsurface->m_pWLSurface = CWLSurface::create();
+ subsurface->m_pWLSurface->assign(pSubsurface->surface.lock(), subsurface.get());
+ subsurface->initSignals();
+ subsurface->initExistingSubsurfaces(pSubsurface->surface.lock());
+ return subsurface;
+}
+
+UP<CSubsurface> CSubsurface::create(SP<CWLSubsurfaceResource> pSubsurface, WP<CPopup> pOwner) {
+ auto subsurface = UP<CSubsurface>(new CSubsurface());
+ subsurface->m_pPopupParent = pOwner;
+ subsurface->m_pSelf = subsurface;
+ subsurface->m_pWLSurface = CWLSurface::create();
+ subsurface->m_pWLSurface->assign(pSubsurface->surface.lock(), subsurface.get());
+ subsurface->initSignals();
+ subsurface->initExistingSubsurfaces(pSubsurface->surface.lock());
+ return subsurface;
}
void CSubsurface::initSignals() {
@@ -131,9 +148,9 @@ void CSubsurface::onNewSubsurface(SP<CWLSubsurfaceResource> pSubsurface) {
WP<CSubsurface> PSUBSURFACE;
if (!m_pWindowParent.expired())
- PSUBSURFACE = m_vChildren.emplace_back(makeUnique<CSubsurface>(pSubsurface, m_pWindowParent.lock()));
+ PSUBSURFACE = m_vChildren.emplace_back(CSubsurface::create(pSubsurface, m_pWindowParent.lock()));
else if (m_pPopupParent)
- PSUBSURFACE = m_vChildren.emplace_back(makeUnique<CSubsurface>(pSubsurface, m_pPopupParent));
+ PSUBSURFACE = m_vChildren.emplace_back(CSubsurface::create(pSubsurface, m_pPopupParent));
PSUBSURFACE->m_pSelf = PSUBSURFACE;