#include "GlobalViewMethods.hpp" #include "../../Compositor.hpp" #include "LayerSurface.hpp" #include "Window.hpp" #include "Popup.hpp" #include "Subsurface.hpp" #include "SessionLock.hpp" #include "../../protocols/core/Compositor.hpp" #include "../../protocols/core/Subcompositor.hpp" #include "../../protocols/SessionLock.hpp" using namespace Desktop; using namespace Desktop::View; std::vector> View::getViewsForWorkspace(PHLWORKSPACE ws) { std::vector> views; for (const auto& w : g_pCompositor->m_windows) { if (!w->aliveAndVisible() || w->m_workspace != ws) continue; views.emplace_back(w); w->wlSurface()->resource()->breadthfirst( [&views](SP s, const Vector2D& pos, void* data) { auto surf = CWLSurface::fromResource(s); if (!surf || !s->m_mapped) return; views.emplace_back(surf->view()); }, nullptr); // xwl windows dont have this if (w->m_popupHead) { w->m_popupHead->breadthfirst( [&views](SP s, void* data) { auto surf = s->wlSurface(); if (!surf || !s->aliveAndVisible()) return; views.emplace_back(surf->view()); }, nullptr); } } for (const auto& l : g_pCompositor->m_layers) { if (!l->aliveAndVisible() || l->m_monitor != ws->m_monitor) continue; views.emplace_back(l); l->m_popupHead->breadthfirst( [&views](SP p, void* data) { auto surf = p->wlSurface(); if (!surf || !p->aliveAndVisible()) return; views.emplace_back(surf->view()); }, nullptr); } for (const auto& v : g_pCompositor->m_otherViews) { if (!v->aliveAndVisible() || !v->desktopComponent()) continue; if (v->type() == VIEW_TYPE_LOCK_SCREEN) { const auto LOCK = Desktop::View::CSessionLock::fromView(v); if (LOCK->monitor() != ws->m_monitor) continue; views.emplace_back(LOCK); continue; } } return views; }