summaryrefslogtreecommitdiff
path: root/src/managers/SeatManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/managers/SeatManager.cpp')
-rw-r--r--src/managers/SeatManager.cpp36
1 files changed, 11 insertions, 25 deletions
diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp
index 46ad79e0..f3c485f8 100644
--- a/src/managers/SeatManager.cpp
+++ b/src/managers/SeatManager.cpp
@@ -120,20 +120,14 @@ void CSeatManager::setKeyboardFocus(SP<CWLSurfaceResource> surf) {
m_listeners.keyboardSurfaceDestroy.reset();
- if (m_state.keyboardFocusResource) {
- auto client = m_state.keyboardFocusResource->client();
- for (auto const& s : m_seatResources) {
- if (s->resource->client() != client)
- continue;
-
- for (auto const& k : s->resource->m_keyboards) {
- if (!k)
- continue;
+ // Don't gate leave on m_state.keyboardFocusResource — the WP can
+ // be stale. sendLeave no-ops on keyboards without m_currentSurface.
+ for (auto const& k : PROTO::seat->m_keyboards) {
+ if (!k)
+ continue;
- k->sendMods(0, m_keyboard->m_modifiersState.latched, m_keyboard->m_modifiersState.locked, m_keyboard->m_modifiersState.group);
- k->sendLeave();
- }
- }
+ k->sendMods(0, m_keyboard->m_modifiersState.latched, m_keyboard->m_modifiersState.locked, m_keyboard->m_modifiersState.group);
+ k->sendLeave();
}
m_state.keyboardFocusResource.reset();
@@ -232,19 +226,11 @@ void CSeatManager::setPointerFocus(SP<CWLSurfaceResource> surf, const Vector2D&
m_listeners.pointerSurfaceDestroy.reset();
- if (m_state.pointerFocusResource) {
- auto client = m_state.pointerFocusResource->client();
- for (auto const& s : m_seatResources) {
- if (s->resource->client() != client)
- continue;
-
- for (auto const& p : s->resource->m_pointers) {
- if (!p)
- continue;
+ for (auto const& p : PROTO::seat->m_pointers) {
+ if (!p)
+ continue;
- p->sendLeave();
- }
- }
+ p->sendLeave();
}
auto lastPointerFocusResource = m_state.pointerFocusResource;