summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 5405a4f0..39f99b4c 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -321,7 +321,7 @@ SMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) {
void CCompositor::focusWindow(CWindow* pWindow) {
- if (!pWindow) {
+ if (!pWindow || !windowValidMapped(pWindow)) {
wlr_seat_keyboard_notify_clear_focus(m_sSeat.seat);
return;
}
@@ -337,11 +337,18 @@ void CCompositor::focusSurface(wlr_surface* pSurface) {
if (m_sSeat.seat->keyboard_state.focused_surface == pSurface)
return; // Don't focus when already focused on this.
+ if (!pSurface)
+ return;
+
// Unfocus last surface
if (m_pLastFocus && !wlr_surface_is_xwayland_surface(m_pLastFocus))
g_pXWaylandManager->activateSurface(m_pLastFocus, false);
const auto KEYBOARD = wlr_seat_get_keyboard(m_sSeat.seat);
+
+ if (!KEYBOARD)
+ return;
+
wlr_seat_keyboard_notify_enter(m_sSeat.seat, pSurface, KEYBOARD->keycodes, KEYBOARD->num_keycodes, &KEYBOARD->modifiers);
m_pLastFocus = pSurface;