Support isolated live window ScreenCast streams
Render selected toplevels through a private portal-only capture protocol, preserve logical snapshot geometry, and renegotiate PipeWire video on window resizing. Bound outstanding snapshots and retry temporary contention; stop on source closure and session locking. Validation: portal unit tests (31), capture budget unit, private-bus portal contracts, and real nested/PipeWire isolation, workspace, resize, close and paused-lock tests pass. Independent review cleared. Monitor restore integration timed out on both this build and the unchanged previous compositor under the current nested host.
This commit is contained in:
1 parent
56a888adb3
commit
baca852ee9
26 files changed
+1307
-139
No files matched your search
@@ -865,9 +865,15 @@ impl Ferese {
|
||||
let loop_handle = event_loop.handle();
|
||||
|
||||
loop_handle.insert_source(listening_socket, |client_stream, _, state| {
|
||||
let mut client_state = ClientState::default();
|
||||
if crate::handlers::window_capture::is_portal(&client_stream) {
|
||||
client_state
|
||||
.capabilities
|
||||
.insert(crate::private_client::ClientCapabilities::WINDOW_CAPTURE);
|
||||
}
|
||||
if let Err(error) = state
|
||||
.display_handle
|
||||
.insert_client(client_stream, Arc::new(ClientState::default()))
|
||||
.insert_client(client_stream, Arc::new(client_state))
|
||||
{
|
||||
tracing::warn!(%error, "failed to register Wayland client");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user