diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 5eb7a273ac8..b02ff48cad6 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1426,7 +1426,8 @@ impl Remote { self.handler.set_cursor_position(cp); } Some(message::Union::Clipboard(cb)) => { - if !self.handler.lc.read().unwrap().disable_clipboard.v { + let lc = self.handler.lc.read().unwrap(); + if !lc.disable_clipboard.v && !lc.view_only.v { #[cfg(not(any(target_os = "android", target_os = "ios")))] update_clipboard(vec![cb], ClipboardSide::Client); #[cfg(target_os = "ios")] @@ -1445,7 +1446,8 @@ impl Remote { } } Some(message::Union::MultiClipboards(_mcb)) => { - if !self.handler.lc.read().unwrap().disable_clipboard.v { + let lc = self.handler.lc.read().unwrap(); + if !lc.disable_clipboard.v && !lc.view_only.v { #[cfg(not(any(target_os = "android", target_os = "ios")))] update_clipboard(_mcb.clipboards, ClipboardSide::Client); #[cfg(target_os = "ios")] diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 09156cfd6f3..becb6b037b5 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -326,12 +326,14 @@ pub fn session_toggle_option(session_id: SessionID, value: String) { try_sync_peer_option(&session, &session_id, &value, None); } #[cfg(not(target_os = "ios"))] - if sessions::get_session_by_session_id(&session_id).is_some() && value == "disable-clipboard" { + if sessions::get_session_by_session_id(&session_id).is_some() + && (value == "disable-clipboard" || value == "view-only") + { crate::flutter::update_text_clipboard_required(); } #[cfg(feature = "unix-file-copy-paste")] if sessions::get_session_by_session_id(&session_id).is_some() - && value == config::keys::OPTION_ENABLE_FILE_COPY_PASTE + && (value == config::keys::OPTION_ENABLE_FILE_COPY_PASTE || value == "view-only") { crate::flutter::update_file_clipboard_required(); } diff --git a/src/server/connection.rs b/src/server/connection.rs index 1ae9955777c..5e0825bc4e7 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2891,7 +2891,7 @@ impl Connection { self.update_auto_disconnect_timer(); } Some(message::Union::Clipboard(cb)) => { - if self.clipboard { + if self.clipboard_enabled() { #[cfg(not(any(target_os = "android", target_os = "ios")))] update_clipboard(vec![cb], ClipboardSide::Host); // ios as the controlled side is actually not supported for now. @@ -2919,12 +2919,12 @@ impl Connection { } } Some(message::Union::MultiClipboards(_mcb)) => { - #[cfg(not(any(target_os = "android", target_os = "ios")))] - if self.clipboard { + if self.clipboard_enabled() { + #[cfg(not(any(target_os = "android", target_os = "ios")))] update_clipboard(_mcb.clipboards, ClipboardSide::Host); + #[cfg(target_os = "android")] + crate::clipboard::handle_msg_multi_clipboards(_mcb); } - #[cfg(target_os = "android")] - crate::clipboard::handle_msg_multi_clipboards(_mcb); } #[cfg(any(target_os = "windows", feature = "unix-file-copy-paste"))] Some(message::Union::Cliprdr(clip)) => { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index e6c8ac6a238..ddc2574f2ad 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -175,13 +175,16 @@ impl SessionPermissionConfig { *self.server_clipboard_enabled.read().unwrap() && *self.server_keyboard_enabled.read().unwrap() && !self.lc.read().unwrap().disable_clipboard.v + && !self.lc.read().unwrap().view_only.v } #[cfg(feature = "unix-file-copy-paste")] pub fn is_file_clipboard_required(&self) -> bool { + let lc = self.lc.read().unwrap(); *self.server_keyboard_enabled.read().unwrap() && *self.server_file_transfer_enabled.read().unwrap() - && self.lc.read().unwrap().enable_file_copy_paste.v + && lc.enable_file_copy_paste.v + && !lc.view_only.v } } @@ -411,13 +414,16 @@ impl Session { *self.server_clipboard_enabled.read().unwrap() && *self.server_keyboard_enabled.read().unwrap() && !self.lc.read().unwrap().disable_clipboard.v + && !self.lc.read().unwrap().view_only.v } #[cfg(any(target_os = "windows", feature = "unix-file-copy-paste"))] pub fn is_file_clipboard_required(&self) -> bool { + let lc = self.lc.read().unwrap(); *self.server_keyboard_enabled.read().unwrap() && *self.server_file_transfer_enabled.read().unwrap() - && self.lc.read().unwrap().enable_file_copy_paste.v + && lc.enable_file_copy_paste.v + && !lc.view_only.v } #[cfg(feature = "flutter")]