summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 23:16:15 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-18 23:16:15 +0100
commit7f8648fc8badc4c78d7a9f5a9d6eff8413680c85 (patch)
treeeb005238922178d01bcc547789f714ea1de7c73b /src/Compositor.cpp
parentdbf566c78a0118fdfb58b759fc08e04951ff24e3 (diff)
fix crashes
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 356d6aeb..9b9643bd 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -151,7 +151,8 @@ SMonitor* CCompositor::getMonitorFromCursor() {
}
void CCompositor::removeWindowFromVectorSafe(CWindow* pWindow) {
- m_lWindows.remove(*pWindow);
+ if (windowExists(pWindow))
+ m_lWindows.remove(*pWindow);
}
bool CCompositor::windowExists(CWindow* pWindow) {
@@ -189,10 +190,23 @@ void CCompositor::focusWindow(CWindow* pWindow) {
wlr_seat_keyboard_notify_enter(m_sWLRSeat, PWINDOWSURFACE, KEYBOARD->keycodes, KEYBOARD->num_keycodes, &KEYBOARD->modifiers);
g_pXWaylandManager->activateSurface(PWINDOWSURFACE, true);
- if (m_pLastFocus && windowExists(m_pLastFocus))
+ if (m_pLastFocus && windowValidMapped(m_pLastFocus))
g_pXWaylandManager->activateSurface(g_pXWaylandManager->getWindowSurface(m_pLastFocus), false);
m_pLastFocus = pWindow;
Debug::log(LOG, "Set focus to %x", pWindow);
+}
+
+bool CCompositor::windowValidMapped(CWindow* pWindow) {
+ if (!windowExists(pWindow))
+ return false;
+
+ if (pWindow->m_bIsX11 && !pWindow->m_bMappedX11)
+ return false;
+
+ if (!g_pXWaylandManager->getWindowSurface(pWindow))
+ return false;
+
+ return true;
} \ No newline at end of file