Skip to content

Commit 5eb3c82

Browse files
committed
Simplify view search code
We do a breadth first search starting with first responder and then content view so we still get the advantage of finding the view quickly but avoid duplicated code.
1 parent 6a1dc94 commit 5eb3c82

File tree

1 file changed

+8
-24
lines changed

1 file changed

+8
-24
lines changed

Commands/Utilities/TextMate.mm

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,39 +29,23 @@ id frontMostTextViewForSelector(SEL selector, BOOL *isNew, NSWindow* *winForText
2929
// Find the front most OakTextView
3030
for(NSWindow* win in [NSApp orderedWindows])
3131
{
32+
NSMutableArray* views = [NSMutableArray array];
33+
if(id firstResponder = [win firstResponder])
34+
[views addObject:firstResponder];
35+
[views addObject:[win contentView]];
3236

33-
// Check the firstResponder to speed up the search
34-
if([[win firstResponder] respondsToSelector:checkSelector]
35-
&& [[win firstResponder] respondsToSelector:selector])
36-
{
37-
if(winForTextView) *winForTextView = win;
38-
return [win firstResponder];
39-
}
40-
41-
// Look for it in first level subViews
42-
NSMutableArray* allViews = [[[[win contentView] subviews] mutableCopy] autorelease];
43-
for(NSView* view in allViews)
37+
for(NSUInteger i = 0; i < [views count]; ++i)
4438
{
39+
id view = [views objectAtIndex:i];
4540
if([view respondsToSelector:checkSelector] && [view respondsToSelector:selector])
4641
{
4742
if(winForTextView) *winForTextView = win;
4843
return view;
4944
}
50-
}
5145

52-
// Look deeper for it in the second level subViews
53-
NSMutableArray* allSubViews = [NSMutableArray array];
54-
for(NSUInteger i = 0; i < [allViews count]; ++i)
55-
[allSubViews addObjectsFromArray:[(id)CFArrayGetValueAtIndex((CFArrayRef)allViews, i) subviews]];
56-
for(NSView* view in allSubViews)
57-
{
58-
if([view respondsToSelector:checkSelector] && [view respondsToSelector:selector])
59-
{
60-
if(winForTextView) *winForTextView = win;
61-
return view;
62-
}
46+
if([view respondsToSelector:@selector(subviews)])
47+
[views addObjectsFromArray:[view performSelector:@selector(subviews)]];
6348
}
64-
6549
}
6650

6751
// If no textView was found create a new document

0 commit comments

Comments
 (0)