protocols/focus_grab: fix keyboard focus staying on unlisted windows

When creating a focus grab with layershell surfaces, the last active
toplevel kept keyboard focus.
This commit is contained in:
outfoxxed 2024-05-03 05:05:40 -07:00
parent a2905b9e16
commit eb1f29cfab
No known key found for this signature in database
GPG Key ID: 4C88A185FB89301E

View File

@ -183,6 +183,12 @@ void CFocusGrab::start() {
hyprListener_touchGrabStarted.initCallback(
&g_pCompositor->m_sSeat.seat->events.touch_grab_begin, [this](void*, void*) { this->finish(true); }, this, "CFocusGrab");
// If the current keyboard focus surface isn't whitelisted, kick it out.
auto focusedSurface = g_pCompositor->m_sSeat.seat->keyboard_state.focused_surface;
if (focusedSurface != nullptr && !isSurfaceComitted(focusedSurface)) {
wlr_seat_keyboard_clear_focus(g_pCompositor->m_sSeat.seat);
}
}
// Ensure new surfaces are focused if under the mouse when comitted.