diff options
| author | Vaxry <vaxry@vaxry.net> | 2024-02-29 17:23:44 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2024-02-29 17:23:44 +0000 |
| commit | 1698d336f2511ee7c93d0a520c7ba3491c831e8d (patch) | |
| tree | d674611ee46a3d78a12124b986764b29b2772eea /src | |
| parent | fbba8757cb1fbc79cc4b7744826a5a4cfca9264a (diff) | |
core: fix crashes on access of deleted wlr_ surface
ref fixes #4893
Diffstat (limited to 'src')
| -rw-r--r-- | src/events/Windows.cpp | 2 | ||||
| -rw-r--r-- | src/managers/XWaylandManager.cpp | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 34a34cbd..1c1521c9 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -891,6 +891,8 @@ void Events::listener_destroyWindow(void* owner, void* data) { PWINDOW->m_bReadyToDelete = true; + PWINDOW->m_uSurface.xdg = nullptr; + if (!PWINDOW->m_bFadingOut) { Debug::log(LOG, "Unmapped {} removed instantly", PWINDOW); g_pCompositor->removeWindowFromVectorSafe(PWINDOW); // most likely X11 unmanaged or sumn diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp index 1704ee99..2dcb3bcc 100644 --- a/src/managers/XWaylandManager.cpp +++ b/src/managers/XWaylandManager.cpp @@ -107,6 +107,9 @@ std::string CHyprXWaylandManager::getTitle(CWindow* pWindow) { return std::string(pWindow->m_uSurface.xwayland->title); } } else if (pWindow->m_uSurface.xdg) { + if (pWindow->m_bFadingOut || !pWindow->m_uSurface.xdg) + return ""; + if (pWindow->m_uSurface.xdg->toplevel && pWindow->m_uSurface.xdg->toplevel->title) { return std::string(pWindow->m_uSurface.xdg->toplevel->title); } @@ -128,6 +131,9 @@ std::string CHyprXWaylandManager::getAppIDClass(CWindow* pWindow) { return std::string(pWindow->m_uSurface.xwayland->_class); } } else if (pWindow->m_uSurface.xdg) { + if (pWindow->m_bFadingOut || !pWindow->m_uSurface.xdg) + return ""; + if (pWindow->m_uSurface.xdg->toplevel && pWindow->m_uSurface.xdg->toplevel->app_id) { return std::string(pWindow->m_uSurface.xdg->toplevel->app_id); } |
