No description
Previously, `Frame` was stored in KMS frame udata, but in some cases the udata was dropped without a capture happening, and `Frame` did not implement `Drop`, so `fail` was never sent. Instead, rename `DropableFrame` to `Frame` and `Frame` to `FrameRef`, so we can have a single instance of `Frame`, that will send `fail` on drop. This guarantees either `.success` or `.fail` are send, as long as its not leaked. This seems to fix https://github.com/pop-os/cosmic-comp/issues/1305. xdg-desktop-portal-cosmic prints an error, buy retries (as it should for an `Unknown` error; though maybe there should be a retry limit) and the session continues working. (Not sure if it should be sending `failed`, or queing it with the next frame so it can send `success` to the client, but this works and is desirable as a failsafe anyway.) `Session` and `CursorSession` are similiarly updated. `.fail()`, `.success()`, and `.stop()` now consume `Frame`/`Session`/`CursorSession`. So to stop a session, it is now necessary to call `.remove_session()`, but then simply dropping with send `.stop()`. Factoring out some `Request::Capture` handling into a `capture_frame` function seems to clean up error handling and such a bit. |
||
|---|---|---|
| .github/workflows | ||
| cosmic-comp-config | ||
| data | ||
| debian | ||
| resources | ||
| src | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| flake.lock | ||
| flake.nix | ||
| i18n.toml | ||
| LICENSE | ||
| Makefile | ||
| rust-toolchain.toml | ||
| rustfmt.toml | ||