Skip to content

Commit 9002f7e

Browse files
authored
Merge pull request #3790 from WaynePhillipsEA/fix-protected-proj-com-release
Fix protected projects COM release at added/removed events.
2 parents 552bfc0 + 01ffe4e commit 9002f7e

File tree

2 files changed

+21
-30
lines changed

2 files changed

+21
-30
lines changed

Rubberduck.VBEEditor/SafeComWrappers/VB6/VBProjects.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,15 @@ private void DetatchEvents()
118118
private ItemAddedDelegate _projectAdded;
119119
private void OnProjectAdded(VB.VBProject vbProject)
120120
{
121-
if (VBE.IsInDesignMode) OnDispatch(ProjectAdded, vbProject, true);
121+
OnDispatch(ProjectAdded, vbProject, true);
122122
}
123123

124124
public event EventHandler<ProjectEventArgs> ProjectRemoved;
125125
private delegate void ItemRemovedDelegate(VB.VBProject vbProject);
126126
private ItemRemovedDelegate _projectRemoved;
127127
private void OnProjectRemoved(VB.VBProject vbProject)
128128
{
129-
if (VBE.IsInDesignMode) OnDispatch(ProjectRemoved, vbProject);
129+
OnDispatch(ProjectRemoved, vbProject);
130130
}
131131

132132
public event EventHandler<ProjectRenamedEventArgs> ProjectRenamed;
@@ -141,7 +141,7 @@ private void OnProjectRenamed(VB.VBProject vbProject, string oldName)
141141
project.Dispose();
142142
return;
143143
}
144-
144+
145145
var projectId = project.ProjectId;
146146

147147
var handler = ProjectRenamed;
@@ -159,15 +159,15 @@ private void OnProjectRenamed(VB.VBProject vbProject, string oldName)
159159
private ItemActivatedDelegate _projectActivated;
160160
private void OnProjectActivated(VB.VBProject vbProject)
161161
{
162-
if (VBE.IsInDesignMode) OnDispatch(ProjectActivated, vbProject);
162+
OnDispatch(ProjectActivated, vbProject);
163163
}
164164

165165
private void OnDispatch(EventHandler<ProjectEventArgs> dispatched, VB.VBProject vbProject, bool assignId = false)
166166
{
167167
var project = new VBProject(vbProject);
168168

169169
var handler = dispatched;
170-
if (handler == null)
170+
if (handler == null || !VBE.IsInDesignMode)
171171
{
172172
project.Dispose();
173173
return;

Rubberduck.VBEEditor/SafeComWrappers/VBA/VBProjects.cs

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ namespace Rubberduck.VBEditor.SafeComWrappers.VBA
1010
{
1111
public class VBProjects : SafeEventedComWrapper<VB.VBProjects, VB._dispVBProjectsEvents>, IVBProjects, VB._dispVBProjectsEvents
1212
{
13-
public VBProjects(VB.VBProjects target, bool rewrapping = false)
13+
public VBProjects(VB.VBProjects target, bool rewrapping = false)
1414
:base(target, rewrapping)
15-
{
15+
{
1616
}
1717

1818
public int Count => IsWrappingNullReference ? 0 : Target.Count;
1919

2020
public IVBE VBE => new VBE(IsWrappingNullReference ? null : Target.VBE);
2121

2222
public IVBE Parent => new VBE(IsWrappingNullReference ? null : Target.Parent);
23-
23+
2424
public IVBProject Add(ProjectType type)
2525
{
2626
return new VBProject(IsWrappingNullReference ? null : Target.Add((VB.vbext_ProjectType)type));
@@ -32,7 +32,7 @@ public void Remove(IVBProject project)
3232
{
3333
return;
3434
}
35-
Target.Remove((VB.VBProject) project.Target);
35+
Target.Remove((VB.VBProject)project.Target);
3636
}
3737

3838
public IVBProject Open(string path)
@@ -66,28 +66,22 @@ public bool Equals(IVBProjects other)
6666

6767
public override int GetHashCode()
6868
{
69-
return IsWrappingNullReference ? 0
69+
return IsWrappingNullReference ? 0
7070
: HashCode.Compute(Target);
7171
}
7272

7373
#region Events
74-
74+
7575
public event EventHandler<ProjectEventArgs> ProjectAdded;
7676
void VB._dispVBProjectsEvents.ItemAdded([MarshalAs(UnmanagedType.Interface), In] VB.VBProject VBProject)
7777
{
78-
if (IsInDesignMode() && VBProject.Protection == VB.vbext_ProjectProtection.vbext_pp_none)
79-
{
80-
OnDispatch(ProjectAdded, VBProject, true);
81-
}
78+
OnDispatch(ProjectAdded, VBProject, true);
8279
}
8380

8481
public event EventHandler<ProjectEventArgs> ProjectRemoved;
8582
void VB._dispVBProjectsEvents.ItemRemoved([MarshalAs(UnmanagedType.Interface), In] VB.VBProject VBProject)
8683
{
87-
if (IsInDesignMode() && VBProject.Protection == VB.vbext_ProjectProtection.vbext_pp_none)
88-
{
89-
OnDispatch(ProjectRemoved, VBProject);
90-
}
84+
OnDispatch(ProjectRemoved, VBProject);
9185
}
9286

9387
public event EventHandler<ProjectRenamedEventArgs> ProjectRenamed;
@@ -116,17 +110,14 @@ void VB._dispVBProjectsEvents.ItemRenamed([MarshalAs(UnmanagedType.Interface), I
116110
public event EventHandler<ProjectEventArgs> ProjectActivated;
117111
void VB._dispVBProjectsEvents.ItemActivated([MarshalAs(UnmanagedType.Interface), In] VB.VBProject VBProject)
118112
{
119-
if (IsInDesignMode() && VBProject.Protection == VB.vbext_ProjectProtection.vbext_pp_none)
120-
{
121-
OnDispatch(ProjectActivated, VBProject);
122-
}
113+
OnDispatch(ProjectActivated, VBProject);
123114
}
124115

125-
private static void OnDispatch(EventHandler<ProjectEventArgs> dispatched, VB.VBProject vbProject, bool assignId = false)
116+
private void OnDispatch(EventHandler<ProjectEventArgs> dispatched, VB.VBProject vbProject, bool assignId = false)
126117
{
127118
var project = new VBProject(vbProject);
128119
var handler = dispatched;
129-
if (handler == null || vbProject.Protection == VB.vbext_ProjectProtection.vbext_pp_locked)
120+
if (handler == null || !IsInDesignMode() || vbProject.Protection == VB.vbext_ProjectProtection.vbext_pp_locked)
130121
{
131122
project.Dispose();
132123
return;
@@ -149,13 +140,13 @@ private static void OnDispatch(EventHandler<ProjectEventArgs> dispatched, VB.VBP
149140
private bool IsInDesignMode()
150141
{
151142
foreach (var project in this)
152-
using(project)
153-
{
154-
if (project.Mode != EnvironmentMode.Design)
143+
using(project)
155144
{
156-
return false;
145+
if (project.Mode != EnvironmentMode.Design)
146+
{
147+
return false;
148+
}
157149
}
158-
}
159150
return true;
160151
}
161152

0 commit comments

Comments
 (0)