diff --git a/DisplayMagician/UIForms/ApplyingProfileForm.Designer.cs b/DisplayMagician/UIForms/ApplyingProfileForm.Designer.cs index 37d16f5..d638fb6 100644 --- a/DisplayMagician/UIForms/ApplyingProfileForm.Designer.cs +++ b/DisplayMagician/UIForms/ApplyingProfileForm.Designer.cs @@ -140,7 +140,6 @@ this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "DisplayMagician - Please Wait"; - this.TopMost = true; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ApplyingProfileForm_FormClosing); this.Load += new System.EventHandler(this.ApplyingProfileForm_Reposition); this.Shown += new System.EventHandler(this.ApplyingProfileForm_Shown); diff --git a/DisplayMagicianShared/NVIDIA/SurroundTopology.cs b/DisplayMagicianShared/NVIDIA/SurroundTopology.cs index 36a3488..e861938 100644 --- a/DisplayMagicianShared/NVIDIA/SurroundTopology.cs +++ b/DisplayMagicianShared/NVIDIA/SurroundTopology.cs @@ -62,14 +62,18 @@ namespace DisplayMagicianShared.NVIDIA string EDIDManufactureCode = ""; string friendlyName = ""; bool devicePathContainsUID5120 = false; - bool isNvidiaSurround = false; + bool isNvidiaEDID = false; + bool isNvidiaDeviceName = false; + bool isNvidiaDevicePath = false; + try { EDIDManufactureCode = pathTargetInfo.DisplayTarget.EDIDManufactureCode; SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Grabbed EDIDManufactureCode of {EDIDManufactureCode}."); if (string.Equals(EDIDManufactureCode, "NVS", StringComparison.InvariantCultureIgnoreCase)) { - isNvidiaSurround = true; + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: The EDIDManufactureCode of {EDIDManufactureCode} matches 'NVS', so this is an NVIDIA surround topology."); + isNvidiaEDID = true; } } catch (Exception ex) @@ -83,7 +87,8 @@ namespace DisplayMagicianShared.NVIDIA SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Grabbed Display FriendlyName of {friendlyName}."); if (string.Equals(friendlyName, "NV Surround", StringComparison.InvariantCultureIgnoreCase)) { - isNvidiaSurround = true; + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: The Display FriendlyName of {friendlyName} matches 'NV Surround', so this is an NVIDIA surround topology."); + isNvidiaDeviceName = true; } } catch (Exception ex) @@ -97,7 +102,8 @@ namespace DisplayMagicianShared.NVIDIA SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Testing if the Display DevicePath contains UID5120 = {devicePathContainsUID5120}."); if (devicePathContainsUID5120) { - isNvidiaSurround = true; + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: The Device Path contains UID5120, so this is an NVIDIA surround topology."); + isNvidiaDevicePath = true; } } catch (Exception ex) @@ -106,15 +112,16 @@ namespace DisplayMagicianShared.NVIDIA } // If the checks haven't passed, then we return null - if (!isNvidiaSurround) + if (!isNvidiaEDID && !isNvidiaDeviceName && !isNvidiaDevicePath) { - SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: As far as we can tell, this isn't an NVIDIA Surround window, so we're returning null."); + SharedLogger.logger.Warn($"SurroundTopology/FromPathTargetInfo: As far as we can tell, this isn't an NVIDIA Surround window, so we're returning null."); return null; } try { // Get parent DisplayConfig PathInfo by checking display targets + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Get parent DisplayConfig PathInfo by checking display targets."); var correspondingWindowsPathInfo = PathInfo.GetActivePaths() .FirstOrDefault( @@ -127,6 +134,7 @@ namespace DisplayMagicianShared.NVIDIA { // Get corresponding NvAPI PathInfo // If position is same, then the two paths are equal, after all position is whats important in path sources + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Get corresponding NvAPI PathInfo. If position is same, then the two paths are equal, after all position is whats important in path sources"); var correspondingNvidiaPathInfo = NvAPIWrapper.Display.PathInfo.GetDisplaysConfig() .FirstOrDefault( @@ -140,12 +148,14 @@ namespace DisplayMagicianShared.NVIDIA { // Get corresponding NvAPI PathTargetInfo // We now assume that there is only one target for a NvAPI PathInfo, in an other word, for now, it is not possible to have a cloned surround display + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Get corresponding NvAPI PathTargetInfo. We now assume that there is only one target for a NvAPI PathInfo, in an other word, for now, it is not possible to have a cloned surround display"); var correspondingNvidiaTargetInfo = correspondingNvidiaPathInfo.TargetsInfo.FirstOrDefault(); if (correspondingNvidiaTargetInfo != null) { // Get corresponding NvAPI Grid Topology // We also assume that the NVS monitor uses a similar display id to one of real physical monitors + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Get corresponding NvAPI Grid Topology. We also assume that the NVS monitor uses a similar display id to one of real physical monitors"); var correspondingNvidiaTopology = GridTopology.GetGridTopologies() .FirstOrDefault( @@ -154,8 +164,14 @@ namespace DisplayMagicianShared.NVIDIA if (correspondingNvidiaTopology != null) { + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: Return the new NVIDIA Topology SurroundTopology object"); return new SurroundTopology(correspondingNvidiaTopology); } + else + { + SharedLogger.logger.Trace($"SurroundTopology/FromPathTargetInfo: The correspondingNvidiaTopology SurroundTopology object wa null, so nothing to return"); + return null; + } } } } diff --git a/DisplayMagicianShared/Topology/PathTarget.cs b/DisplayMagicianShared/Topology/PathTarget.cs index 91063ce..819b22a 100644 --- a/DisplayMagicianShared/Topology/PathTarget.cs +++ b/DisplayMagicianShared/Topology/PathTarget.cs @@ -44,20 +44,29 @@ namespace DisplayMagicianShared.Topology if (surround != null) { - try - { - SurroundTopology = SurroundTopology.FromPathTargetInfo(targetInfo); - SharedLogger.logger.Trace($"PathTarget/PathTarget: The SurroundTopology object supplied was not null, and we found {SurroundTopology.Displays.Count()} displays involved in it {SurroundTopology.Columns}x{SurroundTopology.Rows}"); - } - catch (Exception ex) - { - SharedLogger.logger.Error(ex, $"PathTarget/PathTarget: A SurroundTopology object was supplied, but we had an exception getting the SurroundTopology from the PathTargetInfo object."); - } - + SharedLogger.logger.Trace($"PathTarget/PathTarget: This PathTarget supplied an NVIDIA surround object, so using the SurroundTopology supplied."); + SurroundTopology = surround; } else { - SharedLogger.logger.Trace($"PathTarget/PathTarget: This PathTarget doesn't use NVIDIA surround technology, so leaving the SurroundTopology null."); + + try + { + SurroundTopology = SurroundTopology.FromPathTargetInfo(targetInfo); + if (SurroundTopology != null) + { + SharedLogger.logger.Trace($"PathTarget/PathTarget: The SurroundTopology object supplied was null, so we created one ourselves. We found {SurroundTopology.Displays.Count()} displays involved in it {SurroundTopology.Columns}x{SurroundTopology.Rows}"); + } + else + { + SharedLogger.logger.Trace($"PathTarget/PathTarget: The SurroundTopology object supplied was null, so we tried to create one ourselves and failed. This is likely a non NVIDIA surround display profile."); + } + + } + catch (Exception ex) + { + SharedLogger.logger.Error(ex, $"PathTarget/PathTarget: A SurroundTopology object was not supplied, but we had an exception getting our own SurroundTopology from the PathTargetInfo object."); + } } }