void OnMainWindowClosed(object sender, EventArgs e) { this.thisWindow.Dispatcher.BeginInvoke((Action)(() => { // We need to re-establish the main window. It might even be us now! this.mainWindowDocumentTracker.ActiveDocumentChanged -= OnMainWindowActiveDocumentChanged; this.mainWindow.Closed -= OnMainWindowClosed; this.mainWindow = ToolsUIApplication.Instance.MainToolsUIWindow; if (this.thisWindow != this.mainWindow) { this.mainWindowDocumentTracker = this.mainWindow.ServiceProvider.GetService(typeof(IActiveDocumentTracker)) as IActiveDocumentTracker; } else { this.mainWindowDocumentTracker = null; } if (this.mainWindowDocumentTracker != null) { this.mainWindowDocumentTracker.ActiveDocumentChanged += OnMainWindowActiveDocumentChanged; this.activeDocumentCookie.WrappedDocument = this.mainWindowDocumentTracker.ActiveDocument; this.IsTrackingMainWindow = true; this.mainWindow.Closed += OnMainWindowClosed; } else { this.documentList.Remove(this.activeDocumentCookie); this.activeDocumentCookie = null; this.IsTrackingMainWindow = false; AssignShortcuts(); } }), DispatcherPriority.Background); }
public WindowDocumentTracker(ToolsUIWindow window, IServiceProvider serviceProvider) : base(serviceProvider) { this.thisWindow = window; this.mainWindow = ToolsUIApplication.Instance.MainToolsUIWindow ?? window; // If MainToolsUIWindow is null, the window is (about to be) the main window this.documentList = new ObservableCollection<DocumentWrapper>(); if (this.thisWindow != this.mainWindow) { // This is not the main window. All secondary windows are born tracking the main window's // active document. this.mainWindowDocumentTracker = this.mainWindow.ServiceProvider.GetService(typeof(IActiveDocumentTracker)) as IActiveDocumentTracker; if (this.mainWindowDocumentTracker != null) { this.mainWindowDocumentTracker.ActiveDocumentChanged += OnMainWindowActiveDocumentChanged; this.activeDocumentCookie = new ActiveDocumentCookie(this.thisWindow); this.activeDocument = this.mainWindowDocumentTracker.ActiveDocument; this.activeDocumentCookie.WrappedDocument = this.mainWindowDocumentTracker.ActiveDocument; this.isTrackingMainWindow = true; this.mainWindow.Closed += OnMainWindowClosed; } } this.documentListAsINCC = this.DocumentManager.Documents as INotifyCollectionChanged; if (this.documentListAsINCC != null) { this.documentListAsINCC.CollectionChanged += OnDocumentListChanged; } InitializeDocumentList(); this.selectedDocument = this.activeDocumentCookie ?? this.documentList.FirstOrDefault(d => d.WrappedDocument == this.activeDocument); }