mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 02:25:59 +01:00
fixed some more crashes
This commit is contained in:
parent
743efafbde
commit
92bfe6f13e
4 changed files with 17 additions and 15 deletions
|
@ -563,18 +563,6 @@ void CCompositor::cleanupWindows() {
|
||||||
if (!w->m_bReadyToDelete)
|
if (!w->m_bReadyToDelete)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
w->hyprListener_mapWindow.removeCallback();
|
|
||||||
w->hyprListener_unmapWindow.removeCallback();
|
|
||||||
w->hyprListener_destroyWindow.removeCallback();
|
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(w);
|
|
||||||
|
|
||||||
if (w->m_pSurfaceTree) {
|
|
||||||
Debug::log(LOG, "Destroying Subsurface tree of %x in destroyWindow", w);
|
|
||||||
SubsurfaceTree::destroySurfaceTree(w->m_pSurfaceTree);
|
|
||||||
w->m_pSurfaceTree = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_pHyprOpenGL->m_mWindowFramebuffers[w].release();
|
g_pHyprOpenGL->m_mWindowFramebuffers[w].release();
|
||||||
g_pHyprOpenGL->m_mWindowFramebuffers.erase(w);
|
g_pHyprOpenGL->m_mWindowFramebuffers.erase(w);
|
||||||
m_lWindows.remove(*w);
|
m_lWindows.remove(*w);
|
||||||
|
|
|
@ -345,7 +345,8 @@ void CConfigManager::loadConfigLoadVars() {
|
||||||
for (auto& m : g_pCompositor->m_lMonitors)
|
for (auto& m : g_pCompositor->m_lMonitors)
|
||||||
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m.ID);
|
g_pLayoutManager->getCurrentLayout()->recalculateMonitor(m.ID);
|
||||||
|
|
||||||
// Update the keyboard layout to the cfg'd one
|
// Update the keyboard layout to the cfg'd one if this is not the first launch
|
||||||
|
if (!isFirstLaunch)
|
||||||
g_pInputManager->setKeyboardLayout();
|
g_pInputManager->setKeyboardLayout();
|
||||||
|
|
||||||
// Calculate the mod mask for main_mod
|
// Calculate the mod mask for main_mod
|
||||||
|
|
|
@ -221,6 +221,18 @@ void Events::listener_destroyWindow(void* owner, void* data) {
|
||||||
g_pCompositor->m_pLastFocus = nullptr;
|
g_pCompositor->m_pLastFocus = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PWINDOW->hyprListener_mapWindow.removeCallback();
|
||||||
|
PWINDOW->hyprListener_unmapWindow.removeCallback();
|
||||||
|
PWINDOW->hyprListener_destroyWindow.removeCallback();
|
||||||
|
|
||||||
|
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW);
|
||||||
|
|
||||||
|
if (PWINDOW->m_pSurfaceTree) {
|
||||||
|
Debug::log(LOG, "Destroying Subsurface tree of %x in destroyWindow", PWINDOW);
|
||||||
|
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);
|
||||||
|
PWINDOW->m_pSurfaceTree = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
PWINDOW->m_bReadyToDelete = true;
|
PWINDOW->m_bReadyToDelete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,6 @@ void SubsurfaceTree::destroySurfaceTree(SSurfaceTreeNode* pNode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (auto& c : pNode->childSubsurfaces)
|
for (auto& c : pNode->childSubsurfaces)
|
||||||
destroySubsurface(&c);
|
destroySubsurface(&c);
|
||||||
|
|
||||||
|
@ -83,6 +82,8 @@ void SubsurfaceTree::destroySurfaceTree(SSurfaceTreeNode* pNode) {
|
||||||
pNode->hyprListener_destroy.removeCallback();
|
pNode->hyprListener_destroy.removeCallback();
|
||||||
pNode->hyprListener_newSubsurface.removeCallback();
|
pNode->hyprListener_newSubsurface.removeCallback();
|
||||||
|
|
||||||
|
surfaceTreeNodes.remove(*pNode);
|
||||||
|
|
||||||
Debug::log(LOG, "SurfaceTree Node removed");
|
Debug::log(LOG, "SurfaceTree Node removed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue