From 3f4ac1cc5d02b525e8f09acd4e221970b711a3a9 Mon Sep 17 00:00:00 2001 From: Xpl0itR Date: Fri, 22 Nov 2019 19:24:42 +0000 Subject: [PATCH] catch glib unhandled exceptions --- Ryujinx/Program.cs | 19 ++++++++++++++----- Ryujinx/Ui/MainWindow.cs | 16 ++-------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index 8148758710..50019f3410 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -18,6 +18,7 @@ namespace Ryujinx AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; + GLib.ExceptionManager.UnhandledException += Glib_UnhandledException; Profile.Initialize(); @@ -30,11 +31,7 @@ namespace Ryujinx MainWindow.CreateErrorDialog($"Key file was not found. Please refer to `KEYS.md` for more info"); } - Application gtkApplication = new Application("Ryujinx.Ryujinx", GLib.ApplicationFlags.None); - MainWindow mainWindow = new MainWindow(gtkApplication); - - gtkApplication.Register(GLib.Cancellable.Current); - gtkApplication.AddWindow(mainWindow); + MainWindow mainWindow = new MainWindow(); mainWindow.Show(); if (args.Length == 1) @@ -61,5 +58,17 @@ namespace Ryujinx Logger.Shutdown(); } } + + private static void Glib_UnhandledException(GLib.UnhandledExceptionArgs e) + { + Exception exception = e.ExceptionObject as Exception; + + Logger.PrintError(LogClass.Application, $"Unhandled exception caught: {exception}"); + + if (e.IsTerminating) + { + Logger.Shutdown(); + } + } } } \ No newline at end of file diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index 07cd372a6e..a3e6ed27d6 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -45,8 +45,6 @@ namespace Ryujinx.UI private static GlScreen _screen; - private static Application _gtkApplication; - private static ListStore _tableStore; private static bool _updatingGameTable; @@ -99,9 +97,9 @@ namespace Ryujinx.UI #pragma warning restore CS0649 #pragma warning restore IDE0044 - public MainWindow(Application gtkApplication) : this(new Builder("Ryujinx.Ui.MainWindow.glade"), gtkApplication) { } + public MainWindow() : this(new Builder("Ryujinx.Ui.MainWindow.glade")) { } - private MainWindow(Builder builder, Application gtkApplication) : base(builder.GetObject("_mainWin").Handle) + private MainWindow(Builder builder) : base(builder.GetObject("_mainWin").Handle) { builder.Autoconnect(this); @@ -115,8 +113,6 @@ namespace Ryujinx.UI _device = new HLE.Switch(_renderer, _audioOut); - _gtkApplication = gtkApplication; - _treeView = _gameTable; Configuration.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json")); @@ -608,10 +604,6 @@ namespace Ryujinx.UI private void Settings_Pressed(object sender, EventArgs args) { SwitchSettings settingsWin = new SwitchSettings(_device); - - _gtkApplication.Register(GLib.Cancellable.Current); - _gtkApplication.AddWindow(settingsWin); - settingsWin.Show(); } @@ -632,10 +624,6 @@ namespace Ryujinx.UI private void About_Pressed(object sender, EventArgs args) { AboutWindow aboutWin = new AboutWindow(); - - _gtkApplication.Register(GLib.Cancellable.Current); - _gtkApplication.AddWindow(aboutWin); - aboutWin.Show(); }