diff options
| author | Sungyoon Cho <sungyoon@sungyooncho.dev> | 2024-05-15 20:17:56 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-15 12:17:56 +0100 |
| commit | 31890026ea9f3ce75dbcfdf060239fc8aa6c144c (patch) | |
| tree | a482ef52177b88752ce77efdc4ed581be524a418 /src/managers/SeatManager.cpp | |
| parent | 94c20a186372aace78b188842848b873eb3ebbd7 (diff) | |
wl_seat: send frame event after pointer leave (#6074)
Diffstat (limited to 'src/managers/SeatManager.cpp')
| -rw-r--r-- | src/managers/SeatManager.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/managers/SeatManager.cpp b/src/managers/SeatManager.cpp index 3e2d595f..b9590c42 100644 --- a/src/managers/SeatManager.cpp +++ b/src/managers/SeatManager.cpp @@ -186,10 +186,13 @@ void CSeatManager::setPointerFocus(wlr_surface* surf, const Vector2D& local) { } } + auto lastPointerFocusResource = state.pointerFocusResource; + state.pointerFocusResource.reset(); state.pointerFocus = surf; if (!surf) { + sendPointerFrame(lastPointerFocusResource); events.pointerFocusChange.emit(); return; } @@ -209,6 +212,11 @@ void CSeatManager::setPointerFocus(wlr_surface* surf, const Vector2D& local) { } } + if (state.pointerFocusResource != lastPointerFocusResource) + sendPointerFrame(lastPointerFocusResource); + + sendPointerFrame(); + hyprListener_pointerSurfaceDestroy.initCallback( &surf->events.destroy, [this](void* owner, void* data) { setPointerFocus(nullptr, {}); }, nullptr, "CSeatManager"); @@ -245,7 +253,14 @@ void CSeatManager::sendPointerFrame() { if (!state.pointerFocusResource) return; - for (auto& p : state.pointerFocusResource->pointers) { + sendPointerFrame(state.pointerFocusResource); +} + +void CSeatManager::sendPointerFrame(WP<CWLSeatResource> pResource) { + if (!pResource) + return; + + for (auto& p : pResource->pointers) { if (!p) continue; |
