Hyprland 0.55.4 CXDGShellProtocol::onPopupDestroy() calls setGrab(nullptr) unconditionally when the popup owning the xdg-popup grab dies, without checking that grab is still the installed one. So opening the launcher while some app holds a grabbing popup steals the seat grab, that popup gets popup_done, the client destroys it, and its destructor clears OUR grab — one client round trip later, measured at 1-2ms. A clear that fast is not a click-outside, so re-arm instead of closing. The offending popup is gone by then, so the second grab sticks. Capped at 3 tries so a hostile client can't spin it. |
||
|---|---|---|
| .. | ||
| audio.nix | ||
| desktop.nix | ||
| hyprland.nix | ||
| locale.nix | ||
| quickshell.nix | ||
| shell.nix | ||
| stylix.nix | ||
| ui.nix | ||
| users.nix | ||