diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 9072643ea..c84f126bd 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -326,9 +326,9 @@ class _GeneralState extends State<_General> { update: () { final useSeparateWindow = mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); - if (useSeparateWindow) { + // if (useSeparateWindow) { rustDeskWinManager.separateWindows(); - } + // } }, ), ]; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 2bf08c53f..1a24067a0 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1655,9 +1655,15 @@ class FFI { final stream = bind.sessionStart(sessionId: sessionId, id: id); final cb = ffiModel.startEventListener(sessionId, id); final useTextureRender = bind.mainUseTextureRender(); + + final SimpleWrapper isPeerInfoSent = SimpleWrapper(false); // Preserved for the rgba data. stream.listen((message) { if (closed) return; + if (isSessionAdded && !isPeerInfoSent.value) { + bind.sessionHandlePeerInfo(sessionId: sessionId); + isPeerInfoSent.value = true; + } () async { if (message is EventToUI_Event) { if (message.field0 == "close") { @@ -1702,10 +1708,6 @@ class FFI { }); // every instance will bind a stream this.id = id; - - if (isSessionAdded) { - bind.sessionHandlePeerInfo(sessionId: sessionId); - } } /// Login with [password], choose if the client should [remember] it. diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 2a7b89bf0..939bc7934 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/platform_model.dart'; /// must keep the order enum WindowType { Main, RemoteDesktop, FileTransfer, PortForward, Unknown } @@ -48,10 +49,10 @@ class RustDeskMultiWindowManager { final String sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); final idList = sessionIdList.split(';'); - if (idList.length <= 1) { - continue; - } - for (final idPair in idList.sublist(1)) { + // if (idList.length <= 1) { + // continue; + // } + for (final idPair in idList) { final peerSession = idPair.split(','); var params = { 'type': WindowType.RemoteDesktop.index, diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 6236aa838..f50dc4737 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1010,7 +1010,7 @@ impl Remote { Some(login_response::Union::PeerInfo(pi)) => { #[cfg(feature = "flutter")] { - self.handler.pi = pi.clone(); + *self.handler.pi.write().unwrap() = pi.clone(); } self.handler.handle_peer_info(pi); #[cfg(not(feature = "flutter"))] @@ -1280,7 +1280,7 @@ impl Remote { Some(misc::Union::SwitchDisplay(s)) => { #[cfg(feature = "flutter")] { - self.handler.switch_display = s.clone(); + *self.handler.switch_display.write().unwrap() = s.clone(); } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c3df147b9..c0529171a 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -603,8 +603,9 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 pub fn session_handle_peer_info(session_id: SessionID) { if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - session.handle_peer_info(session.pi.clone()); - session.handle_peer_switch_display(&session.switch_display); + let pi = session.pi.read().unwrap().clone(); + session.handle_peer_info(pi); + session.handle_peer_switch_display(&session.switch_display.read().unwrap()); } } diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 740929c39..32f8fe5bf 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -63,9 +63,9 @@ pub struct Session { pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, #[cfg(feature = "flutter")] - pub pi: PeerInfo, + pub pi: Arc>, #[cfg(feature = "flutter")] - pub switch_display: SwitchDisplay, + pub switch_display: Arc>, } #[derive(Clone)]