mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 11:16:51 +02:00
[Workspaces] re-implementing Monitor ID usage (#35427)
This commit is contained in:
@@ -360,38 +360,7 @@ 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}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
_monitorSetup = Parent.GetMonitorForApp(this);
|
||||
}
|
||||
|
||||
return _monitorSetup;
|
||||
|
||||
@@ -374,5 +374,44 @@ namespace WorkspacesEditor.Models
|
||||
app.IsExpanded = false;
|
||||
}
|
||||
}
|
||||
|
||||
internal MonitorSetup GetMonitorForApp(Application app)
|
||||
{
|
||||
var monitorSetup = Monitors.Where(x => x.MonitorNumber == app.MonitorNumber).FirstOrDefault();
|
||||
if (monitorSetup == null)
|
||||
{
|
||||
// monitors changed: try to determine monitor id based on middle point
|
||||
int middleX = app.Position.X + (app.Position.Width / 2);
|
||||
int middleY = app.Position.Y + (app.Position.Height / 2);
|
||||
var monitorCandidate = Monitors.Where(x =>
|
||||
(x.MonitorDpiUnawareBounds.Left < middleX) &&
|
||||
(x.MonitorDpiUnawareBounds.Right > middleX) &&
|
||||
(x.MonitorDpiUnawareBounds.Top < middleY) &&
|
||||
(x.MonitorDpiUnawareBounds.Bottom > middleY)).FirstOrDefault();
|
||||
if (monitorCandidate != null)
|
||||
{
|
||||
app.MonitorNumber = monitorCandidate.MonitorNumber;
|
||||
return monitorCandidate;
|
||||
}
|
||||
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 = Monitors.OrderBy(x => Math.Abs(x.MonitorDpiUnawareBounds.Left) + Math.Abs(x.MonitorDpiUnawareBounds.Top)).FirstOrDefault();
|
||||
if (monitorCandidate != null)
|
||||
{
|
||||
app.MonitorNumber = monitorCandidate.MonitorNumber;
|
||||
return monitorCandidate;
|
||||
}
|
||||
else
|
||||
{
|
||||
// no monitors defined at all.
|
||||
Logger.LogError($"Wrong workspace setup. No monitors defined for the workspace: {Name}.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return monitorSetup;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user