core: fix some crash conditions around workspace ptrs in CWindow

ref #5402, supersedes #5409
This commit is contained in:
Vaxry 2024-04-03 20:42:38 +01:00
parent d88d589880
commit 10146f5ec5
2 changed files with 5 additions and 2 deletions

View file

@ -1241,7 +1241,7 @@ CWindow* CCompositor::getFullscreenWindowOnWorkspace(const int& ID) {
} }
bool CCompositor::isWorkspaceVisible(PHLWORKSPACE w) { bool CCompositor::isWorkspaceVisible(PHLWORKSPACE w) {
return w->m_bVisible; return valid(w) && w->m_bVisible;
} }
PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) { PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) {

View file

@ -220,6 +220,9 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow, CMonitor* pMonitor) {
if (!pWindow->m_pWorkspace && !pWindow->m_bFadingOut) if (!pWindow->m_pWorkspace && !pWindow->m_bFadingOut)
return false; return false;
if (!pWindow->m_pWorkspace && pWindow->m_bFadingOut)
return pWindow->workspaceID() == pMonitor->activeWorkspaceID();
if (pWindow->m_bPinned) if (pWindow->m_bPinned)
return true; return true;
@ -1760,7 +1763,7 @@ void CHyprRenderer::damageWindow(CWindow* pWindow, bool forceFull) {
windowBox.translate(pWindow->m_vFloatingOffset); windowBox.translate(pWindow->m_vFloatingOffset);
for (auto& m : g_pCompositor->m_vMonitors) { for (auto& m : g_pCompositor->m_vMonitors) {
if (g_pHyprRenderer->shouldRenderWindow(pWindow, m.get()) || forceFull) { // only damage if window is rendered on monitor if (forceFull || g_pHyprRenderer->shouldRenderWindow(pWindow, m.get())) { // only damage if window is rendered on monitor
CBox fixedDamageBox = {windowBox.x - m->vecPosition.x, windowBox.y - m->vecPosition.y, windowBox.width, windowBox.height}; CBox fixedDamageBox = {windowBox.x - m->vecPosition.x, windowBox.y - m->vecPosition.y, windowBox.width, windowBox.height};
fixedDamageBox.scale(m->scale); fixedDamageBox.scale(m->scale);
m->addDamage(&fixedDamageBox); m->addDamage(&fixedDamageBox);