summaryrefslogtreecommitdiff
path: root/src/events/Layers.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-07-23 15:48:08 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-07-23 15:48:08 +0200
commit1626707b7f4fd3d2b313e78cb3a41783f072f73b (patch)
treed03ac32a9c898f38216f191949b8c5b2ff89044e /src/events/Layers.cpp
parent72700bf9dc17d1d145130bd53b436a80e1c971d2 (diff)
make layerSurfaces into RAII
Diffstat (limited to 'src/events/Layers.cpp')
-rw-r--r--src/events/Layers.cpp33
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;
}