Skip to content

Commit d95fc89

Browse files
committed
Change custom module settings window to be kept constructed
1 parent 4f66475 commit d95fc89

File tree

2 files changed

+5
-12
lines changed

2 files changed

+5
-12
lines changed

VRCOSC.App/SDK/Modules/Module.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public abstract class Module
8383
private SerialisationManager moduleSerialisationManager = null!;
8484
private SerialisationManager persistenceSerialisationManager = null!;
8585

86-
internal Type? SettingsWindowType { get; private set; }
86+
internal IManagedWindow? SettingsWindow { get; private set; }
8787
internal Type? RuntimeViewType { get; private set; }
8888

8989
private bool isLoaded;
@@ -162,7 +162,9 @@ private void setSettingsWindow()
162162
if (!windowType.IsAssignableTo(typeof(IManagedWindow))) throw new Exception("Cannot set settings window that doesn't extend IManagedWindow");
163163
if (!windowType.HasConstructorThatAccepts(GetType())) throw new Exception($"Cannot set settings window that doesn't have a constructor that accepts type {GetType().Name}");
164164

165-
SettingsWindowType = windowType;
165+
var window = (Window)Activator.CreateInstance(windowType, this)!;
166+
window.Closing += (_, _) => Serialise();
167+
SettingsWindow = (IManagedWindow)window;
166168
}
167169

168170
private void generateMigrators()

VRCOSC.App/UI/Views/Modules/ModulesView.xaml.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Copyright (c) VolcanicArts. Licensed under the GPL-3.0 License.
22
// See the LICENSE file in the repository root for full license text.
33

4-
using System;
54
using System.Windows;
65
using VRCOSC.App.Modules;
76
using VRCOSC.App.Profiles;
@@ -65,15 +64,7 @@ private void SettingsButton_OnClick(object sender, RoutedEventArgs e)
6564
var element = (FrameworkElement)sender;
6665
var module = (Module)element.Tag;
6766

68-
if (module.SettingsWindowType is not null)
69-
{
70-
var settingsWindow = (IManagedWindow)Activator.CreateInstance(module.SettingsWindowType, args: [module])!;
71-
settingsWindowManager.TrySpawnChild(settingsWindow);
72-
}
73-
else
74-
{
75-
settingsWindowManager.TrySpawnChild(new ModuleSettingsWindow(module));
76-
}
67+
settingsWindowManager.TrySpawnChild(module.SettingsWindow ?? new ModuleSettingsWindow(module));
7768
}
7869

7970
private void InfoButton_OnClick(object sender, RoutedEventArgs e)

0 commit comments

Comments
 (0)