https://bugs.kde.org/show_bug.cgi?id=523515

--- Comment #3 from Marcus <[email protected]> ---
Update: I have now reproduced this and verified a fix at runtime on Plasma/KWin
6.6.4 (Wayland), with an InputCapture consumer (Deskflow) using a screen-edge
barrier.

Reproduction (unpatched, stock 6.6.4): with an active InputCapture session,
killing the xdg-desktop-portal frontend (systemctl --user kill -s ABRT
xdg-desktop-portal.service) and then crossing the barrier freezes all input -
the compositor keeps rendering (mouse-shake still triggers the shake-cursor
effect) but no pointer or keyboard events get through, because KWin's capture
filter is never removed. Recovery required restarting the backend/frontend out
of band.

Fix: tie the InputCapture session to the lifetime of the requesting client. In
InputCapturePortal, when the capture is set up, install a
QDBusServiceWatcher(WatchForUnregistration) on the caller (the frontend, i.e.
the sender of Start), parented to the Session so its lifetime matches the
capture, and call session->close() on serviceUnregistered. That drives the
existing Session::closed -> removeInputCapture teardown, which already works -
it just never fired on the frontend-death path. (This mirrors the intent of the
watcher in appchooser.cpp, but with the watcher owned by the session so it
actually outlives the call.)

Result (patched): the same frontend kill now logs "Input capture requester
.../portal... disappeared, releasing capture" and input remains fully
responsive across the barrier - no freeze.

This was verified with the machine's own out-of-band auto-recovery disabled, so
the patched watcher was the only thing that could release the capture. I'll
open a merge request against xdg-desktop-portal-kde with this change and link
it here.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to