Skip to content

Commit 4e581e0

Browse files
authored
feat(cliprdr)!: add on_ready() callback (#729)
Give a hint to the backend when the channel is actually connected & ready to process messages. Signed-off-by: Marc-André Lureau <[email protected]>
1 parent a50cd64 commit 4e581e0

File tree

5 files changed

+11
-0
lines changed

5 files changed

+11
-0
lines changed

crates/ironrdp-cliprdr-native/src/stub.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ impl CliprdrBackend for StubCliprdrBackend {
5454
".cliprdr"
5555
}
5656

57+
fn on_ready(&mut self) {}
58+
5759
fn client_capabilities(&self) -> ClipboardGeneralCapabilityFlags {
5860
// No additional capabilities yet
5961
ClipboardGeneralCapabilityFlags::empty()

crates/ironrdp-cliprdr-native/src/windows/cliprdr_backend.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ impl CliprdrBackend for WinCliprdrBackend {
5454
ClipboardGeneralCapabilityFlags::empty()
5555
}
5656

57+
fn on_ready(&mut self) {}
58+
5759
fn on_process_negotiated_capabilities(&mut self, capabilities: ClipboardGeneralCapabilityFlags) {
5860
self.send_event(BackendEvent::DowngradedCapabilities(capabilities))
5961
}

crates/ironrdp-cliprdr/src/backend.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ pub trait CliprdrBackend: AsAny + core::fmt::Debug + Send {
6060
/// [crate::Cliprdr] capabilities.
6161
fn client_capabilities(&self) -> ClipboardGeneralCapabilityFlags;
6262

63+
/// Called by [crate::Cliprdr] when it is ready to process clipboard data (channel initialized)
64+
fn on_ready(&mut self);
65+
6366
/// Processes signal to start clipboard copy sequence.
6467
///
6568
/// Trait implementer is responsible for gathering its list of available [`ClipboardFormat`]

crates/ironrdp-cliprdr/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ impl<R: Role> Cliprdr<R> {
154154
if self.state == CliprdrState::Initialization {
155155
info!("CLIPRDR(clipboard) virtual channel has been initialized");
156156
self.state = CliprdrState::Ready;
157+
self.backend.on_ready();
157158
} else {
158159
info!("CLIPRDR(clipboard) Remote has received format list successfully");
159160
}
@@ -173,6 +174,7 @@ impl<R: Role> Cliprdr<R> {
173174
if R::is_server() && self.state == CliprdrState::Initialization {
174175
info!("CLIPRDR(clipboard) virtual channel has been initialized");
175176
self.state = CliprdrState::Ready;
177+
self.backend.on_ready();
176178
}
177179

178180
let formats = format_list.get_formats(self.are_long_format_names_enabled())?;

crates/ironrdp-web/src/clipboard/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,8 @@ impl CliprdrBackend for WasmClipboardBackend {
540540
ClipboardGeneralCapabilityFlags::empty()
541541
}
542542

543+
fn on_ready(&mut self) {}
544+
543545
fn on_request_format_list(&mut self) {
544546
// Initial clipboard is assumed to be empty on WASM (TODO: This is only relevant for Firefox?)
545547
self.send_event(WasmClipboardBackendMessage::ForceClipboardUpdate);

0 commit comments

Comments
 (0)