Skip to content

Commit

Permalink
[Workspaces] Implement store of app window's size and position (#36086)
Browse files Browse the repository at this point in the history
* [Workspaces] Implement store of app window's size and position

* Modifying the default values to -1. The program will use the original default values for the first run.
  • Loading branch information
donlaci authored Dec 5, 2024
1 parent a9123bf commit 076461e
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 14 deletions.
26 changes: 25 additions & 1 deletion src/modules/Workspaces/WorkspacesEditor/App.config
Original file line number Diff line number Diff line change
@@ -1,9 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WorkspacesEditor.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false" />
</runtime>
<userSettings>
<WorkspacesEditor.Properties.Settings>
<setting name="Top" serializeAs="String">
<value>-1</value>
</setting>
<setting name="Left" serializeAs="String">
<value>-1</value>
</setting>
<setting name="Height" serializeAs="String">
<value>-1</value>
</setting>
<setting name="Width" serializeAs="String">
<value>-1</value>
</setting>
<setting name="Maximized" serializeAs="String">
<value>False</value>
</setting>
</WorkspacesEditor.Properties.Settings>
</userSettings>
</configuration>
53 changes: 46 additions & 7 deletions src/modules/Workspaces/WorkspacesEditor/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,28 @@ public MainWindow(MainViewModel mainViewModel)
MainViewModel = mainViewModel;
mainViewModel.SetMainWindow(this);

WindowInteropHelper windowInteropHelper = new WindowInteropHelper(this);
System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(windowInteropHelper.Handle);
double dpi = MonitorHelper.GetScreenDpiFromScreen(screen);
this.Height = screen.WorkingArea.Height / dpi * 0.90;
this.Width = screen.WorkingArea.Width / dpi * 0.75;
this.Top = screen.WorkingArea.Top + (int)(screen.WorkingArea.Height / dpi * 0.05);
this.Left = screen.WorkingArea.Left + (int)(screen.WorkingArea.Width / dpi * 0.125);
if (Properties.Settings.Default.Height == -1)
{
// This is the very first time the window is created. 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);
this.Height = screen.WorkingArea.Height / dpi * 0.90;
this.Width = screen.WorkingArea.Width / dpi * 0.75;
this.Top = screen.WorkingArea.Top + (int)(screen.WorkingArea.Height / dpi * 0.05);
this.Left = screen.WorkingArea.Left + (int)(screen.WorkingArea.Width / dpi * 0.125);
SavePosition();
}

this.Top = Properties.Settings.Default.Top;
this.Left = Properties.Settings.Default.Left;
this.Height = Properties.Settings.Default.Height;
this.Width = Properties.Settings.Default.Width;

if (Properties.Settings.Default.Maximized)
{
WindowState = WindowState.Maximized;
}

InitializeComponent();

Expand Down Expand Up @@ -73,8 +88,32 @@ public MainWindow(MainViewModel mainViewModel)
cancellationToken.Token);
}

private void SavePosition()
{
if (WindowState == WindowState.Maximized)
{
// Use the RestoreBounds as the current values will be 0, 0 and the size of the screen
Properties.Settings.Default.Top = RestoreBounds.Top;
Properties.Settings.Default.Left = RestoreBounds.Left;
Properties.Settings.Default.Height = RestoreBounds.Height;
Properties.Settings.Default.Width = RestoreBounds.Width;
Properties.Settings.Default.Maximized = true;
}
else
{
Properties.Settings.Default.Top = this.Top;
Properties.Settings.Default.Left = this.Left;
Properties.Settings.Default.Height = this.Height;
Properties.Settings.Default.Width = this.Width;
Properties.Settings.Default.Maximized = false;
}

Properties.Settings.Default.Save();
}

private void OnClosing(object sender, EventArgs e)
{
SavePosition();
cancellationToken.Dispose();
App.Current.Shutdown();
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="WorkspacesEditor.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="Top" Type="System.Double" Scope="User">
<Value Profile="(Default)">-1</Value>
</Setting>
<Setting Name="Left" Type="System.Double" Scope="User">
<Value Profile="(Default)">-1</Value>
</Setting>
<Setting Name="Height" Type="System.Double" Scope="User">
<Value Profile="(Default)">-1</Value>
</Setting>
<Setting Name="Width" Type="System.Double" Scope="User">
<Value Profile="(Default)">-1</Value>
</Setting>
<Setting Name="Maximized" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

0 comments on commit 076461e

Please sign in to comment.