mirror of
https://github.com/Stone-Red-Code/DesktopMagic.git
synced 2026-09-04 00:46:12 +02:00
Fix closing of plugin windows
This commit is contained in:
@@ -188,71 +188,18 @@ namespace DesktopMagic
|
||||
Settings.CurrentLayout.Plugins.Add(pluginId, pluginSettings);
|
||||
}
|
||||
|
||||
PluginWindow window;
|
||||
|
||||
if (builtInPlugins.TryGetValue(internalPluginData.Metadata, out Type? pluginType))
|
||||
if (WindowNames.Contains(internalPluginData.Metadata.Id.ToString()) || !pluginSettings.Enabled)
|
||||
{
|
||||
window = new PluginWindow((Api.Plugin)Activator.CreateInstance(pluginType)!, internalPluginData.Metadata, pluginSettings)
|
||||
{
|
||||
Title = internalPluginData.Metadata.Name
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
window = new PluginWindow(internalPluginData.Metadata, pluginSettings, internalPluginData.DirectoryPath)
|
||||
{
|
||||
Title = internalPluginData.Metadata.Name
|
||||
};
|
||||
}
|
||||
|
||||
blockWindowsClosing = false;
|
||||
|
||||
if (!WindowNames.Contains(window.Title) && pluginSettings.Enabled)
|
||||
{
|
||||
_ = Task.Run(() =>
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
Action? onPluginLoaded = null;
|
||||
onPluginLoaded = () =>
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
if (!optionsComboBox.Items.Contains(internalPluginData.Metadata))
|
||||
{
|
||||
_ = optionsComboBox.Items.Add(internalPluginData.Metadata);
|
||||
}
|
||||
optionsComboBox.SelectedIndex = -1;
|
||||
optionsComboBox.SelectedIndex = optionsComboBox.Items.IndexOf(internalPluginData.Metadata);
|
||||
window.PluginLoaded -= onPluginLoaded;
|
||||
});
|
||||
};
|
||||
window.OnExit += () =>
|
||||
{
|
||||
pluginSettings.Enabled = false;
|
||||
};
|
||||
window.PluginLoaded += onPluginLoaded;
|
||||
|
||||
window.ShowInTaskbar = false;
|
||||
window.Show();
|
||||
window.ContentRendered += DisplayWindow_ContentRendered;
|
||||
window.Closing += DisplayWindow_Closing;
|
||||
Windows.Add(window);
|
||||
WindowNames.Add(window.Title);
|
||||
});
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
int index = WindowNames.IndexOf(window.Title);
|
||||
int index = WindowNames.IndexOf(internalPluginData.Metadata.Id.ToString());
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
//Not sure how to handle this
|
||||
try
|
||||
{
|
||||
blockWindowsClosing = false;
|
||||
Windows[index].Close();
|
||||
|
||||
blockWindowsClosing = true;
|
||||
Windows.RemoveAt(index);
|
||||
WindowNames.RemoveAt(index);
|
||||
}
|
||||
@@ -261,9 +208,52 @@ namespace DesktopMagic
|
||||
App.Logger.Log(ex.Message, "Main", LogSeverity.Error);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
blockWindowsClosing = true;
|
||||
PluginWindow window;
|
||||
|
||||
if (builtInPlugins.TryGetValue(internalPluginData.Metadata, out Type? pluginType))
|
||||
{
|
||||
window = new PluginWindow((Api.Plugin)Activator.CreateInstance(pluginType)!, internalPluginData.Metadata, pluginSettings)
|
||||
{
|
||||
Title = internalPluginData.Metadata.Id.ToString()
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
window = new PluginWindow(internalPluginData.Metadata, pluginSettings, internalPluginData.DirectoryPath)
|
||||
{
|
||||
Title = internalPluginData.Metadata.Id.ToString()
|
||||
};
|
||||
}
|
||||
|
||||
Action? onPluginLoaded = null;
|
||||
onPluginLoaded = () =>
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
if (!optionsComboBox.Items.Contains(internalPluginData.Metadata))
|
||||
{
|
||||
_ = optionsComboBox.Items.Add(internalPluginData.Metadata);
|
||||
}
|
||||
optionsComboBox.SelectedIndex = -1;
|
||||
optionsComboBox.SelectedIndex = optionsComboBox.Items.IndexOf(internalPluginData.Metadata);
|
||||
window.PluginLoaded -= onPluginLoaded;
|
||||
});
|
||||
};
|
||||
window.OnExit += () =>
|
||||
{
|
||||
pluginSettings.Enabled = false;
|
||||
};
|
||||
window.PluginLoaded += onPluginLoaded;
|
||||
|
||||
window.ShowInTaskbar = false;
|
||||
window.Show();
|
||||
window.ContentRendered += DisplayWindow_ContentRendered;
|
||||
window.Closing += DisplayWindow_Closing;
|
||||
Windows.Add(window);
|
||||
WindowNames.Add(window.Title);
|
||||
}
|
||||
|
||||
private void DisplayWindow_ContentRendered(object? sender, EventArgs e)
|
||||
|
||||
@@ -28,9 +28,9 @@ public partial class PluginWindow : Window
|
||||
public event Action? OnExit;
|
||||
|
||||
private readonly PluginSettings settings;
|
||||
private readonly System.Timers.Timer? updateTimer;
|
||||
private Thread? pluginThread;
|
||||
private System.Timers.Timer? valueTimer;
|
||||
|
||||
private Plugin? pluginClassInstance;
|
||||
|
||||
public bool IsRunning { get; private set; } = true;
|
||||
@@ -55,12 +55,12 @@ public partial class PluginWindow : Window
|
||||
Owner = w;
|
||||
w.Hide();
|
||||
|
||||
System.Timers.Timer t = new System.Timers.Timer
|
||||
updateTimer = new System.Timers.Timer
|
||||
{
|
||||
Interval = 100
|
||||
};
|
||||
t.Elapsed += UpdateTimer_Elapsed;
|
||||
t.Start();
|
||||
updateTimer.Elapsed += UpdateTimer_Elapsed;
|
||||
updateTimer.Start();
|
||||
|
||||
PluginMetadata = pluginMetadata;
|
||||
this.settings = settings;
|
||||
@@ -163,6 +163,11 @@ public partial class PluginWindow : Window
|
||||
border.CornerRadius = new CornerRadius(settings.Theme.CornerRadius);
|
||||
}
|
||||
});
|
||||
|
||||
if (!IsRunning)
|
||||
{
|
||||
updateTimer?.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadPlugin()
|
||||
@@ -378,8 +383,8 @@ public partial class PluginWindow : Window
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
App.Logger.Log($"\"{PluginMetadata}\" - Stopping plugin", "Plugin");
|
||||
pluginClassInstance?.Stop();
|
||||
IsRunning = false;
|
||||
pluginClassInstance?.Stop();
|
||||
}
|
||||
|
||||
#region Window Events
|
||||
|
||||
Reference in New Issue
Block a user