mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-07-05 04:31:37 +02:00
fix(wm): handle "rdpudd chained dd" edge case
This commit builds on these changes in win32-display-data: https://github.com/LGUG2Z/win32-display-data/commit/32a45cebf132c3d651ee22c0c40033a6b7edc945p With the addition of lenient fallbacks when looking up display device information for "RDPUDD Chained DD" virtual display adapters, komorebi will now set Monitor.device and Monitor.device_id to "UNKNOWN" as this virtual mirror display driver will never have a reported DeviceID. This limitation for "RDPUDD Chained DD" devices is also noted in a Chromium issue: https://codereview.chromium.org/2557513005/ fix #883
This commit is contained in:
@@ -67,11 +67,17 @@ pub fn attached_display_devices() -> color_eyre::Result<Vec<Monitor>> {
|
|||||||
.flatten()
|
.flatten()
|
||||||
.map(|display| {
|
.map(|display| {
|
||||||
let path = display.device_path;
|
let path = display.device_path;
|
||||||
let mut split: Vec<_> = path.split('#').collect();
|
|
||||||
split.remove(0);
|
let (device, device_id) = if path.is_empty() {
|
||||||
split.remove(split.len() - 1);
|
(String::from("UNKNOWN"), String::from("UNKNOWN"))
|
||||||
let device = split[0].to_string();
|
} else {
|
||||||
let device_id = split.join("-");
|
let mut split: Vec<_> = path.split('#').collect();
|
||||||
|
split.remove(0);
|
||||||
|
split.remove(split.len() - 1);
|
||||||
|
let device = split[0].to_string();
|
||||||
|
let device_id = split.join("-");
|
||||||
|
(device, device_id)
|
||||||
|
};
|
||||||
|
|
||||||
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
||||||
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
||||||
|
|||||||
+22
-10
@@ -239,11 +239,17 @@ impl WindowsApi {
|
|||||||
pub fn load_monitor_information(monitors: &mut Ring<Monitor>) -> Result<()> {
|
pub fn load_monitor_information(monitors: &mut Ring<Monitor>) -> Result<()> {
|
||||||
'read: for display in win32_display_data::connected_displays_all().flatten() {
|
'read: for display in win32_display_data::connected_displays_all().flatten() {
|
||||||
let path = display.device_path.clone();
|
let path = display.device_path.clone();
|
||||||
let mut split: Vec<_> = path.split('#').collect();
|
|
||||||
split.remove(0);
|
let (device, device_id) = if path.is_empty() {
|
||||||
split.remove(split.len() - 1);
|
(String::from("UNKNOWN"), String::from("UNKNOWN"))
|
||||||
let device = split[0].to_string();
|
} else {
|
||||||
let device_id = split.join("-");
|
let mut split: Vec<_> = path.split('#').collect();
|
||||||
|
split.remove(0);
|
||||||
|
split.remove(split.len() - 1);
|
||||||
|
let device = split[0].to_string();
|
||||||
|
let device_id = split.join("-");
|
||||||
|
(device, device_id)
|
||||||
|
};
|
||||||
|
|
||||||
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
||||||
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
||||||
@@ -809,11 +815,17 @@ impl WindowsApi {
|
|||||||
for display in win32_display_data::connected_displays_all().flatten() {
|
for display in win32_display_data::connected_displays_all().flatten() {
|
||||||
if display.hmonitor == hmonitor {
|
if display.hmonitor == hmonitor {
|
||||||
let path = display.device_path;
|
let path = display.device_path;
|
||||||
let mut split: Vec<_> = path.split('#').collect();
|
|
||||||
split.remove(0);
|
let (device, device_id) = if path.is_empty() {
|
||||||
split.remove(split.len() - 1);
|
(String::from("UNKNOWN"), String::from("UNKNOWN"))
|
||||||
let device = split[0].to_string();
|
} else {
|
||||||
let device_id = split.join("-");
|
let mut split: Vec<_> = path.split('#').collect();
|
||||||
|
split.remove(0);
|
||||||
|
split.remove(split.len() - 1);
|
||||||
|
let device = split[0].to_string();
|
||||||
|
let device_id = split.join("-");
|
||||||
|
(device, device_id)
|
||||||
|
};
|
||||||
|
|
||||||
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
let name = display.device_name.trim_start_matches(r"\\.\").to_string();
|
||||||
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
let name = name.split('\\').collect::<Vec<_>>()[0].to_string();
|
||||||
|
|||||||
Reference in New Issue
Block a user