win_fix_multi_tab: refactor clipboard on windows, mid commit2

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou
2022-10-25 22:07:29 +08:00
parent 2faa5cfd18
commit a49552d28b
7 changed files with 208 additions and 160 deletions

View File

@@ -44,6 +44,8 @@ pub struct Remote<T: InvokeUiSession> {
first_frame: bool,
#[cfg(windows)]
clipboard_file_context: Option<Box<clipboard::cliprdr::CliprdrClientContext>>,
#[cfg(windows)]
client_conn_id: i32, // used for clipboard
data_count: Arc<AtomicUsize>,
frame_count: Arc<AtomicUsize>,
video_format: CodecFormat,
@@ -73,6 +75,8 @@ impl<T: InvokeUiSession> Remote<T> {
first_frame: false,
#[cfg(windows)]
clipboard_file_context: None,
#[cfg(windows)]
client_conn_id: 0,
data_count: Arc::new(AtomicUsize::new(0)),
frame_count,
video_format: CodecFormat::Unknown,
@@ -107,7 +111,14 @@ impl<T: InvokeUiSession> Remote<T> {
#[cfg(not(windows))]
let (_tx_holder, mut rx_clip_client) = mpsc::unbounded_channel::<i32>();
#[cfg(windows)]
let mut rx_clip_client = clipboard::get_rx_clip_client().lock().await;
let (client_conn_id, rx_clip_client1) =
clipboard::get_rx_cliprdr_client(&self.handler.id);
#[cfg(windows)]
let mut rx_clip_client = rx_clip_client1.lock().await;
#[cfg(windows)]
{
self.client_conn_id = client_conn_id;
}
let mut status_timer = time::interval(Duration::new(1, 0));
@@ -152,7 +163,7 @@ impl<T: InvokeUiSession> Remote<T> {
_msg = rx_clip_client.recv() => {
#[cfg(windows)]
match _msg {
Some((_, clip)) => {
Some(clip) => {
allow_err!(peer.send(&crate::clipboard_file::clip_2_msg(clip)).await);
}
None => {
@@ -781,7 +792,7 @@ impl<T: InvokeUiSession> Remote<T> {
if !self.handler.lc.read().unwrap().disable_clipboard {
if let Some(context) = &mut self.clipboard_file_context {
if let Some(clip) = crate::clipboard_file::msg_2_clip(clip) {
clipboard::server_clip_file(context, 0, clip);
clipboard::server_clip_file(context, self.client_conn_id, clip);
}
}
}