1+ using System . Reactive . Linq ;
12using System . Reactive . Subjects ;
23using System . Reflection ;
34
@@ -49,7 +50,10 @@ public override async void OnFrameworkInitializationCompleted()
4950
5051 var mainViewModel = await this . InitializeApp ( ) ;
5152
52- this . desktop . MainWindow = await this . CreateMainWindow ( mainViewModel ) ;
53+ var mainWindow = this . CreateMainWindow ( mainViewModel ) ;
54+ await this . SetWindowSizeFromState ( mainWindow ) ;
55+
56+ this . desktop . MainWindow = mainWindow ;
5357 this . desktop . MainWindow . Show ( ) ;
5458
5559 this . desktop . Exit += this . OnExit ;
@@ -84,10 +88,18 @@ private async Task<MainViewModel> InitializeApp()
8488 var mainViewModel = new MainViewModel ( appSettings ) ;
8589 openExternally . InvokeCommand ( mainViewModel . OpenExternally ) ;
8690
91+ mainViewModel . PreferencesSaved
92+ . Select ( p => p . AppTheme )
93+ . StartWith ( appSettings . AppTheme )
94+ . DistinctUntilChanged ( )
95+ . ObserveOn ( RxApp . MainThreadScheduler )
96+ . Subscribe ( this . SetTheme ) ;
97+
8798 mainViewModel . PreferencesSaved
8899 . Select ( p => p . AppThemeVariant )
89100 . StartWith ( appSettings . AppThemeVariant )
90101 . DistinctUntilChanged ( )
102+ . ObserveOn ( RxApp . MainThreadScheduler )
91103 . Subscribe ( this . SetThemeVariant ) ;
92104
93105 return mainViewModel ;
@@ -169,22 +181,13 @@ private JsonConfigurationProvider JsonProvider(string directory, string fileName
169181 Optional = true
170182 } ) ;
171183
172- private async Task < MainWindow > CreateMainWindow ( MainViewModel viewModel )
184+ private MainWindow CreateMainWindow ( MainViewModel viewModel )
173185 {
174- var state = await RxApp . SuspensionHost . ObserveAppState < AppState > ( ) . Take ( 1 ) ;
175-
176186 var window = new MainWindow
177187 {
178188 ViewModel = viewModel
179189 } ;
180190
181- if ( state . IsInitialized )
182- {
183- window . Width = state . WindowWidth ;
184- window . Height = state . WindowHeight ;
185- window . WindowState = state . IsWindowMaximized ? WindowState . Maximized : WindowState . Normal ;
186- }
187-
188191 var windowStateChanged = window
189192 . GetObservable ( Window . WindowStateProperty )
190193 . DistinctUntilChanged ( )
@@ -207,9 +210,21 @@ private async Task<MainWindow> CreateMainWindow(MainViewModel viewModel)
207210 return window ;
208211 }
209212
213+ private async Task SetWindowSizeFromState ( MainWindow window )
214+ {
215+ var state = await RxApp . SuspensionHost . ObserveAppState < AppState > ( ) . Take ( 1 ) ;
216+
217+ if ( state . IsInitialized )
218+ {
219+ window . Width = state . WindowWidth ;
220+ window . Height = state . WindowHeight ;
221+ window . WindowState = state . IsWindowMaximized ? WindowState . Maximized : WindowState . Normal ;
222+ }
223+ }
224+
210225 private void SetTheme ( AppTheme appTheme )
211226 {
212- this . Styles . Insert ( 0 , appTheme switch
227+ this . Styles [ 0 ] = appTheme switch
213228 {
214229 AppTheme . MacOS => new MacOSTheme ( ) ,
215230 AppTheme . Simple => new SimpleTheme ( ) ,
@@ -218,7 +233,23 @@ private void SetTheme(AppTheme appTheme)
218233 PreferUserAccentColor = true ,
219234 PreferSystemTheme = true
220235 }
221- } ) ;
236+ } ;
237+
238+ if ( this . desktop . MainWindow is MainWindow window )
239+ {
240+ var newMainWindow = this . CreateMainWindow ( window . ViewModel ! ) ;
241+
242+ newMainWindow . Width = window . Width ;
243+ newMainWindow . Height = window . Height ;
244+ newMainWindow . WindowState = window . WindowState ;
245+
246+ this . desktop . MainWindow = newMainWindow ;
247+ this . desktop . MainWindow . Show ( ) ;
248+
249+ newMainWindow . Position = window . Position ;
250+
251+ window . Close ( ) ;
252+ }
222253 }
223254
224255 private void SetThemeVariant ( AppThemeVariant appThemeVariant )
0 commit comments