protected override void OnClosing(CancelEventArgs e) { //get everything saved (under the old collection name, if we are changing the name and restarting) _libraryClosingEvent.Raise(null); if (!string.IsNullOrEmpty(_nameToChangeCollectionUponClosing) && _nameToChangeCollectionUponClosing != _collectionSettings.CollectionName && UserWantsToOpeReopenProject) { // Without checking and resetting this flag, Linux endlessly spawns new instances. Apparently the Mono runtime // calls OnClosing again as a result of calling Program.RestartBloom() which calls Application.Exit(). UserWantsToOpeReopenProject = false; //Actually restart Bloom with a parameter requesting this name change. It's way more likely to succeed //when this run isn't holding onto anything. try { var existingDirectoryPath = Path.GetDirectoryName(_collectionSettings.SettingsFilePath); var parentDirectory = Path.GetDirectoryName(existingDirectoryPath); var newDirectoryPath = Path.Combine(parentDirectory, _nameToChangeCollectionUponClosing); Program.RestartBloom(string.Format("--rename \"{0}\" \"{1}\" ", existingDirectoryPath, newDirectoryPath)); } catch (Exception error) { SIL.Reporting.ErrorReport.NotifyUserOfProblem(error, "Sorry, Bloom failed to even prepare for the rename of the project to '{0}'", _nameToChangeCollectionUponClosing); } } base.OnClosing(e); }