diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 53e304596..d65b2dc05 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2703,7 +2703,10 @@ openMonitorInTheSameTab(int i, FFI ffi, PeerInfo pi) { ? List.generate(pi.displays.length, (index) => index) : [i]; bind.sessionSwitchDisplay( - sessionId: ffi.sessionId, value: Int32List.fromList(displays)); + isDesktop: isDesktop, + sessionId: ffi.sessionId, + value: Int32List.fromList(displays), + ); ffi.ffiModel.switchToNewDisplay(i, ffi.sessionId, ffi.id); } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index f01a97820..5d1cbbd62 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -395,8 +395,10 @@ class FfiModel with ChangeNotifier { msgBox(sessionId, 'custom-nook-nocancel-hasclose-info', 'Prompt', 'elevated_switch_display_msg', '', parent.target!.dialogManager); bind.sessionSwitchDisplay( - sessionId: sessionId, - value: Int32List.fromList([pi.primaryDisplay])); + isDesktop: isDesktop, + sessionId: sessionId, + value: Int32List.fromList([pi.primaryDisplay]), + ); } } } @@ -788,7 +790,10 @@ class FfiModel with ChangeNotifier { // move to the first display and set fullscreen bind.sessionSwitchDisplay( - sessionId: sessionId, value: Int32List.fromList([0])); + isDesktop: isDesktop, + sessionId: sessionId, + value: Int32List.fromList([0]), + ); _pi.currentDisplay = 0; try { CurrentDisplayState.find(peerId).value = _pi.currentDisplay; @@ -899,7 +904,10 @@ class FfiModel with ChangeNotifier { : pi.primaryDisplay; final displays = newDisplay; bind.sessionSwitchDisplay( - sessionId: sessionId, value: Int32List.fromList([displays])); + isDesktop: isDesktop, + sessionId: sessionId, + value: Int32List.fromList([displays]), + ); if (_pi.isSupportMultiUiSession) { // If the peer supports multi-ui-session, no switch display message will be send back. diff --git a/src/flutter.rs b/src/flutter.rs index 57f7e3704..4858e9d66 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1509,7 +1509,7 @@ pub mod sessions { } } - pub fn session_switch_display(session_id: SessionID, value: Vec) { + pub fn session_switch_display(is_desktop: bool, session_id: SessionID, value: Vec) { for s in SESSIONS.read().unwrap().values() { let read_lock = s.ui_handler.session_handlers.read().unwrap(); if read_lock.contains_key(&session_id) { @@ -1519,15 +1519,19 @@ pub mod sessions { // The switch display message will contain `SupportedResolutions`, which is useful when changing resolutions. s.switch_display(value[0]); - // Check if other displays are needed. - #[cfg(feature = "flutter_texture_render")] - if value.len() == 1 { - check_remove_unused_displays( - Some(value[0] as _), - &session_id, - &s, - &read_lock, - ); + if !is_desktop { + s.capture_displays(vec![], vec![], value); + } else { + // Check if other displays are needed. + #[cfg(feature = "flutter_texture_render")] + if value.len() == 1 { + check_remove_unused_displays( + Some(value[0] as _), + &session_id, + &s, + &read_lock, + ); + } } } else { // Try capture all displays. diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index d25923de5..56000419e 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -439,8 +439,8 @@ pub fn session_ctrl_alt_del(session_id: SessionID) { } } -pub fn session_switch_display(session_id: SessionID, value: Vec) { - sessions::session_switch_display(session_id, value); +pub fn session_switch_display(is_desktop: bool, session_id: SessionID, value: Vec) { + sessions::session_switch_display(is_desktop, session_id, value); } pub fn session_handle_flutter_key_event(