mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-01-19 08:23:01 +08:00
fix: win, virtual display, privacy mode (#8537)
Restore display settings. Only restore by the display registry settings. Do not change display settings twice when turning off privacy mode. Only restore the registry values. Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
parent
750368af7b
commit
bd334769fa
@ -34,7 +34,7 @@ const CONFIG_KEY_REG_RECOVERY: &str = "reg_recovery";
|
|||||||
struct Display {
|
struct Display {
|
||||||
dm: DEVMODEW,
|
dm: DEVMODEW,
|
||||||
name: [WCHAR; 32],
|
name: [WCHAR; 32],
|
||||||
primary: bool,
|
_primary: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PrivacyModeImpl {
|
pub struct PrivacyModeImpl {
|
||||||
@ -135,7 +135,7 @@ impl PrivacyModeImpl {
|
|||||||
let display = Display {
|
let display = Display {
|
||||||
dm,
|
dm,
|
||||||
name: dd.DeviceName,
|
name: dd.DeviceName,
|
||||||
primary,
|
_primary: primary,
|
||||||
};
|
};
|
||||||
|
|
||||||
let ds = virtual_display_manager::get_cur_device_string();
|
let ds = virtual_display_manager::get_cur_device_string();
|
||||||
@ -149,40 +149,11 @@ impl PrivacyModeImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn restore(&mut self) {
|
|
||||||
Self::restore_displays(&self.displays);
|
|
||||||
Self::restore_displays(&self.virtual_displays);
|
|
||||||
allow_err!(Self::commit_change_display(0));
|
|
||||||
self.restore_plug_out_monitor();
|
|
||||||
self.displays.clear();
|
|
||||||
self.virtual_displays.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn restore_plug_out_monitor(&mut self) {
|
fn restore_plug_out_monitor(&mut self) {
|
||||||
let _ = virtual_display_manager::plug_out_monitor_indices(&self.virtual_displays_added);
|
let _ = virtual_display_manager::plug_out_monitor_indices(&self.virtual_displays_added);
|
||||||
self.virtual_displays_added.clear();
|
self.virtual_displays_added.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn restore_displays(displays: &[Display]) {
|
|
||||||
for display in displays {
|
|
||||||
unsafe {
|
|
||||||
let mut dm = display.dm.clone();
|
|
||||||
let flags = if display.primary {
|
|
||||||
CDS_NORESET | CDS_UPDATEREGISTRY | CDS_SET_PRIMARY
|
|
||||||
} else {
|
|
||||||
CDS_NORESET | CDS_UPDATEREGISTRY
|
|
||||||
};
|
|
||||||
ChangeDisplaySettingsExW(
|
|
||||||
display.name.as_ptr(),
|
|
||||||
&mut dm,
|
|
||||||
std::ptr::null_mut(),
|
|
||||||
flags,
|
|
||||||
std::ptr::null_mut(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn set_primary_display(&mut self) -> ResultType<()> {
|
fn set_primary_display(&mut self) -> ResultType<()> {
|
||||||
let display = &self.virtual_displays[0];
|
let display = &self.virtual_displays[0];
|
||||||
|
|
||||||
@ -433,7 +404,7 @@ impl PrivacyMode for PrivacyModeImpl {
|
|||||||
) -> ResultType<()> {
|
) -> ResultType<()> {
|
||||||
self.check_off_conn_id(conn_id)?;
|
self.check_off_conn_id(conn_id)?;
|
||||||
super::win_input::unhook()?;
|
super::win_input::unhook()?;
|
||||||
self.restore();
|
self.restore_plug_out_monitor();
|
||||||
restore_reg_connectivity(false);
|
restore_reg_connectivity(false);
|
||||||
|
|
||||||
if self.conn_id != INVALID_PRIVACY_MODE_CONN_ID {
|
if self.conn_id != INVALID_PRIVACY_MODE_CONN_ID {
|
||||||
|
Loading…
Reference in New Issue
Block a user