[Workspaces] add monitor detection (#35018)

This commit is contained in:
Laszlo Nemeth 2024-09-25 13:38:57 +02:00 committed by GitHub
parent a8b858f612
commit 605a16d95c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -358,6 +358,37 @@ namespace WorkspacesEditor.Models
if (_monitorSetup == null)
{
_monitorSetup = Parent.Monitors.Where(x => x.MonitorNumber == MonitorNumber).FirstOrDefault();
if (_monitorSetup == null)
{
// monitors changed: try to determine monitor id based on middle point
int middleX = Position.X + (Position.Width / 2);
int middleY = Position.Y + (Position.Height / 2);
var monitorCandidate = Parent.Monitors.Where(x =>
(x.MonitorDpiUnawareBounds.Left < middleX) &&
(x.MonitorDpiUnawareBounds.Right > middleX) &&
(x.MonitorDpiUnawareBounds.Top < middleY) &&
(x.MonitorDpiUnawareBounds.Bottom > middleY)).FirstOrDefault();
if (monitorCandidate != null)
{
_monitorSetup = monitorCandidate;
MonitorNumber = monitorCandidate.MonitorNumber;
}
else
{
// monitors and even the app's area unknown, set the main monitor (which is closer to (0,0)) as the app's monitor
monitorCandidate = Parent.Monitors.OrderBy(x => Math.Abs(x.MonitorDpiUnawareBounds.Left) + Math.Abs(x.MonitorDpiUnawareBounds.Top)).FirstOrDefault();
if (monitorCandidate != null)
{
_monitorSetup = monitorCandidate;
MonitorNumber = monitorCandidate.MonitorNumber;
}
else
{
// no monitors defined at all.
Logger.LogError($"Wrong workspace setup. No monitors defined for the workspace: {Parent.Name}.");
}
}
}
}
return _monitorSetup;