subsurfaces: dont try to access popup surfaces when handling subsurface updates (#9421)

This commit is contained in:
nyx
2025-02-17 13:02:32 -05:00
committed by GitHub
parent 59c615c321
commit d01f9943e1
3 changed files with 10 additions and 2 deletions

View File

@@ -282,6 +282,9 @@ void CPopup::recheckTree() {
}
void CPopup::recheckChildrenRecursive() {
if (m_bInert || !m_pWLSurface)
return;
std::vector<WP<CPopup>> cpy;
std::ranges::for_each(m_vChildren, [&cpy](const auto& el) { cpy.emplace_back(el); });
for (auto const& c : cpy) {
@@ -367,3 +370,7 @@ WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) {
return {};
}
bool CPopup::inert() const {
return m_bInert;
}

View File

@@ -34,6 +34,7 @@ class CPopup {
void recheckTree();
bool visible();
bool inert() const;
// will also loop over this node
void breadthfirst(std::function<void(WP<CPopup>, void*)> fn, void* data);

View File

@@ -107,7 +107,7 @@ void CSubsurface::onCommit() {
g_pHyprRenderer->damageSurface(m_pWLSurface->resource(), COORDS.x, COORDS.y);
if (m_pPopupParent)
if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_pWLSurface)
m_pPopupParent->recheckTree();
if (!m_pWindowParent.expired()) // I hate you firefox why are you doing this
m_pWindowParent->m_pPopupHead->recheckTree();
@@ -124,7 +124,7 @@ void CSubsurface::onCommit() {
// g_pHyprRenderer->damageBox(box);
CBox box;
if (m_pPopupParent)
if (m_pPopupParent && !m_pPopupParent->inert() && m_pPopupParent->m_pWLSurface)
box = m_pPopupParent->m_pWLSurface->getSurfaceBoxGlobal().value_or(CBox{});
else if (m_pWindowParent)
box = m_pWindowParent->getWindowMainSurfaceBox();