/// <summary> /// Runs the application. /// </summary> /// <typeparam name="T">The type for the main window class.</typeparam> /// <param name="uniqueInstance">Unique instance string.</param> /// <param name="applicationInfo">The application description.</param> /// <param name="args">Command line arguments.</param> /// <param name="splashScreenImage">Splash screen image.</param> public static void RunApplication <T>(string uniqueInstance, IApplicationInfo applicationInfo, string[] args, string splashScreenImage) where T : Gtk.Window, IMainWindow, new() { // TODO: Single instance check / activate // Documentation of Gtk.Application.Init(progname, ref args) implies that // a single instance should be enforced. Sadly, that does not seem to work // as expected. Perhaps it's the C#iness of it all. // show splash screen AppInfo = applicationInfo; _mainWindowType = typeof(T); _splashScreenResource = splashScreenImage; Gtk.Application.Init(uniqueInstance, ref args); SettingsBase.LoadApplicationSettings(); var window = new T(); Instance.MainWindow = window; Instance.ReadyState |= AppReadyState.MainWindowSourced; Gtk.Window.DefaultIcon = window.Icon; var splashImage = _mainWindowType.LoadImageResource(_splashScreenResource); var splashScreen = new SplashScreen(splashImage); // creating also shows splashScreen.TransientFor = window; window.Data["SplashScreen"] = splashScreen; GLib.Timeout.Add(1000, FinishInitialization); Gtk.Application.Run(); foreach (var settings in Instance.Settings) { settings.Save(); } SettingsBase.SaveApplicationSettings(); }