Skip to content

Commit

Permalink
[Workspaces] fixing bug: editor starts outside of visible desktop area (
Browse files Browse the repository at this point in the history
#36769)

* [Workspaces] fixing bug: editor starts outside of visible desktop area

* Update src/modules/Workspaces/WorkspacesEditor/MainWindow.xaml.cs

Co-authored-by: Seraphima Zykova <[email protected]>

---------

Co-authored-by: Seraphima Zykova <[email protected]>
  • Loading branch information
donlaci and SeraphimaZykova authored Jan 16, 2025
1 parent 315059f commit 603379a
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/modules/Workspaces/WorkspacesEditor/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
// See the LICENSE file in the project root for more information.

using System;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Interop;

using ManagedCommon;
using Microsoft.PowerToys.Telemetry;
using WorkspacesEditor.Utils;
Expand All @@ -30,9 +31,9 @@ public MainWindow(MainViewModel mainViewModel)
MainViewModel = mainViewModel;
mainViewModel.SetMainWindow(this);

if (Properties.Settings.Default.Height == -1)
if (Properties.Settings.Default.Height == -1 || !IsEditorInsideVisibleArea())
{
// This is the very first time the window is created. Place it on the screen center
// This is the very first time the window is created or it would be placed outside the visible area (monitor rearrangement). Place it on the screen center
WindowInteropHelper windowInteropHelper = new WindowInteropHelper(this);
System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(windowInteropHelper.Handle);
double dpi = MonitorHelper.GetScreenDpiFromScreen(screen);
Expand Down Expand Up @@ -88,6 +89,20 @@ public MainWindow(MainViewModel mainViewModel)
cancellationToken.Token);
}

private bool IsEditorInsideVisibleArea()
{
System.Windows.Forms.Screen[] allScreens = MonitorHelper.GetDpiUnawareScreens();
Rectangle commonBounds = allScreens[0].Bounds;
for (int screenIndex = 1; screenIndex < allScreens.Length; screenIndex++)
{
Rectangle rectangle = allScreens[screenIndex].Bounds;
commonBounds = Rectangle.Union(rectangle, commonBounds);
}

Rectangle editorBounds = new Rectangle((int)Properties.Settings.Default.Left, (int)Properties.Settings.Default.Top, (int)Properties.Settings.Default.Width, (int)Properties.Settings.Default.Height);
return editorBounds.IntersectsWith(commonBounds);
}

private void SavePosition()
{
if (WindowState == WindowState.Maximized)
Expand Down

0 comments on commit 603379a

Please sign in to comment.