mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-09-29 22:58:28 +00:00
subsurfaces: dont try to access popup surfaces when handling subsurface updates (#9421)
This commit is contained in:
@@ -282,6 +282,9 @@ void CPopup::recheckTree() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CPopup::recheckChildrenRecursive() {
|
void CPopup::recheckChildrenRecursive() {
|
||||||
|
if (m_bInert || !m_pWLSurface)
|
||||||
|
return;
|
||||||
|
|
||||||
std::vector<WP<CPopup>> cpy;
|
std::vector<WP<CPopup>> cpy;
|
||||||
std::ranges::for_each(m_vChildren, [&cpy](const auto& el) { cpy.emplace_back(el); });
|
std::ranges::for_each(m_vChildren, [&cpy](const auto& el) { cpy.emplace_back(el); });
|
||||||
for (auto const& c : cpy) {
|
for (auto const& c : cpy) {
|
||||||
@@ -367,3 +370,7 @@ WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) {
|
|||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CPopup::inert() const {
|
||||||
|
return m_bInert;
|
||||||
|
}
|
||||||
|
@@ -34,6 +34,7 @@ class CPopup {
|
|||||||
void recheckTree();
|
void recheckTree();
|
||||||
|
|
||||||
bool visible();
|
bool visible();
|
||||||
|
bool inert() const;
|
||||||
|
|
||||||
// will also loop over this node
|
// will also loop over this node
|
||||||
void breadthfirst(std::function<void(WP<CPopup>, void*)> fn, void* data);
|
void breadthfirst(std::function<void(WP<CPopup>, void*)> fn, void* data);
|
||||||
|
@@ -107,7 +107,7 @@ void CSubsurface::onCommit() {
|
|||||||
|
|
||||||
g_pHyprRenderer->damageSurface(m_pWLSurface->resource(), COORDS.x, COORDS.y);
|
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();
|
m_pPopupParent->recheckTree();
|
||||||
if (!m_pWindowParent.expired()) // I hate you firefox why are you doing this
|
if (!m_pWindowParent.expired()) // I hate you firefox why are you doing this
|
||||||
m_pWindowParent->m_pPopupHead->recheckTree();
|
m_pWindowParent->m_pPopupHead->recheckTree();
|
||||||
@@ -124,7 +124,7 @@ void CSubsurface::onCommit() {
|
|||||||
// g_pHyprRenderer->damageBox(box);
|
// g_pHyprRenderer->damageBox(box);
|
||||||
|
|
||||||
CBox 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{});
|
box = m_pPopupParent->m_pWLSurface->getSurfaceBoxGlobal().value_or(CBox{});
|
||||||
else if (m_pWindowParent)
|
else if (m_pWindowParent)
|
||||||
box = m_pWindowParent->getWindowMainSurfaceBox();
|
box = m_pWindowParent->getWindowMainSurfaceBox();
|
||||||
|
Reference in New Issue
Block a user