@@ -37,36 +37,65 @@ public SubclassingWindow Subclass(IntPtr hwnd)
37
37
return null ;
38
38
}
39
39
40
- if ( _subclasses . TryGetValue ( hwnd , out var existing ) )
40
+ lock ( ThreadLock )
41
+ {
42
+ if ( _subclasses . TryGetValue ( hwnd , out var existing ) )
43
+ {
44
+ return existing ;
45
+ }
46
+
47
+ // Any additional cases also need to be added to IsSubclassable above.
48
+ switch ( windowType )
49
+ {
50
+ case WindowType . CodePane :
51
+ return TrackNewCodePane ( hwnd ) ;
52
+ case WindowType . DesignerWindow :
53
+ return TrackNewDesigner ( hwnd ) ;
54
+ default :
55
+ return null ;
56
+ }
57
+ }
58
+ }
59
+
60
+ private CodePaneSubclass TrackNewCodePane ( IntPtr hwnd )
61
+ {
62
+ var codePane = new CodePaneSubclass ( hwnd , null ) ;
63
+ try
41
64
{
42
- return existing ;
65
+ if ( _subclasses . TryAdd ( hwnd , codePane ) )
66
+ {
67
+ codePane . ReleasingHandle += SubclassRemoved ;
68
+ codePane . CaptionChanged += AssociateCodePane ;
69
+ SubclassLogger . Trace ( $ "Subclassed hWnd 0x{ hwnd . ToInt64 ( ) : X8} as CodePane.") ;
70
+ return codePane ;
71
+ }
43
72
}
73
+ catch ( Exception ex )
74
+ {
75
+ SubclassLogger . Error ( ex ) ;
76
+ }
77
+ codePane . Dispose ( ) ;
78
+ return null ;
79
+ }
44
80
45
- // Any additional cases also need to be added to IsSubclassable above.
46
- switch ( windowType )
81
+ private DesignerWindowSubclass TrackNewDesigner ( IntPtr hwnd )
82
+ {
83
+ var designer = new DesignerWindowSubclass ( hwnd ) ;
84
+ try
85
+ {
86
+ if ( _subclasses . TryAdd ( hwnd , designer ) )
87
+ {
88
+ designer . ReleasingHandle += SubclassRemoved ;
89
+ SubclassLogger . Trace ( $ "Subclassed hWnd 0x{ hwnd . ToInt64 ( ) : X8} as DesignerWindow.") ;
90
+ return designer ;
91
+ }
92
+ }
93
+ catch ( Exception ex )
47
94
{
48
- case WindowType . CodePane :
49
- lock ( ThreadLock )
50
- {
51
- var codePane = new CodePaneSubclass ( hwnd , null ) ;
52
- _subclasses . TryAdd ( hwnd , codePane ) ;
53
- codePane . ReleasingHandle += SubclassRemoved ;
54
- codePane . CaptionChanged += AssociateCodePane ;
55
- SubclassLogger . Trace ( $ "Subclassed hWnd 0x{ hwnd . ToInt64 ( ) : X8} as CodePane.") ;
56
- return codePane ;
57
- }
58
- case WindowType . DesignerWindow :
59
- lock ( ThreadLock )
60
- {
61
- var designer = new DesignerWindowSubclass ( hwnd ) ;
62
- _subclasses . TryAdd ( hwnd , designer ) ;
63
- designer . ReleasingHandle += SubclassRemoved ;
64
- SubclassLogger . Trace ( $ "Subclassed hWnd 0x{ hwnd . ToInt64 ( ) : X8} as DesignerWindow.") ;
65
- return designer ;
66
- }
67
- default :
68
- return null ;
95
+ SubclassLogger . Error ( ex ) ;
69
96
}
97
+ designer . Dispose ( ) ;
98
+ return null ;
70
99
}
71
100
72
101
private void SubclassRemoved ( object sender , EventArgs eventArgs )
0 commit comments