mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-14 20:25:58 +01:00
57 lines
No EOL
1.2 KiB
C++
57 lines
No EOL
1.2 KiB
C++
#include "WLSurface.hpp"
|
|
#include "../Compositor.hpp"
|
|
|
|
CWLSurface::CWLSurface(wlr_surface* pSurface) {
|
|
m_pWLRSurface = pSurface;
|
|
init();
|
|
}
|
|
|
|
void CWLSurface::assign(wlr_surface* pSurface) {
|
|
m_pWLRSurface = pSurface;
|
|
init();
|
|
}
|
|
|
|
void CWLSurface::unassign() {
|
|
destroy();
|
|
}
|
|
|
|
CWLSurface::~CWLSurface() {
|
|
destroy();
|
|
}
|
|
|
|
bool CWLSurface::exists() const {
|
|
return m_pWLRSurface;
|
|
}
|
|
|
|
wlr_surface* CWLSurface::wlr() const {
|
|
return m_pWLRSurface;
|
|
}
|
|
|
|
void CWLSurface::destroy() {
|
|
if (!m_pWLRSurface)
|
|
return;
|
|
|
|
hyprListener_destroy.removeCallback();
|
|
m_pWLRSurface->data = nullptr;
|
|
|
|
if (g_pCompositor->m_pLastFocus == m_pWLRSurface)
|
|
g_pCompositor->m_pLastFocus = nullptr;
|
|
|
|
m_pWLRSurface = nullptr;
|
|
|
|
Debug::log(LOG, "CWLSurface %lx called destroy()", this);
|
|
}
|
|
|
|
void CWLSurface::init() {
|
|
if (!m_pWLRSurface)
|
|
return;
|
|
|
|
RASSERT(!m_pWLRSurface->data, "Attempted to duplicate CWLSurface ownership!");
|
|
|
|
m_pWLRSurface->data = this;
|
|
|
|
hyprListener_destroy.initCallback(
|
|
&m_pWLRSurface->events.destroy, [&](void* owner, void* data) { destroy(); }, this, "CWLSurface");
|
|
|
|
Debug::log(LOG, "CWLSurface %lx called init()", this);
|
|
} |