From 7530b30a67bdf980e78b744a4f885aca4332a785 Mon Sep 17 00:00:00 2001 From: comintern Date: Fri, 17 Feb 2017 12:14:43 -0600 Subject: [PATCH 1/2] Add null check for ICodePane before raising OnSelectionChange. --- Rubberduck.VBEEditor/Events/VBEEvents.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rubberduck.VBEEditor/Events/VBEEvents.cs b/Rubberduck.VBEEditor/Events/VBEEvents.cs index fcebb59ce6..661d1bd067 100644 --- a/Rubberduck.VBEEditor/Events/VBEEvents.cs +++ b/Rubberduck.VBEEditor/Events/VBEEvents.cs @@ -136,7 +136,7 @@ private static void OnSelectionChanged(IntPtr hwnd) if (SelectionChanged != null) { var pane = GetCodePaneFromHwnd(hwnd); - SelectionChanged.Invoke(_vbe, new SelectionChangedEventArgs(pane)); + if (pane != null) SelectionChanged.Invoke(_vbe, new SelectionChangedEventArgs(pane)); } } From 15588125029dfce3684d0931765a067ae61baa65 Mon Sep 17 00:00:00 2001 From: comintern Date: Fri, 17 Feb 2017 12:18:42 -0600 Subject: [PATCH 2/2] Fix VBE event handing in SourceControlViewViewModel. --- .../SourceControlViewViewModel.cs | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs b/RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs index 6b82ef864b..e66e2feec4 100644 --- a/RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs +++ b/RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs @@ -8,7 +8,6 @@ using System.Linq; using System.Windows.Forms; using System.Windows.Media.Imaging; -using Microsoft.Vbe.Interop; using NLog; using Rubberduck.Parsing.VBA; using Rubberduck.SettingsProvider; @@ -17,7 +16,6 @@ using Rubberduck.UI.Command.MenuItems; using Rubberduck.VBEditor.Events; using Rubberduck.VBEditor.SafeComWrappers.Abstract; -using Rubberduck.VBEditor.SafeComWrappers.VBA; using resx = Rubberduck.UI.SourceControl.SourceControl; namespace Rubberduck.UI.SourceControl @@ -82,11 +80,8 @@ public SourceControlViewViewModel( _openCommandPromptCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => OpenCommandPrompt()); - Rubberduck.VBEditor.SafeComWrappers.VBA.VBProjects.ProjectRemoved += ProjectRemoved; - foreach (var project in _vbe.VBProjects.Where(proj => proj.VBComponents != null)) - { - AddComponentEventHandlers(project); - } + + AddComponentEventHandlers(); TabItems = new ObservableCollection(views); SetTab(SourceControlTab.Changes); @@ -108,15 +103,17 @@ public void SetTab(SourceControlTab tab) private bool _listening = true; - private void AddComponentEventHandlers(IVBProject project) + private void AddComponentEventHandlers() { + VBEditor.SafeComWrappers.VBA.VBProjects.ProjectRemoved += ProjectRemoved; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentAdded += ComponentAdded; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentRemoved += ComponentRemoved; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentRenamed += ComponentRenamed; } - private void RemoveComponentEventHandlers(IVBProject project) + private void RemoveComponentEventHandlers() { + VBEditor.SafeComWrappers.VBA.VBProjects.ProjectRemoved -= ProjectRemoved; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentAdded -= ComponentAdded; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentRemoved -= ComponentRemoved; VBEditor.SafeComWrappers.VBA.VBComponents.ComponentRenamed -= ComponentRenamed; @@ -185,8 +182,6 @@ private void ComponentRenamed(object sender, ComponentRenamedEventArgs e) private void ProjectRemoved(object sender, ProjectEventArgs e) { - RemoveComponentEventHandlers(e.Project); - if (Provider == null || !Provider.HandleVbeSinkEvents) { return; @@ -1090,11 +1085,7 @@ public void Dispose() _fileSystemWatcher.Dispose(); } - VBEditor.SafeComWrappers.VBA.VBProjects.ProjectRemoved -= ProjectRemoved; - foreach (var project in _vbe.VBProjects.Where(proj => proj.VBComponents != null)) - { - RemoveComponentEventHandlers(project); - } + RemoveComponentEventHandlers(); } } }