From 0f32e99d88b1b253631b62efea6a72dd82b5292f Mon Sep 17 00:00:00 2001 From: Seraphima Zykova Date: Thu, 24 Jun 2021 16:30:36 +0300 Subject: [PATCH] [FancyZones] Fixed monitor id for unified work areas (#11857) --- .../Utils/FancyZonesEditorIO.cs | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs index cbd07ecf07..48bd28b9b0 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs @@ -361,7 +361,38 @@ namespace FancyZonesEditor.Utils } else { - App.Overlay.Monitors[App.Overlay.CurrentDesktop].Device.Id = targetMonitorName; + // Monitors count + int count = int.Parse(argsParts[(int)CmdArgs.MonitorsCount], CultureInfo.InvariantCulture); + + // Parse the native monitor data + List nativeMonitorData = new List(); + const int monitorArgsCount = 6; + for (int i = 0; i < count; i++) + { + var nativeData = default(NativeMonitorData); + nativeData.MonitorId = argsParts[(int)CmdArgs.MonitorId + (i * monitorArgsCount)]; + nativeData.Dpi = int.Parse(argsParts[(int)CmdArgs.DPI + (i * monitorArgsCount)], CultureInfo.InvariantCulture); + nativeData.LeftCoordinate = int.Parse(argsParts[(int)CmdArgs.MonitorLeft + (i * monitorArgsCount)], CultureInfo.InvariantCulture); + nativeData.TopCoordinate = int.Parse(argsParts[(int)CmdArgs.MonitorTop + (i * monitorArgsCount)], CultureInfo.InvariantCulture); + nativeData.Width = int.Parse(argsParts[(int)CmdArgs.MonitorWidth + (i * monitorArgsCount)], CultureInfo.InvariantCulture); + nativeData.Height = int.Parse(argsParts[(int)CmdArgs.MonitorHeight + (i * monitorArgsCount)], CultureInfo.InvariantCulture); + + nativeMonitorData.Add(nativeData); + } + + Rect workAreaUnion = default; + + // Update monitors data + foreach (NativeMonitorData nativeData in nativeMonitorData) + { + Rect workArea = new Rect(nativeData.LeftCoordinate, nativeData.TopCoordinate, nativeData.Width, nativeData.Height); + workAreaUnion = Rect.Union(workAreaUnion, workArea); + } + + var monitor = new Monitor(workAreaUnion, workAreaUnion); + monitor.Device.Id = targetMonitorName; + + App.Overlay.Monitors.Add(monitor); } } catch (Exception) @@ -421,15 +452,16 @@ namespace FancyZonesEditor.Utils } else { - Rect workArea = default; - - foreach (NativeMonitorData nativeData in editorParams.Monitors) + if (editorParams.Monitors.Count != 1) { - Rect monitorWorkArea = new Rect(nativeData.LeftCoordinate, nativeData.TopCoordinate, nativeData.Width, nativeData.Height); - workArea = Rect.Union(workArea, monitorWorkArea); + return new ParsingResult(false); } + var nativeData = editorParams.Monitors[0]; + Rect workArea = new Rect(nativeData.LeftCoordinate, nativeData.TopCoordinate, nativeData.Width, nativeData.Height); + var monitor = new Monitor(workArea, workArea); + monitor.Device.Id = nativeData.MonitorId; App.Overlay.AddMonitor(monitor); } }