diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-07-23 15:48:08 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-07-23 15:48:08 +0200 |
| commit | 1626707b7f4fd3d2b313e78cb3a41783f072f73b (patch) | |
| tree | d03ac32a9c898f38216f191949b8c5b2ff89044e /src/events/Layers.cpp | |
| parent | 72700bf9dc17d1d145130bd53b436a80e1c971d2 (diff) | |
make layerSurfaces into RAII
Diffstat (limited to 'src/events/Layers.cpp')
| -rw-r--r-- | src/events/Layers.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/events/Layers.cpp b/src/events/Layers.cpp index 431ebef1..f69b9127 100644 --- a/src/events/Layers.cpp +++ b/src/events/Layers.cpp @@ -32,7 +32,7 @@ void Events::listener_newLayerSurface(wl_listener* listener, void* data) { } const auto PMONITOR = (SMonitor*)g_pCompositor->getMonitorFromOutput(WLRLAYERSURFACE->output); - SLayerSurface* layerSurface = PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].emplace_back(new SLayerSurface()); + SLayerSurface* layerSurface = PMONITOR->m_aLayerSurfaceLists[WLRLAYERSURFACE->pending.layer].emplace_back(std::make_unique<SLayerSurface>()).get(); layerSurface->szNamespace = WLRLAYERSURFACE->_namespace; @@ -109,8 +109,13 @@ void Events::listener_mapLayerSurface(void* owner, void* data) { if ((uint64_t)layersurface->monitorID != PMONITOR->ID) { const auto POLDMON = g_pCompositor->getMonitorFromID(layersurface->monitorID); - POLDMON->m_aLayerSurfaceLists[layersurface->layer].remove(layersurface); - PMONITOR->m_aLayerSurfaceLists[layersurface->layer].push_back(layersurface); + for (auto it = POLDMON->m_aLayerSurfaceLists[layersurface->layer].begin(); it != POLDMON->m_aLayerSurfaceLists[layersurface->layer].end(); it++) { + if (it->get() == layersurface) { + PMONITOR->m_aLayerSurfaceLists[layersurface->layer].emplace_back(std::move(*it)); + POLDMON->m_aLayerSurfaceLists[layersurface->layer].erase(it); + break; + } + } layersurface->monitorID = PMONITOR->ID; g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID); g_pHyprRenderer->arrangeLayersForMonitor(POLDMON->ID); @@ -197,8 +202,15 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { // fix if it changed its mon if ((uint64_t)layersurface->monitorID != PMONITOR->ID) { const auto POLDMON = g_pCompositor->getMonitorFromID(layersurface->monitorID); - POLDMON->m_aLayerSurfaceLists[layersurface->layer].remove(layersurface); - PMONITOR->m_aLayerSurfaceLists[layersurface->layer].push_back(layersurface); + + for (auto it = POLDMON->m_aLayerSurfaceLists[layersurface->layer].begin(); it != POLDMON->m_aLayerSurfaceLists[layersurface->layer].end(); it++) { + if (it->get() == layersurface) { + PMONITOR->m_aLayerSurfaceLists[layersurface->layer].emplace_back(std::move(*it)); + POLDMON->m_aLayerSurfaceLists[layersurface->layer].erase(it); + break; + } + } + layersurface->monitorID = PMONITOR->ID; g_pLayoutManager->getCurrentLayout()->recalculateMonitor(POLDMON->ID); g_pHyprRenderer->arrangeLayersForMonitor(POLDMON->ID); @@ -208,8 +220,15 @@ void Events::listener_commitLayerSurface(void* owner, void* data) { g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID); if (layersurface->layer != layersurface->layerSurface->current.layer) { - PMONITOR->m_aLayerSurfaceLists[layersurface->layer].remove(layersurface); - PMONITOR->m_aLayerSurfaceLists[layersurface->layerSurface->current.layer].push_back(layersurface); + + for (auto it = PMONITOR->m_aLayerSurfaceLists[layersurface->layer].begin(); it != PMONITOR->m_aLayerSurfaceLists[layersurface->layer].end(); it++) { + if (it->get() == layersurface) { + PMONITOR->m_aLayerSurfaceLists[layersurface->layerSurface->current.layer].emplace_back(std::move(*it)); + PMONITOR->m_aLayerSurfaceLists[layersurface->layer].erase(it); + break; + } + } + layersurface->layer = layersurface->layerSurface->current.layer; } |
