mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
refact: win, virtual display (#7767)
* refact: win, virtual display Signed-off-by: fufesou <shuanglongchen@yeah.net> * Update flutter-build.yml --------- Signed-off-by: fufesou <shuanglongchen@yeah.net> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
@@ -1133,10 +1133,7 @@ impl Connection {
|
||||
);
|
||||
#[cfg(feature = "virtual_display_driver")]
|
||||
if crate::platform::is_installed() {
|
||||
let virtual_displays = virtual_display_manager::get_virtual_displays();
|
||||
if !virtual_displays.is_empty() {
|
||||
platform_additions.insert("virtual_displays".into(), json!(&virtual_displays));
|
||||
}
|
||||
platform_additions.extend(virtual_display_manager::get_platform_additions());
|
||||
}
|
||||
platform_additions.insert(
|
||||
"supported_privacy_mode_impl".into(),
|
||||
@@ -2595,8 +2592,7 @@ impl Connection {
|
||||
self.send(make_msg("idd_not_support_under_win10_2004_tip".to_string()))
|
||||
.await;
|
||||
} else {
|
||||
if let Err(e) =
|
||||
virtual_display_manager::plug_in_index_modes(t.display as _, Vec::new())
|
||||
if let Err(e) = virtual_display_manager::plug_in_monitor(t.display as _, Vec::new())
|
||||
{
|
||||
log::error!("Failed to plug in virtual display: {}", e);
|
||||
self.send(make_msg(format!(
|
||||
@@ -2607,13 +2603,8 @@ impl Connection {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let indices = if t.display == -1 {
|
||||
virtual_display_manager::get_virtual_displays()
|
||||
} else {
|
||||
vec![t.display as _]
|
||||
};
|
||||
if let Err(e) = virtual_display_manager::plug_out_peer_request(&indices) {
|
||||
log::error!("Failed to plug out virtual display {:?}: {}", &indices, e);
|
||||
if let Err(e) = virtual_display_manager::plug_out_monitor(t.display) {
|
||||
log::error!("Failed to plug out virtual display {}: {}", t.display, e);
|
||||
self.send(make_msg(format!(
|
||||
"Failed to plug out virtual displays: {}",
|
||||
e
|
||||
@@ -2639,7 +2630,7 @@ impl Connection {
|
||||
let name = display.name();
|
||||
#[cfg(all(windows, feature = "virtual_display_driver"))]
|
||||
if let Some(_ok) =
|
||||
virtual_display_manager::change_resolution_if_is_virtual_display(
|
||||
virtual_display_manager::rustdesk_idd::change_resolution_if_is_virtual_display(
|
||||
&name,
|
||||
r.width as _,
|
||||
r.height as _,
|
||||
@@ -2858,7 +2849,6 @@ impl Connection {
|
||||
} else {
|
||||
let is_pre_privacy_on = privacy_mode::is_in_privacy_mode();
|
||||
let pre_impl_key = privacy_mode::get_cur_impl_key();
|
||||
let turn_on_res = privacy_mode::turn_on_privacy(&impl_key, self.inner.id);
|
||||
|
||||
if is_pre_privacy_on {
|
||||
if let Some(pre_impl_key) = pre_impl_key {
|
||||
@@ -2872,6 +2862,7 @@ impl Connection {
|
||||
}
|
||||
}
|
||||
|
||||
let turn_on_res = privacy_mode::turn_on_privacy(&impl_key, self.inner.id).await;
|
||||
match turn_on_res {
|
||||
Some(Ok(res)) => {
|
||||
if res {
|
||||
@@ -2906,7 +2897,7 @@ impl Connection {
|
||||
}
|
||||
Some(Err(e)) => {
|
||||
log::error!("Failed to turn on privacy mode. {}", e);
|
||||
if !privacy_mode::is_in_privacy_mode() {
|
||||
if privacy_mode::is_in_privacy_mode() {
|
||||
let _ = Self::turn_off_privacy_to_msg(
|
||||
privacy_mode::INVALID_PRIVACY_MODE_CONN_ID,
|
||||
);
|
||||
|
||||
@@ -160,15 +160,8 @@ fn displays_to_msg(displays: Vec<DisplayInfo>) -> Message {
|
||||
|
||||
#[cfg(all(windows, feature = "virtual_display_driver"))]
|
||||
if crate::platform::is_installed() {
|
||||
let virtual_displays = crate::virtual_display_manager::get_virtual_displays();
|
||||
if !virtual_displays.is_empty() {
|
||||
let mut platform_additions = serde_json::Map::new();
|
||||
platform_additions.insert(
|
||||
"virtual_displays".into(),
|
||||
serde_json::json!(&virtual_displays),
|
||||
);
|
||||
pi.platform_additions = serde_json::to_string(&platform_additions).unwrap_or("".into());
|
||||
}
|
||||
let m = crate::virtual_display_manager::get_platform_additions();
|
||||
pi.platform_additions = serde_json::to_string(&m).unwrap_or_default();
|
||||
}
|
||||
|
||||
// current_display should not be used in server.
|
||||
@@ -227,10 +220,11 @@ pub(super) fn get_original_resolution(
|
||||
h: usize,
|
||||
) -> MessageField<Resolution> {
|
||||
#[cfg(all(windows, feature = "virtual_display_driver"))]
|
||||
let is_virtual_display = crate::virtual_display_manager::is_virtual_display(&display_name);
|
||||
let is_rustdesk_virtual_display =
|
||||
crate::virtual_display_manager::rustdesk_idd::is_virtual_display(&display_name);
|
||||
#[cfg(not(all(windows, feature = "virtual_display_driver")))]
|
||||
let is_virtual_display = false;
|
||||
Some(if is_virtual_display {
|
||||
let is_rustdesk_virtual_display = false;
|
||||
Some(if is_rustdesk_virtual_display {
|
||||
Resolution {
|
||||
width: 0,
|
||||
height: 0,
|
||||
@@ -382,8 +376,10 @@ pub fn try_get_displays() -> ResultType<Vec<Display>> {
|
||||
#[cfg(all(windows, feature = "virtual_display_driver"))]
|
||||
pub fn try_get_displays() -> ResultType<Vec<Display>> {
|
||||
let mut displays = Display::all()?;
|
||||
let no_displays_v = no_displays(&displays);
|
||||
virtual_display_manager::set_can_plug_out_all(!no_displays_v);
|
||||
if crate::platform::is_installed()
|
||||
&& no_displays(&displays)
|
||||
&& no_displays_v
|
||||
&& virtual_display_manager::is_virtual_display_supported()
|
||||
{
|
||||
log::debug!("no displays, create virtual display");
|
||||
|
||||
Reference in New Issue
Block a user