#include "SessionLock.hpp" #include "../../protocols/SessionLock.hpp" #include "../../protocols/core/Compositor.hpp" #include "../../helpers/Monitor.hpp" #include "../../Compositor.hpp" using namespace Desktop; using namespace Desktop::View; SP View::CSessionLock::create(SP resource) { auto lock = SP(new CSessionLock()); lock->m_surface = resource; lock->m_self = lock; lock->init(); return lock; } View::CSessionLock::CSessionLock() : IView(CWLSurface::create()) { ; } View::CSessionLock::~CSessionLock() { m_wlSurface->unassign(); } void View::CSessionLock::init() { m_listeners.destroy = m_surface->m_events.destroy.listen([this] { std::erase_if(g_pCompositor->m_otherViews, [this](const auto& e) { return e == m_self; }); }); m_wlSurface->assign(m_surface->surface(), m_self.lock()); } SP View::CSessionLock::fromView(SP v) { if (!v || v->type() != VIEW_TYPE_LOCK_SCREEN) return nullptr; return dynamicPointerCast(v); } eViewType View::CSessionLock::type() const { return VIEW_TYPE_LOCK_SCREEN; } bool View::CSessionLock::visible() const { return m_wlSurface && m_wlSurface->resource() && m_wlSurface->resource()->m_mapped; } std::optional View::CSessionLock::logicalBox() const { return surfaceLogicalBox(); } std::optional View::CSessionLock::surfaceLogicalBox() const { if (!visible()) return std::nullopt; const auto MON = m_surface->monitor(); if (!MON) return std::nullopt; return MON->logicalBox(); } bool View::CSessionLock::desktopComponent() const { return true; } PHLMONITOR View::CSessionLock::monitor() const { if (m_surface) return m_surface->monitor(); return nullptr; }