@@ -70,7 +70,7 @@ @implementation SCXcodeMinimapTheme
70
70
@interface SCXcodeMinimapView () <NSLayoutManagerDelegate , DVTFoldingManagerDelegate, DBGBreakpointAnnotationProviderDelegate>
71
71
72
72
@property (nonatomic , weak ) IDESourceCodeEditor *editor;
73
- @property (nonatomic , assign ) DVTSourceTextView *editorTextView;
73
+ @property (nonatomic , strong ) DVTSourceTextView *editorTextView;
74
74
75
75
@property (nonatomic , strong ) NSScrollView *scrollView;
76
76
@property (nonatomic , strong ) DVTSourceTextView *textView;
@@ -87,15 +87,20 @@ @interface SCXcodeMinimapView () <NSLayoutManagerDelegate, DVTFoldingManagerDele
87
87
88
88
@property (nonatomic , weak ) DBGBreakpointAnnotationProvider *breakpointAnnotationProvider;
89
89
90
+ @property (nonatomic , strong ) NSMutableArray *notificationObservers;
91
+
90
92
@end
91
93
92
94
@implementation SCXcodeMinimapView
93
95
94
96
- (void )dealloc
95
- {
96
- [[NSNotificationCenter defaultCenter ] removeObserver: self ];
97
+ {
98
+ for (id observer in self.notificationObservers ) {
99
+ [[NSNotificationCenter defaultCenter ] removeObserver: observer];
100
+ }
101
+
97
102
[self .textView.textStorage removeLayoutManager: self .textView.layoutManager];
98
- [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector ( invalidateDisplayForVisibleRange ) object :nil ];
103
+ [self .breakpointAnnotationProvider setMinimapDelegate :nil ];
99
104
}
100
105
101
106
- (instancetype )initWithEditor : (IDESourceCodeEditor *)editor
@@ -133,49 +138,54 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
133
138
134
139
[self updateTheme ];
135
140
141
+
142
+ for (NSDictionary *providerDictionary in self.editorTextView .annotationManager .annotationProviders ) {
143
+ if ([providerDictionary[@" annotationProviderObject" ] isKindOfClass: [DBGBreakpointAnnotationProvider class ]]) {
144
+ self.breakpointAnnotationProvider = providerDictionary[@" annotationProviderObject" ];
145
+ [self .breakpointAnnotationProvider setMinimapDelegate: self ];
146
+ break ;
147
+ }
148
+ }
149
+
136
150
BOOL shouldHighlightBreakpoints = [[[NSUserDefaults standardUserDefaults ] objectForKey: SCXcodeMinimapShouldHighlightBreakpointsKey] boolValue ];
137
151
if (shouldHighlightBreakpoints) {
138
-
139
- for (NSDictionary *providerDictionary in self.editorTextView .annotationManager .annotationProviders ) {
140
- if ([providerDictionary[@" annotationProviderObject" ] isKindOfClass: [DBGBreakpointAnnotationProvider class ]]) {
141
- self.breakpointAnnotationProvider = providerDictionary[@" annotationProviderObject" ];
142
- [self .breakpointAnnotationProvider setMinimapDelegate: self ];
143
- break ;
144
- }
145
- }
146
-
147
152
self.shouldUpdateBreakpoints = YES ;
148
153
[self invalidateDisplayForVisibleRange ];
149
154
}
150
155
156
+
151
157
BOOL shouldHideEditorVerticalScroller = [[[NSUserDefaults standardUserDefaults ] objectForKey: SCXcodeMinimapShouldHideEditorScrollerKey] boolValue ];
152
158
[self .editor.scrollView setHasVerticalScroller: !shouldHideEditorVerticalScroller];
153
159
160
+
154
161
// Notifications
155
162
163
+ self.notificationObservers = [NSMutableArray array ];
164
+
156
165
__weak typeof (self) weakSelf = self;
157
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapShouldDisplayChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
166
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapShouldDisplayChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
158
167
[weakSelf setVisible: [[[NSUserDefaults standardUserDefaults ] objectForKey: SCXcodeMinimapShouldDisplayKey] boolValue ]];
159
- }];
168
+ }]] ;
160
169
161
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapZoomLevelChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
170
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapZoomLevelChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
162
171
[weakSelf updateSize ];
163
172
[weakSelf invalidateDisplayForVisibleRange ];
164
- }];
173
+ }]] ;
165
174
166
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightBreakpointsChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
175
+ [self .notificationObservers addObject: [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightBreakpointsChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
176
+ weakSelf.shouldUpdateBreakpoints = YES ;
167
177
[weakSelf invalidateDisplayForVisibleRange ];
168
- }];
178
+ }]] ;
169
179
170
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightCommentsChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
180
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightCommentsChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
171
181
[weakSelf invalidateDisplayForVisibleRange ];
172
- }];
182
+ }]] ;
173
183
174
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightPreprocessorChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
184
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightPreprocessorChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
175
185
[weakSelf invalidateDisplayForVisibleRange ];
176
- }];
186
+ }]] ;
177
187
178
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightEditorChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
188
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHighlightEditorChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
179
189
180
190
BOOL editorHighlightingEnabled = [[[NSUserDefaults standardUserDefaults ] objectForKey: SCXcodeMinimapShouldHighlightEditorKey] boolValue ];
181
191
if (editorHighlightingEnabled) {
@@ -185,25 +195,25 @@ - (instancetype)initWithEditor:(IDESourceCodeEditor *)editor
185
195
}
186
196
187
197
[weakSelf invalidateDisplayForVisibleRange ];
188
- }];
198
+ }]] ;
189
199
190
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHideEditorScrollerChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
200
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapHideEditorScrollerChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
191
201
[weakSelf.editor.scrollView setHasVerticalScroller: ![[[NSUserDefaults standardUserDefaults ] objectForKey: SCXcodeMinimapShouldHideEditorScrollerKey] boolValue ]];
192
- }];
202
+ }]] ;
193
203
194
- [[NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapThemeChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
204
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: SCXcodeMinimapThemeChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
195
205
[weakSelf updateTheme ];
196
- }];
197
-
198
- [[NSNotificationCenter defaultCenter ] addObserverForName: DVTFontAndColorSourceTextSettingsChangedNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
206
+ }]] ;
207
+
208
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: DVTFontAndColorSourceTextSettingsChangedNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
199
209
[weakSelf updateTheme ];
200
- }];
210
+ }]] ;
201
211
202
- [[NSNotificationCenter defaultCenter ] addObserverForName: IDESourceCodeEditorTextViewBoundsDidChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
212
+ [self .notificationObservers addObject: [ [NSNotificationCenter defaultCenter ] addObserverForName: IDESourceCodeEditorTextViewBoundsDidChangeNotification object: nil queue: nil usingBlock: ^(NSNotification *note) {
203
213
if ([note.object isEqual: weakSelf.editor]) {
204
214
[weakSelf updateOffset ];
205
215
}
206
- }];
216
+ }]] ;
207
217
}
208
218
209
219
return self;
@@ -355,7 +365,8 @@ - (void)updateBreakpoints
355
365
356
366
for (DBGBreakpointAnnotation *breakpointAnnotation in self.breakpointAnnotationProvider .annotations ) {
357
367
if (breakpointAnnotation.paragraphRange .location == lineNumber) {
358
- [self .breakpointDictionaries addObject: @{kBreakpointRangeKey : [NSValue valueWithRange: lineRange], kBreakpointEnabledKey : @(breakpointAnnotation.enabled )}];
368
+ [self .breakpointDictionaries addObject: @{kBreakpointRangeKey : [NSValue valueWithRange: lineRange],
369
+ kBreakpointEnabledKey : @(breakpointAnnotation.enabled )}];
359
370
}
360
371
}
361
372
0 commit comments